feat(http): construct telegraf handler by TelegrafBackend

pull/11700/head
zhulongcheng 2019-01-16 23:48:17 +08:00 committed by Leo Di Donato
parent 18f4825e4f
commit df93adce9a
3 changed files with 56 additions and 31 deletions

View File

@ -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

View File

@ -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)

View File

@ -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)