influxdb/label/controller.go

95 lines
2.7 KiB
Go

package label
import (
"context"
"github.com/influxdata/influxdb/v2"
"github.com/influxdata/influxdb/v2/kit/feature"
)
var _ influxdb.LabelService = (*LabelController)(nil)
// LabelController is a temporary system for switching the label backend between
// the old and refactored versions with a feature flag
type LabelController struct {
flagger feature.Flagger
oldLabelService influxdb.LabelService
newLabelService influxdb.LabelService
}
func NewLabelController(flagger feature.Flagger, oldLabelService, newLabelService influxdb.LabelService) *LabelController {
return &LabelController{
flagger: flagger,
oldLabelService: oldLabelService,
newLabelService: newLabelService,
}
}
func (s *LabelController) useNew(ctx context.Context) bool {
return feature.NewLabelPackage().Enabled(ctx, s.flagger)
}
func (s *LabelController) CreateLabel(ctx context.Context, l *influxdb.Label) error {
if s.useNew(ctx) {
return s.newLabelService.CreateLabel(ctx, l)
}
return s.oldLabelService.CreateLabel(ctx, l)
}
func (s *LabelController) FindLabelByID(ctx context.Context, id influxdb.ID) (*influxdb.Label, error) {
if s.useNew(ctx) {
return s.newLabelService.FindLabelByID(ctx, id)
}
return s.oldLabelService.FindLabelByID(ctx, id)
}
func (s *LabelController) FindLabels(ctx context.Context, filter influxdb.LabelFilter, opt ...influxdb.FindOptions) ([]*influxdb.Label, error) {
if s.useNew(ctx) {
return s.newLabelService.FindLabels(ctx, filter, opt...)
}
return s.oldLabelService.FindLabels(ctx, filter, opt...)
}
func (s *LabelController) FindResourceLabels(ctx context.Context, filter influxdb.LabelMappingFilter) ([]*influxdb.Label, error) {
if s.useNew(ctx) {
return s.newLabelService.FindResourceLabels(ctx, filter)
}
return s.oldLabelService.FindResourceLabels(ctx, filter)
}
func (s *LabelController) UpdateLabel(ctx context.Context, id influxdb.ID, upd influxdb.LabelUpdate) (*influxdb.Label, error) {
if s.useNew(ctx) {
return s.newLabelService.UpdateLabel(ctx, id, upd)
}
return s.oldLabelService.UpdateLabel(ctx, id, upd)
}
func (s *LabelController) DeleteLabel(ctx context.Context, id influxdb.ID) error {
if s.useNew(ctx) {
return s.newLabelService.DeleteLabel(ctx, id)
}
return s.oldLabelService.DeleteLabel(ctx, id)
}
func (s *LabelController) CreateLabelMapping(ctx context.Context, m *influxdb.LabelMapping) error {
if s.useNew(ctx) {
return s.newLabelService.CreateLabelMapping(ctx, m)
}
return s.oldLabelService.CreateLabelMapping(ctx, m)
}
func (s *LabelController) DeleteLabelMapping(ctx context.Context, m *influxdb.LabelMapping) error {
if s.useNew(ctx) {
return s.newLabelService.DeleteLabelMapping(ctx, m)
}
return s.oldLabelService.DeleteLabelMapping(ctx, m)
}