diff --git a/http/api_handler.go b/http/api_handler.go index 9259cfa9e0..f4235a7d3d 100644 --- a/http/api_handler.go +++ b/http/api_handler.go @@ -120,14 +120,9 @@ func NewAPIHandler(b *APIBackend) *APIHandler { taskBackend := NewTaskBackend(b) h.TaskHandler = NewTaskHandler(taskBackend) - h.TelegrafHandler = NewTelegrafHandler( - b.Logger.With(zap.String("handler", "telegraf")), - b.UserResourceMappingService, - b.LabelService, - authorizer.NewTelegrafConfigService(b.TelegrafService, b.UserResourceMappingService), - b.UserService, - b.OrganizationService, - ) + telegrafBackend := NewTelegrafBackend(b) + telegrafBackend.TelegrafService = authorizer.NewTelegrafConfigService(b.TelegrafService, b.UserResourceMappingService) + h.TelegrafHandler = NewTelegrafHandler(telegrafBackend) h.WriteHandler = NewWriteHandler(b.PointsWriter) h.WriteHandler.OrganizationService = b.OrganizationService diff --git a/http/telegraf.go b/http/telegraf.go index 416fd8efa2..65d9141a08 100644 --- a/http/telegraf.go +++ b/http/telegraf.go @@ -14,6 +14,31 @@ import ( "go.uber.org/zap" ) +// TelegrafBackend is all services and associated parameters required to construct +// the TelegrafHandler. +type TelegrafBackend struct { + Logger *zap.Logger + + TelegrafService platform.TelegrafConfigStore + UserResourceMappingService platform.UserResourceMappingService + LabelService platform.LabelService + UserService platform.UserService + OrganizationService platform.OrganizationService +} + +// NewTelegrafBackend returns a new instance of TelegrafBackend. +func NewTelegrafBackend(b *APIBackend) *TelegrafBackend { + return &TelegrafBackend{ + Logger: b.Logger.With(zap.String("handler", "telegraf")), + + TelegrafService: b.TelegrafService, + UserResourceMappingService: b.UserResourceMappingService, + LabelService: b.LabelService, + UserService: b.UserService, + OrganizationService: b.OrganizationService, + } +} + // TelegrafHandler is the handler for the telegraf service type TelegrafHandler struct { *httprouter.Router @@ -38,23 +63,16 @@ const ( ) // NewTelegrafHandler returns a new instance of TelegrafHandler. -func NewTelegrafHandler( - logger *zap.Logger, - mappingService platform.UserResourceMappingService, - labelService platform.LabelService, - telegrafSvc platform.TelegrafConfigStore, - userService platform.UserService, - orgService platform.OrganizationService, -) *TelegrafHandler { +func NewTelegrafHandler(b *TelegrafBackend) *TelegrafHandler { h := &TelegrafHandler{ Router: NewRouter(), + Logger: b.Logger, - UserResourceMappingService: mappingService, - LabelService: labelService, - TelegrafService: telegrafSvc, - Logger: logger, - UserService: userService, - OrganizationService: orgService, + TelegrafService: b.TelegrafService, + UserResourceMappingService: b.UserResourceMappingService, + LabelService: b.LabelService, + UserService: b.UserService, + OrganizationService: b.OrganizationService, } h.HandlerFunc("POST", telegrafsPath, h.handlePostTelegraf) h.HandlerFunc("GET", telegrafsPath, h.handleGetTelegrafs) diff --git a/http/telegraf_test.go b/http/telegraf_test.go index 1b7d52fc73..81841de1e4 100644 --- a/http/telegraf_test.go +++ b/http/telegraf_test.go @@ -10,13 +10,27 @@ import ( "strings" "testing" + "go.uber.org/zap" + platform "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/mock" "github.com/influxdata/influxdb/telegraf/plugins/inputs" "github.com/influxdata/influxdb/telegraf/plugins/outputs" - "go.uber.org/zap/zaptest" ) +// NewMockTelegrafBackend returns a TelegrafBackend with mock services. +func NewMockTelegrafBackend() *TelegrafBackend { + return &TelegrafBackend{ + Logger: zap.NewNop().With(zap.String("handler", "telegraf")), + + TelegrafService: &mock.TelegrafConfigStore{}, + UserResourceMappingService: mock.NewUserResourceMappingService(), + LabelService: mock.NewLabelService(), + UserService: mock.NewUserService(), + OrganizationService: mock.NewOrganizationService(), + } +} + func TestTelegrafHandler_handleGetTelegrafs(t *testing.T) { type wants struct { statusCode int @@ -155,7 +169,9 @@ func TestTelegrafHandler_handleGetTelegrafs(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { w := httptest.NewRecorder() - h := NewTelegrafHandler(zaptest.NewLogger(t), mock.NewUserResourceMappingService(), mock.NewLabelService(), tt.svc, mock.NewUserService(), &mock.OrganizationService{}) + telegrafBackend := NewMockTelegrafBackend() + telegrafBackend.TelegrafService = tt.svc + h := NewTelegrafHandler(telegrafBackend) h.ServeHTTP(w, tt.r) res := w.Result() @@ -674,15 +690,11 @@ func TestTelegrafHandler_handleGetTelegraf(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - logger := zaptest.NewLogger(t) - mapping := mock.NewUserResourceMappingService() - labels := mock.NewLabelService() - users := mock.NewUserService() - orgs := &mock.OrganizationService{} - tt.r.Header.Set("Accept", tt.acceptHeader) w := httptest.NewRecorder() - h := NewTelegrafHandler(logger, mapping, labels, tt.svc, users, orgs) + telegrafBackend := NewMockTelegrafBackend() + telegrafBackend.TelegrafService = tt.svc + h := NewTelegrafHandler(telegrafBackend) h.ServeHTTP(w, tt.r)