influxdb/kit/transport/http/feature_controller.go

40 lines
946 B
Go

package http
import (
"context"
"net/http"
"github.com/influxdata/influxdb/v2/kit/feature"
)
// Enabler allows the switching between two HTTP Handlers
type Enabler interface {
Enabled(ctx context.Context, flagger ...feature.Flagger) bool
}
// FeatureHandler is used to switch requests between an existing and a feature flagged
// HTTP Handler on a per-request basis
type FeatureHandler struct {
enabler Enabler
flagger feature.Flagger
oldHandler http.Handler
newHandler http.Handler
prefix string
}
func NewFeatureHandler(e Enabler, f feature.Flagger, old, new http.Handler, prefix string) *FeatureHandler {
return &FeatureHandler{e, f, old, new, prefix}
}
func (h *FeatureHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if h.enabler.Enabled(r.Context(), h.flagger) {
h.newHandler.ServeHTTP(w, r)
return
}
h.oldHandler.ServeHTTP(w, r)
}
func (h *FeatureHandler) Prefix() string {
return h.prefix
}