From 5f19c6cace36ceeb68666e080bbd049381d2bef2 Mon Sep 17 00:00:00 2001 From: Jacob Marble Date: Wed, 4 Dec 2019 15:10:23 -0800 Subject: [PATCH] chore: Remove several instances of WithLogger (#15996) * chore: Remove several instances of WithLogger * chore: unexport Logger fields * chore: unexport some more Logger fields * chore: go fmt chore: fix test chore: s/logger/log chore: fix test chore: revert http.Handler.Handler constructor initialization * refactor: integrate review feedback, fix all test nop loggers * refactor: capitalize all log messages * refactor: rename two logger to log --- authorizer/task.go | 12 +- bolt/authorization_test.go | 2 +- bolt/bbolt.go | 18 +- bolt/bbolt_test.go | 15 +- bolt/bucket_test.go | 2 +- bolt/dashboard_test.go | 2 +- bolt/id.go | 2 +- bolt/id_test.go | 2 +- bolt/keyvalue_log_test.go | 2 +- bolt/kv.go | 19 +- bolt/kv_test.go | 2 +- bolt/lookup_service_test.go | 2 +- bolt/metrics_test.go | 9 +- bolt/onboarding_test.go | 2 +- bolt/organization_test.go | 2 +- bolt/passwords_test.go | 2 +- bolt/scraper_test.go | 2 +- bolt/secret_test.go | 2 +- bolt/session_test.go | 2 +- bolt/source_test.go | 2 +- bolt/telegraf_test.go | 2 +- bolt/user_resource_mapping_test.go | 2 +- bolt/user_test.go | 2 +- chronograf/oauth2/mux.go | 18 +- cmd/influx/main.go | 5 +- cmd/influx/pkg.go | 2 + cmd/influx/pkg_test.go | 3 +- cmd/influx_inspect/buildtsi/buildtsi.go | 4 +- cmd/influxd/generate/command.go | 5 +- cmd/influxd/launcher/engine.go | 12 +- cmd/influxd/launcher/launcher.go | 172 ++++++++---------- cmd/influxd/launcher/pkger_test.go | 4 + cmd/telemetryd/main.go | 20 +- example_test.go | 3 +- gather/README.md | 8 +- gather/handler.go | 10 +- gather/recorder.go | 15 +- gather/scheduler.go | 12 +- gather/scheduler_test.go | 5 +- http/api_handler.go | 76 ++++---- http/api_handler_test.go | 4 +- http/auth_service.go | 36 ++-- http/auth_test.go | 33 ++-- http/authentication_middleware.go | 8 +- http/authentication_test.go | 5 +- http/bucket_service.go | 40 ++-- http/bucket_test.go | 41 +++-- http/check_service.go | 54 +++--- http/check_test.go | 44 ++--- http/chronograf_handler.go | 2 +- http/dashboard_service.go | 60 +++--- http/dashboard_test.go | 47 +++-- http/delete_handler.go | 14 +- http/delete_test.go | 10 +- http/document_service.go | 38 ++-- http/document_test.go | 18 +- http/handler.go | 11 +- http/handler_test.go | 15 +- http/label_service.go | 28 +-- http/label_test.go | 15 +- http/middleware.go | 4 +- http/notification_endpoint.go | 52 +++--- http/notification_endpoint_test.go | 41 ++--- http/notification_rule.go | 52 +++--- http/notification_rule_test.go | 13 +- http/onboarding.go | 20 +- http/onboarding_test.go | 15 +- http/org_service.go | 42 ++--- http/org_test.go | 25 ++- http/pkger_http_server_test.go | 3 +- http/platform_handler.go | 2 +- http/query_handler.go | 22 +-- http/query_handler_test.go | 16 +- http/scraper_service.go | 36 ++-- http/scraper_service_test.go | 33 ++-- http/server.go | 19 +- http/session_handler.go | 12 +- http/session_test.go | 16 +- http/source_service.go | 32 ++-- http/swagger.go | 9 +- http/swagger_noassets.go | 14 +- http/task_service.go | 46 ++--- http/task_service_test.go | 24 +-- http/telegraf.go | 42 ++--- http/telegraf_test.go | 15 +- http/usage_service.go | 8 +- http/user_resource_mapping_service.go | 8 +- http/user_resource_mapping_test.go | 9 +- http/user_service.go | 26 +-- http/user_test.go | 20 +- http/variable_service.go | 36 ++-- http/variable_test.go | 33 ++-- http/write_handler.go | 22 +-- http/write_handler_test.go | 2 +- inmem/task_test.go | 3 +- inmem/user_test.go | 3 +- kit/prom/example_test.go | 3 +- kit/prom/promtest/promtest_test.go | 7 +- kit/prom/registry.go | 18 +- kit/prom/registry_test.go | 8 +- kv/auth_test.go | 7 +- kv/bucket_test.go | 7 +- kv/check_test.go | 7 +- kv/dashboard.go | 2 +- kv/dashboard_test.go | 7 +- kv/document_test.go | 4 +- kv/kv_test.go | 8 +- kv/kvlog_test.go | 7 +- kv/label_test.go | 7 +- kv/lookup_service_test.go | 7 +- kv/notification_endpoint_test.go | 7 +- kv/notification_rule.go | 2 +- kv/notification_rule_test.go | 7 +- kv/onboarding_test.go | 7 +- kv/org.go | 4 +- kv/org_test.go | 7 +- kv/passwords_test.go | 7 +- kv/scrapers_test.go | 7 +- kv/secret_test.go | 7 +- kv/service.go | 6 +- kv/service_test.go | 5 +- kv/session_test.go | 7 +- kv/source_test.go | 7 +- kv/task.go | 4 +- kv/task_test.go | 17 +- kv/telegraf_test.go | 7 +- kv/urm.go | 2 +- kv/urm_test.go | 7 +- kv/user_test.go | 7 +- kv/variable_test.go | 10 +- mock/auth_service.go | 6 +- mock/bucket_service.go | 10 +- mock/retention_service.go | 7 - nats/handler.go | 4 +- nats/publisher.go | 12 +- pkger/service.go | 21 +-- pkger/service_test.go | 55 +++--- prometheus/auth_service_test.go | 3 +- query/control/controller.go | 10 +- query/logging.go | 37 ++-- query/logging_test.go | 12 +- task/backend/analytical_storage.go | 36 ++-- task/backend/analytical_storage_test.go | 6 +- task/backend/coordinator.go | 8 +- task/backend/coordinator/coordinator.go | 12 +- task/backend/coordinator/coordinator_test.go | 4 +- task/backend/coordinator/task_coordinator.go | 16 +- .../coordinator/task_coordinator_test.go | 9 +- task/backend/coordinator_test.go | 4 +- task/backend/executor/executor.go | 56 +++--- task/backend/executor/executor_test.go | 38 ++-- task/backend/executor/task_executor.go | 26 +-- task/backend/executor/task_executor_test.go | 6 +- task/backend/read_table_test.go | 4 +- task/backend/run_recorder.go | 8 +- task/backend/scheduler.go | 72 ++++---- task/backend/scheduler_test.go | 28 +-- task/mock/scheduler.go | 3 - telemetry/handler.go | 16 +- telemetry/reporter.go | 12 +- telemetry/reporter_test.go | 11 +- telemetry/store.go | 10 +- testing/document.go | 3 +- tsdb/series_partition.go | 2 +- tsdb/tsm1/engine.go | 2 +- tsdb/tsm1/engine_cursor_test.go | 2 +- tsdb/tsm1/engine_delete_prefix_test.go | 2 +- tsdb/tsm1/engine_schema_test.go | 6 +- tsdb/tsm1/engine_test.go | 22 +-- tsdb/tsm1/metrics_test.go | 2 +- tsdb/tsm1/reader_index.go | 4 +- zap/auth_service.go | 14 +- zap/proxy_query_service.go | 13 +- zap/tracer.go | 19 +- 174 files changed, 1331 insertions(+), 1336 deletions(-) diff --git a/authorizer/task.go b/authorizer/task.go index 3051e51085..ea8ad050ab 100644 --- a/authorizer/task.go +++ b/authorizer/task.go @@ -35,15 +35,15 @@ var ( type taskServiceValidator struct { influxdb.TaskService - logger *zap.Logger + log *zap.Logger } // TaskService wraps ts and checks appropriate permissions before calling requested methods on ts. // Authorization failures are logged to the logger. -func NewTaskService(logger *zap.Logger, ts influxdb.TaskService) influxdb.TaskService { +func NewTaskService(log *zap.Logger, ts influxdb.TaskService) influxdb.TaskService { return &taskServiceValidator{ TaskService: ts, - logger: logger, + log: log, } } @@ -79,7 +79,7 @@ func (ts *taskServiceValidator) FindTasks(ctx context.Context, filter influxdb.T // We are getting a list of tasks that may be a superset of what the user is allowed to view. auth, err := platcontext.GetAuthorizer(ctx) if err != nil { - ts.logger.Info("Failed to retrieve authorizer from context", zap.String("method", "FindTasks")) + ts.log.Info("Failed to retrieve authorizer from context", zap.String("method", "FindTasks")) return nil, 0, err } @@ -322,12 +322,12 @@ func (ts *taskServiceValidator) ForceRun(ctx context.Context, taskID influxdb.ID func (ts *taskServiceValidator) validatePermission(ctx context.Context, perm influxdb.Permission, loggerFields ...zap.Field) error { auth, err := platcontext.GetAuthorizer(ctx) if err != nil { - ts.logger.With(loggerFields...).Info("Failed to retrieve authorizer from context") + ts.log.With(loggerFields...).Info("Failed to retrieve authorizer from context") return err } if !auth.Allowed(perm) { - ts.logger.With(loggerFields...).Info("Authorization failed", + ts.log.With(loggerFields...).Info("Authorization failed", zap.String("user_id", auth.GetUserID().String()), zap.String("auth_kind", auth.Kind()), zap.String("auth_id", auth.Identifier().String()), diff --git a/bolt/authorization_test.go b/bolt/authorization_test.go index 3a4878be89..fec9c2cd96 100644 --- a/bolt/authorization_test.go +++ b/bolt/authorization_test.go @@ -10,7 +10,7 @@ import ( ) func initAuthorizationService(f platformtesting.AuthorizationFields, t *testing.T) (platform.AuthorizationService, string, func()) { - c, closeFn, err := NewTestClient() + c, closeFn, err := NewTestClient(t) if err != nil { t.Fatalf("failed to create new bolt client: %v", err) } diff --git a/bolt/bbolt.go b/bolt/bbolt.go index c3e8815b01..d45462cd0f 100644 --- a/bolt/bbolt.go +++ b/bolt/bbolt.go @@ -23,9 +23,9 @@ func getOp(op string) string { // Client is a client for the boltDB data store. type Client struct { - Path string - db *bolt.DB - Logger *zap.Logger + Path string + db *bolt.DB + log *zap.Logger IDGenerator platform.IDGenerator TokenGenerator platform.TokenGenerator @@ -33,9 +33,9 @@ type Client struct { } // NewClient returns an instance of a Client. -func NewClient() *Client { +func NewClient(log *zap.Logger) *Client { return &Client{ - Logger: zap.NewNop(), + log: log, IDGenerator: snowflake.NewIDGenerator(), TokenGenerator: rand.NewTokenGenerator(64), TimeGenerator: platform.RealTimeGenerator{}, @@ -47,12 +47,6 @@ func (c *Client) DB() *bolt.DB { return c.db } -// WithLogger sets the logger an a client. It should not be called after -// the client has been open. -func (c *Client) WithLogger(l *zap.Logger) { - c.Logger = l -} - // Open / create boltDB file. func (c *Client) Open(ctx context.Context) error { // Ensure the required directory structure exists. @@ -75,7 +69,7 @@ func (c *Client) Open(ctx context.Context) error { return err } - c.Logger.Info("Resources opened", zap.String("path", c.Path)) + c.log.Info("Resources opened", zap.String("path", c.Path)) return nil } diff --git a/bolt/bbolt_test.go b/bolt/bbolt_test.go index 2937829b09..d31d74bd40 100644 --- a/bolt/bbolt_test.go +++ b/bolt/bbolt_test.go @@ -9,6 +9,7 @@ import ( "testing" "github.com/influxdata/influxdb/bolt" + "go.uber.org/zap/zaptest" "golang.org/x/crypto/bcrypt" ) @@ -16,8 +17,8 @@ func init() { bolt.HashCost = bcrypt.MinCost } -func NewTestClient() (*bolt.Client, func(), error) { - c, closeFn, err := newTestClient() +func NewTestClient(t *testing.T) (*bolt.Client, func(), error) { + c, closeFn, err := newTestClient(t) if err != nil { return nil, nil, err } @@ -28,8 +29,8 @@ func NewTestClient() (*bolt.Client, func(), error) { return c, closeFn, nil } -func newTestClient() (*bolt.Client, func(), error) { - c := bolt.NewClient() +func newTestClient(t *testing.T) (*bolt.Client, func(), error) { + c := bolt.NewClient(zaptest.NewLogger(t)) f, err := ioutil.TempFile("", "influxdata-platform-bolt-") if err != nil { @@ -61,7 +62,7 @@ func TestClientOpen(t *testing.T) { boltFile := filepath.Join(tempDir, "test", "bolt.db") - c := bolt.NewClient() + c := bolt.NewClient(zaptest.NewLogger(t)) c.Path = boltFile if err := c.Open(context.Background()); err != nil { @@ -73,7 +74,7 @@ func TestClientOpen(t *testing.T) { } } -func NewTestKVStore() (*bolt.KVStore, func(), error) { +func NewTestKVStore(t *testing.T) (*bolt.KVStore, func(), error) { f, err := ioutil.TempFile("", "influxdata-platform-bolt-") if err != nil { return nil, nil, errors.New("unable to open temporary boltdb file") @@ -81,7 +82,7 @@ func NewTestKVStore() (*bolt.KVStore, func(), error) { f.Close() path := f.Name() - s := bolt.NewKVStore(path) + s := bolt.NewKVStore(zaptest.NewLogger(t), path) if err := s.Open(context.TODO()); err != nil { return nil, nil, err } diff --git a/bolt/bucket_test.go b/bolt/bucket_test.go index e3fdc3cbf3..c56137cc68 100644 --- a/bolt/bucket_test.go +++ b/bolt/bucket_test.go @@ -10,7 +10,7 @@ import ( ) func initBucketService(f platformtesting.BucketFields, t *testing.T) (platform.BucketService, string, func()) { - c, closeFn, err := NewTestClient() + c, closeFn, err := NewTestClient(t) if err != nil { t.Fatalf("failed to create new bolt client: %v", err) } diff --git a/bolt/dashboard_test.go b/bolt/dashboard_test.go index a9843f1b99..a9b43c61d7 100644 --- a/bolt/dashboard_test.go +++ b/bolt/dashboard_test.go @@ -10,7 +10,7 @@ import ( ) func initDashboardService(f platformtesting.DashboardFields, t *testing.T) (platform.DashboardService, string, func()) { - c, closeFn, err := NewTestClient() + c, closeFn, err := NewTestClient(t) if err != nil { t.Fatalf("failed to create new bolt client: %v", err) } diff --git a/bolt/id.go b/bolt/id.go index 9fbb27b396..530d6172c0 100644 --- a/bolt/id.go +++ b/bolt/id.go @@ -52,7 +52,7 @@ func (c *Client) ID() platform.ID { }) if err != nil { - c.Logger.Error("unable to load id", zap.Error(err)) + c.log.Error("Unable to load id", zap.Error(err)) } return id diff --git a/bolt/id_test.go b/bolt/id_test.go index 62e9723489..1a8aed9458 100644 --- a/bolt/id_test.go +++ b/bolt/id_test.go @@ -8,7 +8,7 @@ import ( ) func TestID(t *testing.T) { - c, closeFn, err := newTestClient() + c, closeFn, err := newTestClient(t) if err != nil { t.Fatalf("failed to create new bolt client: %v", err) } diff --git a/bolt/keyvalue_log_test.go b/bolt/keyvalue_log_test.go index ab5f1f7816..763aa4363e 100644 --- a/bolt/keyvalue_log_test.go +++ b/bolt/keyvalue_log_test.go @@ -9,7 +9,7 @@ import ( ) func initKeyValueLog(f platformtesting.KeyValueLogFields, t *testing.T) (platform.KeyValueLog, func()) { - c, closeFn, err := NewTestClient() + c, closeFn, err := NewTestClient(t) if err != nil { t.Fatalf("failed to create new bolt client: %v", err) } diff --git a/bolt/kv.go b/bolt/kv.go index ce1c919580..edeb35de59 100644 --- a/bolt/kv.go +++ b/bolt/kv.go @@ -15,17 +15,17 @@ import ( // KVStore is a kv.Store backed by boltdb. type KVStore struct { - path string - db *bolt.DB - logger *zap.Logger + path string + db *bolt.DB + log *zap.Logger } // NewKVStore returns an instance of KVStore with the file at // the provided path. -func NewKVStore(path string) *KVStore { +func NewKVStore(log *zap.Logger, path string) *KVStore { return &KVStore{ - path: path, - logger: zap.NewNop(), + path: path, + log: log, } } @@ -50,7 +50,7 @@ func (s *KVStore) Open(ctx context.Context) error { } s.db = db - s.logger.Info("Resources opened", zap.String("path", s.path)) + s.log.Info("Resources opened", zap.String("path", s.path)) return nil } @@ -89,11 +89,6 @@ func (s *KVStore) cleanBucket(tx *bolt.Tx, b *bolt.Bucket) { } } -// WithLogger sets the logger on the store. -func (s *KVStore) WithLogger(l *zap.Logger) { - s.logger = l -} - // WithDB sets the boltdb on the store. func (s *KVStore) WithDB(db *bolt.DB) { s.db = db diff --git a/bolt/kv_test.go b/bolt/kv_test.go index b3daa9ca23..3ab42c5167 100644 --- a/bolt/kv_test.go +++ b/bolt/kv_test.go @@ -9,7 +9,7 @@ import ( ) func initKVStore(f platformtesting.KVStoreFields, t *testing.T) (kv.Store, func()) { - s, closeFn, err := NewTestKVStore() + s, closeFn, err := NewTestKVStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } diff --git a/bolt/lookup_service_test.go b/bolt/lookup_service_test.go index 13f7235420..fa31b042cd 100644 --- a/bolt/lookup_service_test.go +++ b/bolt/lookup_service_test.go @@ -232,7 +232,7 @@ func TestClient_Name(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - c, done, err := NewTestClient() + c, done, err := NewTestClient(t) if err != nil { t.Fatalf("unable to create bolt test client: %v", err) } diff --git a/bolt/metrics_test.go b/bolt/metrics_test.go index ed18104a5b..4a7885297d 100644 --- a/bolt/metrics_test.go +++ b/bolt/metrics_test.go @@ -7,16 +7,17 @@ import ( platform "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kit/prom" "github.com/influxdata/influxdb/kit/prom/promtest" + "go.uber.org/zap/zaptest" ) func TestInitialMetrics(t *testing.T) { - client, teardown, err := NewTestClient() + client, teardown, err := NewTestClient(t) if err != nil { t.Fatalf("unable to setup bolt client: %v", err) } defer teardown() - reg := prom.NewRegistry() + reg := prom.NewRegistry(zaptest.NewLogger(t)) reg.MustRegister(client) mfs, err := reg.Gather() @@ -41,13 +42,13 @@ func TestInitialMetrics(t *testing.T) { } func TestMetrics_Onboarding(t *testing.T) { - client, teardown, err := NewTestClient() + client, teardown, err := NewTestClient(t) if err != nil { t.Fatalf("unable to setup bolt client: %v", err) } defer teardown() - reg := prom.NewRegistry() + reg := prom.NewRegistry(zaptest.NewLogger(t)) reg.MustRegister(client) ctx := context.Background() diff --git a/bolt/onboarding_test.go b/bolt/onboarding_test.go index e58ad8c03f..b0eaf116b8 100644 --- a/bolt/onboarding_test.go +++ b/bolt/onboarding_test.go @@ -9,7 +9,7 @@ import ( ) func initOnboardingService(f platformtesting.OnboardingFields, t *testing.T) (platform.OnboardingService, func()) { - c, closeFn, err := NewTestClient() + c, closeFn, err := NewTestClient(t) if err != nil { t.Fatalf("failed to create new bolt client: %v", err) } diff --git a/bolt/organization_test.go b/bolt/organization_test.go index 3061f95d7b..6c3de38bcd 100644 --- a/bolt/organization_test.go +++ b/bolt/organization_test.go @@ -10,7 +10,7 @@ import ( ) func initOrganizationService(f platformtesting.OrganizationFields, t *testing.T) (platform.OrganizationService, string, func()) { - c, closeFn, err := NewTestClient() + c, closeFn, err := NewTestClient(t) if err != nil { t.Fatalf("failed to create new bolt client: %v", err) } diff --git a/bolt/passwords_test.go b/bolt/passwords_test.go index 805769ff32..08a1f070ff 100644 --- a/bolt/passwords_test.go +++ b/bolt/passwords_test.go @@ -9,7 +9,7 @@ import ( ) func initPasswordsService(f platformtesting.PasswordFields, t *testing.T) (platform.PasswordsService, func()) { - c, closeFn, err := NewTestClient() + c, closeFn, err := NewTestClient(t) if err != nil { t.Fatalf("failed to create new bolt client: %v", err) } diff --git a/bolt/scraper_test.go b/bolt/scraper_test.go index 7eee2d540d..4b305d94a0 100644 --- a/bolt/scraper_test.go +++ b/bolt/scraper_test.go @@ -10,7 +10,7 @@ import ( ) func initScraperTargetStoreService(f platformtesting.TargetFields, t *testing.T) (platform.ScraperTargetStoreService, string, func()) { - c, closeFn, err := NewTestClient() + c, closeFn, err := NewTestClient(t) if err != nil { t.Fatalf("failed to create new bolt client: %v", err) } diff --git a/bolt/secret_test.go b/bolt/secret_test.go index 9698dc125c..1aa750d914 100644 --- a/bolt/secret_test.go +++ b/bolt/secret_test.go @@ -9,7 +9,7 @@ import ( ) func initSecretService(f platformtesting.SecretServiceFields, t *testing.T) (platform.SecretService, func()) { - c, closeFn, err := NewTestClient() + c, closeFn, err := NewTestClient(t) if err != nil { t.Fatalf("failed to create new bolt client: %v", err) } diff --git a/bolt/session_test.go b/bolt/session_test.go index 1c5899020a..02d036abcb 100644 --- a/bolt/session_test.go +++ b/bolt/session_test.go @@ -10,7 +10,7 @@ import ( ) func initSessionService(f platformtesting.SessionFields, t *testing.T) (platform.SessionService, string, func()) { - c, closeFn, err := NewTestClient() + c, closeFn, err := NewTestClient(t) if err != nil { t.Fatalf("failed to create new bolt client: %v", err) } diff --git a/bolt/source_test.go b/bolt/source_test.go index d7aec233ef..5c491261bb 100644 --- a/bolt/source_test.go +++ b/bolt/source_test.go @@ -10,7 +10,7 @@ import ( ) func initSourceService(f platformtesting.SourceFields, t *testing.T) (platform.SourceService, string, func()) { - c, closeFn, err := NewTestClient() + c, closeFn, err := NewTestClient(t) if err != nil { t.Fatalf("failed to create new bolt client: %v", err) } diff --git a/bolt/telegraf_test.go b/bolt/telegraf_test.go index 733236c58d..fe5621eb4b 100644 --- a/bolt/telegraf_test.go +++ b/bolt/telegraf_test.go @@ -9,7 +9,7 @@ import ( ) func initTelegrafConfigStore(f platformtesting.TelegrafConfigFields, t *testing.T) (platform.TelegrafConfigStore, func()) { - c, closeFn, err := NewTestClient() + c, closeFn, err := NewTestClient(t) if err != nil { t.Fatalf("failed to create new bolt client: %v", err) } diff --git a/bolt/user_resource_mapping_test.go b/bolt/user_resource_mapping_test.go index 2866cb6212..34c5ab9887 100644 --- a/bolt/user_resource_mapping_test.go +++ b/bolt/user_resource_mapping_test.go @@ -9,7 +9,7 @@ import ( ) func initUserResourceMappingService(f platformtesting.UserResourceFields, t *testing.T) (platform.UserResourceMappingService, func()) { - c, closeFn, err := NewTestClient() + c, closeFn, err := NewTestClient(t) if err != nil { t.Fatalf("failed to create new bolt client: %v", err) } diff --git a/bolt/user_test.go b/bolt/user_test.go index 4ef23f9fd4..469f0f6db8 100644 --- a/bolt/user_test.go +++ b/bolt/user_test.go @@ -10,7 +10,7 @@ import ( ) func initUserService(f influxdbtesting.UserFields, t *testing.T) (influxdb.UserService, string, func()) { - svc, closeFn, err := NewTestClient() + svc, closeFn, err := NewTestClient(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } diff --git a/chronograf/oauth2/mux.go b/chronograf/oauth2/mux.go index deffa5338e..d13aa50af1 100644 --- a/chronograf/oauth2/mux.go +++ b/chronograf/oauth2/mux.go @@ -119,43 +119,43 @@ func (j *AuthMux) Callback() http.Handler { } if token.Extra("id_token") != nil && !j.UseIDToken { - log.Info("found an extra id_token, but option --useidtoken is not set") + log.Info("Found an extra id_token, but option --useidtoken is not set") } // if we received an extra id_token, inspect it var id string var group string if j.UseIDToken && token.Extra("id_token") != nil && token.Extra("id_token") != "" { - log.Debug("found an extra id_token") + log.Debug("Found an extra id_token") if provider, ok := j.Provider.(ExtendedProvider); ok { - log.Debug("provider implements PrincipalIDFromClaims()") + log.Debug("Provider implements PrincipalIDFromClaims()") tokenString, ok := token.Extra("id_token").(string) if !ok { - log.Error("cannot cast id_token as string") + log.Error("Cannot cast id_token as string") http.Redirect(w, r, j.FailureURL, http.StatusTemporaryRedirect) return } claims, err := j.Tokens.GetClaims(tokenString) if err != nil { - log.Error("parsing extra id_token failed:", err) + log.Error("Parsing extra id_token failed:", err) http.Redirect(w, r, j.FailureURL, http.StatusTemporaryRedirect) return } - log.Debug("found claims: ", claims) + log.Debug("Found claims: ", claims) id, err = provider.PrincipalIDFromClaims(claims) if err != nil { - log.Error("requested claim not found in id_token:", err) + log.Error("Requested claim not found in id_token:", err) http.Redirect(w, r, j.FailureURL, http.StatusTemporaryRedirect) return } group, err = provider.GroupFromClaims(claims) if err != nil { - log.Error("requested claim not found in id_token:", err) + log.Error("Requested claim not found in id_token:", err) http.Redirect(w, r, j.FailureURL, http.StatusTemporaryRedirect) return } } else { - log.Debug("provider does not implement PrincipalIDFromClaims()") + log.Debug("Provider does not implement PrincipalIDFromClaims()") } } else { // otherwise perform an additional lookup diff --git a/cmd/influx/main.go b/cmd/influx/main.go index c03efc0b7d..a05c906e7c 100644 --- a/cmd/influx/main.go +++ b/cmd/influx/main.go @@ -16,6 +16,7 @@ import ( "github.com/influxdata/influxdb/kv" "github.com/spf13/cobra" "github.com/spf13/viper" + "go.uber.org/zap" ) const maxTCPConnections = 128 @@ -215,10 +216,10 @@ func newLocalKVService() (*kv.Service, error) { return nil, err } - store := bolt.NewKVStore(boltFile) + store := bolt.NewKVStore(zap.NewNop(), boltFile) if err := store.Open(context.Background()); err != nil { return nil, err } - return kv.NewService(store), nil + return kv.NewService(zap.NewNop(), store), nil } diff --git a/cmd/influx/pkg.go b/cmd/influx/pkg.go index 54bc4cf459..85c2b5fef7 100644 --- a/cmd/influx/pkg.go +++ b/cmd/influx/pkg.go @@ -24,6 +24,7 @@ import ( "github.com/olekukonko/tablewriter" "github.com/spf13/cobra" input "github.com/tcnksm/go-input" + "go.uber.org/zap" "gopkg.in/yaml.v3" ) @@ -481,6 +482,7 @@ func createPkgBuf(pkg *pkger.Pkg, outPath string) (*bytes.Buffer, error) { func newPkgerSVC(cliReqOpts httpClientOpts) (pkger.SVC, error) { return pkger.NewService( + zap.NewNop(), pkger.WithBucketSVC(&ihttp.BucketService{ Addr: cliReqOpts.addr, Token: cliReqOpts.token, diff --git a/cmd/influx/pkg_test.go b/cmd/influx/pkg_test.go index d62b42d1eb..e3a342902b 100644 --- a/cmd/influx/pkg_test.go +++ b/cmd/influx/pkg_test.go @@ -17,6 +17,7 @@ import ( "github.com/spf13/cobra" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" ) func Test_Pkg(t *testing.T) { @@ -87,7 +88,7 @@ func Test_Pkg(t *testing.T) { } cmdFn := func() *cobra.Command { - builder := newCmdPkgBuilder(fakeSVCFn(pkger.NewService()), in(new(bytes.Buffer))) + builder := newCmdPkgBuilder(fakeSVCFn(pkger.NewService(zaptest.NewLogger(t))), in(new(bytes.Buffer))) cmd := builder.cmdPkgNew() return cmd } diff --git a/cmd/influx_inspect/buildtsi/buildtsi.go b/cmd/influx_inspect/buildtsi/buildtsi.go index 6074df9dc1..f9000751b8 100644 --- a/cmd/influx_inspect/buildtsi/buildtsi.go +++ b/cmd/influx_inspect/buildtsi/buildtsi.go @@ -24,7 +24,7 @@ func IndexShard(sfile *tsdb.SeriesFile, indexPath, dataDir, walDir string, maxLo // Check if shard already has a TSI index. log.Info("Checking index path", zap.String("path", indexPath)) if _, err := os.Stat(indexPath); !os.IsNotExist(err) { - log.Info("tsi1 index already exists, skipping", zap.String("path", indexPath)) + log.Info("TSI1 index already exists, skipping", zap.String("path", indexPath)) return nil } @@ -129,7 +129,7 @@ func IndexShard(sfile *tsdb.SeriesFile, indexPath, dataDir, walDir string, maxLo } // Attempt to compact the index & wait for all compactions to complete. - log.Info("compacting index") + log.Info("Compacting index") tsiIndex.Compact() tsiIndex.Wait() diff --git a/cmd/influxd/generate/command.go b/cmd/influxd/generate/command.go index e6575f5e3f..4bb639e7f6 100644 --- a/cmd/influxd/generate/command.go +++ b/cmd/influxd/generate/command.go @@ -12,6 +12,7 @@ import ( "github.com/influxdata/influxdb/kv" "github.com/influxdata/influxdb/pkg/data/gen" "github.com/spf13/cobra" + "go.uber.org/zap" ) var Command = &cobra.Command{ @@ -84,12 +85,12 @@ func assignOrgBucket(spec *gen.Spec) error { return err } - store := bolt.NewKVStore(boltFile) + store := bolt.NewKVStore(zap.NewNop(), boltFile) if err = store.Open(context.Background()); err != nil { return err } - s := kv.NewService(store) + s := kv.NewService(zap.NewNop(), store) if err = s.Initialize(context.Background()); err != nil { return err } diff --git a/cmd/influxd/launcher/engine.go b/cmd/influxd/launcher/engine.go index c192ff5e4c..c0bb5679bb 100644 --- a/cmd/influxd/launcher/engine.go +++ b/cmd/influxd/launcher/engine.go @@ -52,7 +52,7 @@ type TemporaryEngine struct { engine *storage.Engine - logger *zap.Logger + log *zap.Logger } // NewTemporaryEngine creates a new engine that places the storage engine files into @@ -61,7 +61,7 @@ func NewTemporaryEngine(c storage.Config, options ...storage.Option) *TemporaryE return &TemporaryEngine{ config: c, options: options, - logger: zap.NewNop(), + log: zap.NewNop(), } } @@ -81,7 +81,7 @@ func (t *TemporaryEngine) Open(ctx context.Context) error { t.path = path t.engine = storage.NewEngine(path, t.config, t.options...) - t.engine.WithLogger(t.logger) + t.engine.WithLogger(t.log) if err := t.engine.Open(ctx); err != nil { _ = os.RemoveAll(path) @@ -126,7 +126,7 @@ func (t *TemporaryEngine) DeleteBucket(ctx context.Context, orgID, bucketID infl // WithLogger sets the logger on the engine. It must be called before Open. func (t *TemporaryEngine) WithLogger(log *zap.Logger) { - t.logger = log.With(zap.String("service", "temporary_engine")) + t.log = log.With(zap.String("service", "temporary_engine")) } // PrometheusCollectors returns all the prometheus collectors associated with @@ -158,10 +158,10 @@ func (t *TemporaryEngine) TagValues(ctx context.Context, orgID, bucketID influxd // Flush will remove the time-series files and re-open the engine. func (t *TemporaryEngine) Flush(ctx context.Context) { if err := t.Close(); err != nil { - t.logger.Fatal("unable to close engine", zap.Error(err)) + t.log.Fatal("unable to close engine", zap.Error(err)) } if err := t.Open(ctx); err != nil { - t.logger.Fatal("unable to open engine", zap.Error(err)) + t.log.Fatal("unable to open engine", zap.Error(err)) } } diff --git a/cmd/influxd/launcher/launcher.go b/cmd/influxd/launcher/launcher.go index 02a1a808ac..ea7cece59d 100644 --- a/cmd/influxd/launcher/launcher.go +++ b/cmd/influxd/launcher/launcher.go @@ -92,9 +92,8 @@ func NewCommand() *cobra.Command { var wg sync.WaitGroup if !l.ReportingDisabled() { - reporter := telemetry.NewReporter(l.Registry()) + reporter := telemetry.NewReporter(l.Log(), l.Registry()) reporter.Interval = 8 * time.Hour - reporter.Logger = l.Logger() wg.Add(1) go func() { defer wg.Done() @@ -314,7 +313,7 @@ type Launcher struct { taskControlService taskbackend.TaskControlService jaegerTracerCloser io.Closer - logger *zap.Logger + log *zap.Logger reg *prom.Registry Stdin io.Reader @@ -348,9 +347,9 @@ func (m *Launcher) Registry() *prom.Registry { return m.reg } -// Logger returns the launchers logger. -func (m *Launcher) Logger() *zap.Logger { - return m.logger +// Log returns the launchers logger. +func (m *Launcher) Log() *zap.Logger { + return m.log } // URL returns the URL to connect to the HTTP server. @@ -373,40 +372,40 @@ func (m *Launcher) Engine() Engine { func (m *Launcher) Shutdown(ctx context.Context) { m.httpServer.Shutdown(ctx) - m.logger.Info("Stopping", zap.String("service", "task")) + m.log.Info("Stopping", zap.String("service", "task")) if m.EnableNewScheduler { m.treeScheduler.Stop() } else { m.scheduler.Stop() } - m.logger.Info("Stopping", zap.String("service", "nats")) + m.log.Info("Stopping", zap.String("service", "nats")) m.natsServer.Close() - m.logger.Info("Stopping", zap.String("service", "bolt")) + m.log.Info("Stopping", zap.String("service", "bolt")) if err := m.boltClient.Close(); err != nil { - m.logger.Info("failed closing bolt", zap.Error(err)) + m.log.Info("Failed closing bolt", zap.Error(err)) } - m.logger.Info("Stopping", zap.String("service", "query")) + m.log.Info("Stopping", zap.String("service", "query")) if err := m.queryController.Shutdown(ctx); err != nil && err != context.Canceled { - m.logger.Info("Failed closing query service", zap.Error(err)) + m.log.Info("Failed closing query service", zap.Error(err)) } - m.logger.Info("Stopping", zap.String("service", "storage-engine")) + m.log.Info("Stopping", zap.String("service", "storage-engine")) if err := m.engine.Close(); err != nil { - m.logger.Error("failed to close engine", zap.Error(err)) + m.log.Error("Failed to close engine", zap.Error(err)) } m.wg.Wait() if m.jaegerTracerCloser != nil { if err := m.jaegerTracerCloser.Close(); err != nil { - m.logger.Warn("failed to closer Jaeger tracer", zap.Error(err)) + m.log.Warn("Failed to closer Jaeger tracer", zap.Error(err)) } } - m.logger.Sync() + m.log.Sync() } // Cancel executes the context cancel on the program. Used for testing. @@ -445,13 +444,13 @@ func (m *Launcher) run(ctx context.Context) (err error) { Format: "auto", Level: lvl, } - m.logger, err = logconf.New(m.Stdout) + m.log, err = logconf.New(m.Stdout) if err != nil { return err } info := platform.GetBuildInfo() - m.logger.Info("Welcome to InfluxDB", + m.log.Info("Welcome to InfluxDB", zap.String("version", info.Version), zap.String("commit", info.Commit), zap.String("build_date", info.Date), @@ -459,34 +458,31 @@ func (m *Launcher) run(ctx context.Context) (err error) { switch m.tracingType { case LogTracing: - m.logger.Info("tracing via zap logging") - tracer := new(pzap.Tracer) - tracer.Logger = m.logger - tracer.IDGenerator = snowflake.NewIDGenerator() + m.log.Info("Tracing via zap logging") + tracer := pzap.NewTracer(m.log, snowflake.NewIDGenerator()) opentracing.SetGlobalTracer(tracer) case JaegerTracing: - m.logger.Info("tracing via Jaeger") + m.log.Info("Tracing via Jaeger") cfg, err := jaegerconfig.FromEnv() if err != nil { - m.logger.Error("failed to get Jaeger client config from environment variables", zap.Error(err)) + m.log.Error("Failed to get Jaeger client config from environment variables", zap.Error(err)) break } tracer, closer, err := cfg.NewTracer() if err != nil { - m.logger.Error("failed to instantiate Jaeger tracer", zap.Error(err)) + m.log.Error("Failed to instantiate Jaeger tracer", zap.Error(err)) break } opentracing.SetGlobalTracer(tracer) m.jaegerTracerCloser = closer } - m.boltClient = bolt.NewClient() + m.boltClient = bolt.NewClient(m.log.With(zap.String("service", "bolt"))) m.boltClient.Path = m.boltPath - m.boltClient.WithLogger(m.logger.With(zap.String("service", "bolt"))) if err := m.boltClient.Open(ctx); err != nil { - m.logger.Error("failed opening bolt", zap.Error(err)) + m.log.Error("Failed opening bolt", zap.Error(err)) return err } @@ -497,36 +493,34 @@ func (m *Launcher) run(ctx context.Context) (err error) { flushers := flushers{} switch m.storeType { case BoltStore: - store := bolt.NewKVStore(m.boltPath) + store := bolt.NewKVStore(m.log.With(zap.String("service", "kvstore-bolt")), m.boltPath) store.WithDB(m.boltClient.DB()) - m.kvService = kv.NewService(store, serviceConfig) + m.kvService = kv.NewService(m.log.With(zap.String("store", "kv")), store, serviceConfig) if m.testing { flushers = append(flushers, store) } case MemoryStore: store := inmem.NewKVStore() - m.kvService = kv.NewService(store, serviceConfig) + m.kvService = kv.NewService(m.log.With(zap.String("store", "kv")), store, serviceConfig) if m.testing { flushers = append(flushers, store) } default: err := fmt.Errorf("unknown store type %s; expected bolt or memory", m.storeType) - m.logger.Error("failed opening bolt", zap.Error(err)) + m.log.Error("Failed opening bolt", zap.Error(err)) return err } - m.kvService.Logger = m.logger.With(zap.String("store", "kv")) if err := m.kvService.Initialize(ctx); err != nil { - m.logger.Error("failed to initialize kv service", zap.Error(err)) + m.log.Error("Failed to initialize kv service", zap.Error(err)) return err } - m.reg = prom.NewRegistry() + m.reg = prom.NewRegistry(m.log.With(zap.String("service", "prom_registry"))) m.reg.MustRegister( prometheus.NewGoCollector(), infprom.NewInfluxCollector(m.boltClient, info), ) - m.reg.WithLogger(m.logger) m.reg.MustRegister(m.boltClient) var ( @@ -561,19 +555,19 @@ func (m *Launcher) run(ctx context.Context) (err error) { // https://www.vaultproject.io/docs/commands/index.html#environment-variables svc, err := vault.NewSecretService(vault.WithConfig(vaultConfig)) if err != nil { - m.logger.Error("failed initializing vault secret service", zap.Error(err)) + m.log.Error("Failed initializing vault secret service", zap.Error(err)) return err } secretSvc = svc default: err := fmt.Errorf("unknown secret service %q, expected \"bolt\" or \"vault\"", m.secretStore) - m.logger.Error("failed setting secret service", zap.Error(err)) + m.log.Error("Failed setting secret service", zap.Error(err)) return err } chronografSvc, err := server.NewServiceV2(ctx, m.boltClient.DB()) if err != nil { - m.logger.Error("failed creating chronograf service", zap.Error(err)) + m.log.Error("Failed creating chronograf service", zap.Error(err)) return err } @@ -585,9 +579,9 @@ func (m *Launcher) run(ctx context.Context) (err error) { } else { m.engine = storage.NewEngine(m.enginePath, m.StorageConfig, storage.WithRetentionEnforcer(bucketSvc)) } - m.engine.WithLogger(m.logger) + m.engine.WithLogger(m.log) if err := m.engine.Open(ctx); err != nil { - m.logger.Error("failed to open engine", zap.Error(err)) + m.log.Error("Failed to open engine", zap.Error(err)) return err } // The Engine's metrics must be registered after it opens. @@ -615,7 +609,7 @@ func (m *Launcher) run(ctx context.Context) (err error) { nil, ) if err != nil { - m.logger.Error("Failed to get query controller dependencies", zap.Error(err)) + m.log.Error("Failed to get query controller dependencies", zap.Error(err)) return err } @@ -623,11 +617,11 @@ func (m *Launcher) run(ctx context.Context) (err error) { ConcurrencyQuota: concurrencyQuota, MemoryBytesQuotaPerQuery: int64(memoryBytesQuotaPerQuery), QueueSize: QueueSize, - Logger: m.logger.With(zap.String("service", "storage-reads")), + Logger: m.log.With(zap.String("service", "storage-reads")), ExecutorDependencies: []flux.Dependency{deps}, }) if err != nil { - m.logger.Error("Failed to create query controller", zap.Error(err)) + m.log.Error("Failed to create query controller", zap.Error(err)) return err } @@ -638,17 +632,17 @@ func (m *Launcher) run(ctx context.Context) (err error) { { // create the task stack: // validation(coordinator(analyticalstore(kv.Service))) - combinedTaskService := taskbackend.NewAnalyticalStorage(m.logger.With(zap.String("service", "task-analytical-store")), m.kvService, m.kvService, m.kvService, pointsWriter, query.QueryServiceBridge{AsyncQueryService: m.queryController}) + combinedTaskService := taskbackend.NewAnalyticalStorage(m.log.With(zap.String("service", "task-analytical-store")), m.kvService, m.kvService, m.kvService, pointsWriter, query.QueryServiceBridge{AsyncQueryService: m.queryController}) if m.EnableNewScheduler { executor, executorMetrics := taskexecutor.NewExecutor( - m.logger.With(zap.String("service", "task-executor")), + m.log.With(zap.String("service", "task-executor")), query.QueryServiceBridge{AsyncQueryService: m.queryController}, authSvc, combinedTaskService, combinedTaskService, ) m.reg.MustRegister(executorMetrics.PrometheusCollectors()...) - schLogger := m.logger.With(zap.String("service", "task-scheduler")) + schLogger := m.log.With(zap.String("service", "task-scheduler")) sch, sm, err := scheduler.NewScheduler( executor, @@ -662,11 +656,11 @@ func (m *Launcher) run(ctx context.Context) (err error) { }), ) if err != nil { - m.logger.Fatal("could not start task scheduler", zap.Error(err)) + m.log.Fatal("could not start task scheduler", zap.Error(err)) } m.treeScheduler = sch m.reg.MustRegister(sm.PrometheusCollectors()...) - coordLogger := m.logger.With(zap.String("service", "task-coordinator")) + coordLogger := m.log.With(zap.String("service", "task-coordinator")) taskCoord := coordinator.NewCoordinator( coordLogger, sch, @@ -684,28 +678,28 @@ func (m *Launcher) run(ctx context.Context) (err error) { return err }, coordLogger); err != nil { - m.logger.Error("failed to resume existing tasks", zap.Error(err)) + m.log.Error("Failed to resume existing tasks", zap.Error(err)) } } else { // define the executor and build analytical storage middleware - executor := taskexecutor.NewAsyncQueryServiceExecutor(m.logger.With(zap.String("service", "task-executor")), m.queryController, authSvc, combinedTaskService) + executor := taskexecutor.NewAsyncQueryServiceExecutor(m.log.With(zap.String("service", "task-executor")), m.queryController, authSvc, combinedTaskService) // create the scheduler - m.scheduler = taskbackend.NewScheduler(combinedTaskService, executor, time.Now().UTC().Unix(), taskbackend.WithTicker(ctx, 100*time.Millisecond), taskbackend.WithLogger(m.logger)) + m.scheduler = taskbackend.NewScheduler(m.log.With(zap.String("svc", "taskd/scheduler")), combinedTaskService, executor, time.Now().UTC().Unix(), taskbackend.WithTicker(ctx, 100*time.Millisecond)) m.scheduler.Start(ctx) m.reg.MustRegister(m.scheduler.PrometheusCollectors()...) - logger := m.logger.With(zap.String("service", "task-coordinator")) + logger := m.log.With(zap.String("service", "task-coordinator")) coordinator := coordinator.New(logger, m.scheduler) // resume existing task claims from task service - if err := taskbackend.NotifyCoordinatorOfExisting(ctx, combinedTaskService, coordinator, logger); err != nil { - logger.Error("failed to resume existing tasks", zap.Error(err)) + if err := taskbackend.NotifyCoordinatorOfExisting(ctx, logger, combinedTaskService, coordinator); err != nil { + logger.Error("Failed to resume existing tasks", zap.Error(err)) } taskSvc = middleware.New(combinedTaskService, coordinator) - taskSvc = authorizer.NewTaskService(m.logger.With(zap.String("service", "task-authz-validator")), taskSvc) + taskSvc = authorizer.NewTaskService(m.log.With(zap.String("service", "task-authz-validator")), taskSvc) m.taskControlService = combinedTaskService } @@ -713,13 +707,13 @@ func (m *Launcher) run(ctx context.Context) (err error) { var checkSvc platform.CheckService { - coordinator := coordinator.New(m.logger, m.scheduler) + coordinator := coordinator.New(m.log, m.scheduler) checkSvc = middleware.NewCheckService(m.kvService, m.kvService, coordinator) } var notificationRuleSvc platform.NotificationRuleStore { - coordinator := coordinator.New(m.logger, m.scheduler) + coordinator := coordinator.New(m.log, m.scheduler) notificationRuleSvc = middleware.NewNotificationRuleStore(m.kvService, m.kvService, coordinator) } @@ -755,44 +749,39 @@ func (m *Launcher) run(ctx context.Context) (err error) { m.natsPort = int(nextPort) if err := m.natsServer.Open(); err != nil { - m.logger.Error("failed to start nats streaming server", zap.Error(err)) + m.log.Error("Failed to start nats streaming server", zap.Error(err)) return err } - publisher := nats.NewAsyncPublisher(fmt.Sprintf("nats-publisher-%d", m.natsPort), m.NatsURL()) + publisher := nats.NewAsyncPublisher(m.log, fmt.Sprintf("nats-publisher-%d", m.natsPort), m.NatsURL()) if err := publisher.Open(); err != nil { - m.logger.Error("failed to connect to streaming server", zap.Error(err)) + m.log.Error("Failed to connect to streaming server", zap.Error(err)) return err } // TODO(jm): this is an example of using a subscriber to consume from the channel. It should be removed. subscriber := nats.NewQueueSubscriber(fmt.Sprintf("nats-subscriber-%d", m.natsPort), m.NatsURL()) if err := subscriber.Open(); err != nil { - m.logger.Error("failed to connect to streaming server", zap.Error(err)) + m.log.Error("Failed to connect to streaming server", zap.Error(err)) return err } - subscriber.Subscribe(gather.MetricsSubject, "metrics", &gather.RecorderHandler{ - Logger: m.logger, - Recorder: gather.PointWriter{ - Writer: pointsWriter, - }, - }) - scraperScheduler, err := gather.NewScheduler(10, m.logger, scraperTargetSvc, publisher, subscriber, 10*time.Second, 30*time.Second) + subscriber.Subscribe(gather.MetricsSubject, "metrics", gather.NewRecorderHandler(m.log, gather.PointWriter{Writer: pointsWriter})) + scraperScheduler, err := gather.NewScheduler(m.log, 10, scraperTargetSvc, publisher, subscriber, 10*time.Second, 30*time.Second) if err != nil { - m.logger.Error("failed to create scraper subscriber", zap.Error(err)) + m.log.Error("Failed to create scraper subscriber", zap.Error(err)) return err } m.wg.Add(1) - go func(logger *zap.Logger) { + go func(log *zap.Logger) { defer m.wg.Done() - logger = logger.With(zap.String("service", "scraper")) + log = log.With(zap.String("service", "scraper")) if err := scraperScheduler.Run(ctx); err != nil { - logger.Error("failed scraper service", zap.Error(err)) + log.Error("Failed scraper service", zap.Error(err)) } - logger.Info("Stopping") - }(m.logger) + log.Info("Stopping") + }(m.log) m.httpServer = &nethttp.Server{ Addr: m.httpBindAddress, @@ -801,7 +790,7 @@ func (m *Launcher) run(ctx context.Context) (err error) { m.apibackend = &http.APIBackend{ AssetsPath: m.assetsPath, HTTPErrorHandler: http.ErrorHandler(0), - Logger: m.logger, + Logger: m.log, SessionRenewDisabled: m.sessionRenewDisabled, NewBucketService: source.NewBucketService, NewQueryService: source.NewQueryService, @@ -847,7 +836,7 @@ func (m *Launcher) run(ctx context.Context) (err error) { { b := m.apibackend pkgSVC = pkger.NewService( - pkger.WithLogger(m.logger.With(zap.String("service", "pkger"))), + m.log.With(zap.String("service", "pkger")), pkger.WithBucketSVC(authorizer.NewBucketService(b.BucketService)), pkger.WithDashboardSVC(authorizer.NewDashboardService(b.DashboardService)), pkger.WithLabelSVC(authorizer.NewLabelService(b.LabelService)), @@ -861,21 +850,20 @@ func (m *Launcher) run(ctx context.Context) (err error) { } // HTTP server - platformHandler := http.NewPlatformHandler(m.apibackend, http.WithResourceHandler(pkgHTTPServer)) - m.reg.MustRegister(platformHandler.PrometheusCollectors()...) - - h := http.NewHandlerFromRegistry("platform", m.reg) - h.Handler = platformHandler - httpLogger := m.logger.With(zap.String("service", "http")) + var platformHandler nethttp.Handler = http.NewPlatformHandler(m.apibackend, http.WithResourceHandler(pkgHTTPServer)) + m.reg.MustRegister(platformHandler.(*http.PlatformHandler).PrometheusCollectors()...) + httpLogger := m.log.With(zap.String("service", "http")) if logconf.Level == zap.DebugLevel { - h.Handler = http.LoggingMW(httpLogger)(h.Handler) + platformHandler = http.LoggingMW(httpLogger)(platformHandler) } - h.Logger = httpLogger - m.httpServer.Handler = h + handler := http.NewHandlerFromRegistry(httpLogger, "platform", m.reg) + handler.Handler = platformHandler + + m.httpServer.Handler = handler // If we are in testing mode we allow all data to be flushed and removed. if m.testing { - m.httpServer.Handler = http.DebugFlush(ctx, h, flushers) + m.httpServer.Handler = http.DebugFlush(ctx, handler, flushers) } ln, err := net.Listen("tcp", m.httpBindAddress) @@ -907,20 +895,20 @@ func (m *Launcher) run(ctx context.Context) (err error) { } m.wg.Add(1) - go func(logger *zap.Logger) { + go func(log *zap.Logger) { defer m.wg.Done() - logger.Info("Listening", zap.String("transport", transport), zap.String("addr", m.httpBindAddress), zap.Int("port", m.httpPort)) + log.Info("Listening", zap.String("transport", transport), zap.String("addr", m.httpBindAddress), zap.Int("port", m.httpPort)) if cer.Certificate != nil { if err := m.httpServer.ServeTLS(ln, m.httpTLSCert, m.httpTLSKey); err != nethttp.ErrServerClosed { - logger.Error("failed https service", zap.Error(err)) + log.Error("Failed https service", zap.Error(err)) } } else { if err := m.httpServer.Serve(ln); err != nethttp.ErrServerClosed { - logger.Error("failed http service", zap.Error(err)) + log.Error("Failed http service", zap.Error(err)) } } - logger.Info("Stopping") + log.Info("Stopping") }(httpLogger) return nil diff --git a/cmd/influxd/launcher/pkger_test.go b/cmd/influxd/launcher/pkger_test.go index 327b89869f..498adfe694 100644 --- a/cmd/influxd/launcher/pkger_test.go +++ b/cmd/influxd/launcher/pkger_test.go @@ -11,6 +11,7 @@ import ( "github.com/influxdata/influxdb/pkger" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" ) func TestLauncher_Pkger(t *testing.T) { @@ -19,6 +20,7 @@ func TestLauncher_Pkger(t *testing.T) { defer l.ShutdownOrFail(t, ctx) svc := pkger.NewService( + zaptest.NewLogger(t), pkger.WithBucketSVC(l.BucketService()), pkger.WithDashboardSVC(l.DashboardService()), pkger.WithLabelSVC(l.LabelService()), @@ -43,6 +45,7 @@ func TestLauncher_Pkger(t *testing.T) { t.Run("errors incurred during application of package rolls back to state before package", func(t *testing.T) { svc := pkger.NewService( + zaptest.NewLogger(t), pkger.WithBucketSVC(l.BucketService()), pkger.WithDashboardSVC(l.DashboardService()), pkger.WithLabelSVC(&fakeLabelSVC{ @@ -312,6 +315,7 @@ func TestLauncher_Pkger(t *testing.T) { require.NoError(t, err) svc := pkger.NewService( + zaptest.NewLogger(t), pkger.WithBucketSVC(&fakeBucketSVC{ BucketService: l.BucketService(), killCount: 0, // kill on first update for bucket diff --git a/cmd/telemetryd/main.go b/cmd/telemetryd/main.go index b7c896f6ab..f4df5a4dd3 100644 --- a/cmd/telemetryd/main.go +++ b/cmd/telemetryd/main.go @@ -14,8 +14,8 @@ import ( ) var ( - logger = influxlogger.New(os.Stdout) - addr string + log = influxlogger.New(os.Stdout) + addr string ) func main() { @@ -36,10 +36,10 @@ func main() { var exitCode int if err := cmd.Execute(); err != nil { exitCode = 1 - logger.Error("Command returned error", zap.Error(err)) + log.Error("Command returned error", zap.Error(err)) } - if err := logger.Sync(); err != nil { + if err := log.Sync(); err != nil { exitCode = 1 fmt.Fprintf(os.Stderr, "Error syncing logs: %v\n", err) } @@ -48,21 +48,19 @@ func main() { } func run() error { - logger := logger.With(zap.String("service", "telemetryd")) - store := &telemetry.LogStore{ - Logger: logger, - } - svc := telemetry.NewPushGateway(logger, store) + log := log.With(zap.String("service", "telemetryd")) + store := telemetry.NewLogStore(log) + svc := telemetry.NewPushGateway(log, store) // Print data as line protocol svc.Encoder = &prometheus.LineProtocol{} handler := http.HandlerFunc(svc.Handler) - logger.Info("starting telemetryd server", zap.String("addr", addr)) + log.Info("Starting telemetryd server", zap.String("addr", addr)) srv := http.Server{ Addr: addr, Handler: handler, - ErrorLog: zap.NewStdLog(logger), + ErrorLog: zap.NewStdLog(log), } return srv.ListenAndServe() } diff --git a/example_test.go b/example_test.go index a156391182..b981172507 100644 --- a/example_test.go +++ b/example_test.go @@ -7,10 +7,11 @@ import ( platform "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/bolt" + "go.uber.org/zap" ) func ExampleKeyValueLog() { - c := bolt.NewClient() + c := bolt.NewClient(zap.NewNop()) c.Path = "example.bolt" ctx := context.Background() if err := c.Open(ctx); err != nil { diff --git a/gather/README.md b/gather/README.md index 9f2f5376cc..5d097746ee 100644 --- a/gather/README.md +++ b/gather/README.md @@ -6,19 +6,19 @@ // NATS streaming server m.natsServer = nats.NewServer(nats.Config{FilestoreDir: m.natsPath}) if err := m.natsServer.Open(); err != nil { - m.logger.Error("failed to start nats streaming server", zap.Error(err)) + m.logger.Error("Failed to start nats streaming server", zap.Error(err)) return err } publisher := nats.NewAsyncPublisher("nats-publisher") if err := publisher.Open(); err != nil { - m.logger.Error("failed to connect to streaming server", zap.Error(err)) + m.logger.Error("Failed to connect to streaming server", zap.Error(err)) return err } subscriber := nats.NewQueueSubscriber("nats-subscriber") if err := subscriber.Open(); err != nil { - m.logger.Error("failed to connect to streaming server", zap.Error(err)) + m.logger.Error("Failed to connect to streaming server", zap.Error(err)) return err } ``` @@ -47,7 +47,7 @@ subscriber.Subscribe(MetricsSubject, "", &RecorderHandler{ ```go scraperScheduler, err := gather.NewScheduler(10, m.logger, scraperTargetSvc, publisher, subscriber, 0, 0) if err != nil { - m.logger.Error("failed to create scraper subscriber", zap.Error(err)) + m.logger.Error("Failed to create scraper subscriber", zap.Error(err)) return err } ``` \ No newline at end of file diff --git a/gather/handler.go b/gather/handler.go index 6f55dcd038..5bac7d460c 100644 --- a/gather/handler.go +++ b/gather/handler.go @@ -14,7 +14,7 @@ import ( type handler struct { Scraper Scraper Publisher nats.Publisher - Logger *zap.Logger + log *zap.Logger } // Process consumes scraper target from scraper target queue, @@ -25,25 +25,25 @@ func (h *handler) Process(s nats.Subscription, m nats.Message) { req := new(influxdb.ScraperTarget) err := json.Unmarshal(m.Data(), req) if err != nil { - h.Logger.Error("unable to unmarshal json", zap.Error(err)) + h.log.Error("Unable to unmarshal json", zap.Error(err)) return } ms, err := h.Scraper.Gather(context.TODO(), *req) if err != nil { - h.Logger.Error("unable to gather", zap.Error(err)) + h.log.Error("Unable to gather", zap.Error(err)) return } // send metrics to recorder queue buf := new(bytes.Buffer) if err := json.NewEncoder(buf).Encode(ms); err != nil { - h.Logger.Error("unable to marshal json", zap.Error(err)) + h.log.Error("Unable to marshal json", zap.Error(err)) return } if err := h.Publisher.Publish(MetricsSubject, buf); err != nil { - h.Logger.Error("unable to publish scraper metrics", zap.Error(err)) + h.log.Error("Unable to publish scraper metrics", zap.Error(err)) return } diff --git a/gather/recorder.go b/gather/recorder.go index 9b09f289f9..f54c6b15b5 100644 --- a/gather/recorder.go +++ b/gather/recorder.go @@ -31,14 +31,21 @@ func (s PointWriter) Record(collected MetricsCollection) error { // Recorder record the metrics of a time based. type Recorder interface { - //Subscriber nats.Subscriber + // Subscriber nats.Subscriber Record(collected MetricsCollection) error } // RecorderHandler implements nats.Handler interface. type RecorderHandler struct { Recorder Recorder - Logger *zap.Logger + log *zap.Logger +} + +func NewRecorderHandler(log *zap.Logger, recorder Recorder) *RecorderHandler { + return &RecorderHandler{ + Recorder: recorder, + log: log, + } } // Process consumes job queue, and use recorder to record. @@ -47,11 +54,11 @@ func (h *RecorderHandler) Process(s nats.Subscription, m nats.Message) { collected := new(MetricsCollection) err := json.Unmarshal(m.Data(), &collected) if err != nil { - h.Logger.Error("recorder handler error", zap.Error(err)) + h.log.Error("Recorder handler error", zap.Error(err)) return } err = h.Recorder.Record(*collected) if err != nil { - h.Logger.Error("recorder handler error", zap.Error(err)) + h.log.Error("Recorder handler error", zap.Error(err)) } } diff --git a/gather/scheduler.go b/gather/scheduler.go index 902aa4d1a5..4ce47df53c 100644 --- a/gather/scheduler.go +++ b/gather/scheduler.go @@ -30,15 +30,15 @@ type Scheduler struct { // Publisher will send the gather requests and gathered metrics to the queue. Publisher nats.Publisher - Logger *zap.Logger + log *zap.Logger gather chan struct{} } // NewScheduler creates a new Scheduler and subscriptions for scraper jobs. func NewScheduler( + log *zap.Logger, numScrapers int, - l *zap.Logger, targets influxdb.ScraperTargetStoreService, p nats.Publisher, s nats.Subscriber, @@ -56,7 +56,7 @@ func NewScheduler( Interval: interval, Timeout: timeout, Publisher: p, - Logger: l, + log: log, gather: make(chan struct{}, 100), } @@ -64,7 +64,7 @@ func NewScheduler( err := s.Subscribe(promTargetSubject, "metrics", &handler{ Scraper: new(prometheusScraper), Publisher: p, - Logger: l, + log: log, }) if err != nil { return nil, err @@ -109,13 +109,13 @@ func (s *Scheduler) doGather(ctx context.Context) { targets, err := s.Targets.ListTargets(ctx, influxdb.ScraperTargetFilter{}) if err != nil { - s.Logger.Error("cannot list targets", zap.Error(err)) + s.log.Error("Cannot list targets", zap.Error(err)) tracing.LogError(span, err) return } for _, target := range targets { if err := requestScrape(target, s.Publisher); err != nil { - s.Logger.Error("json encoding error", zap.Error(err)) + s.log.Error("JSON encoding error", zap.Error(err)) tracing.LogError(span, err) } } diff --git a/gather/scheduler_test.go b/gather/scheduler_test.go index f0eceebed9..1ec209d1c4 100644 --- a/gather/scheduler_test.go +++ b/gather/scheduler_test.go @@ -43,12 +43,11 @@ func TestScheduler(t *testing.T) { } subscriber.Subscribe(MetricsSubject, "", &RecorderHandler{ - Logger: logger, + log: logger, Recorder: storage, }) - scheduler, err := NewScheduler(10, logger, - storage, publisher, subscriber, time.Millisecond, time.Microsecond) + scheduler, err := NewScheduler(logger, 10, storage, publisher, subscriber, time.Millisecond, time.Microsecond) go func() { err = scheduler.run(ctx) diff --git a/http/api_handler.go b/http/api_handler.go index 2639c077a1..3d58421391 100644 --- a/http/api_handler.go +++ b/http/api_handler.go @@ -140,86 +140,86 @@ func NewAPIHandler(b *APIBackend, opts ...APIHandlerOptFn) *APIHandler { internalURM := b.UserResourceMappingService b.UserResourceMappingService = authorizer.NewURMService(b.OrgLookupService, b.UserResourceMappingService) - documentBackend := NewDocumentBackend(b) + documentBackend := NewDocumentBackend(b.Logger.With(zap.String("handler", "document")), b) h.DocumentHandler = NewDocumentHandler(documentBackend) - sessionBackend := newSessionBackend(b) - h.SessionHandler = NewSessionHandler(sessionBackend) + sessionBackend := newSessionBackend(b.Logger.With(zap.String("handler", "session")), b) + h.SessionHandler = NewSessionHandler(b.Logger, sessionBackend) - bucketBackend := NewBucketBackend(b) + bucketBackend := NewBucketBackend(b.Logger.With(zap.String("handler", "bucket")), b) bucketBackend.BucketService = authorizer.NewBucketService(b.BucketService) - h.BucketHandler = NewBucketHandler(bucketBackend) + h.BucketHandler = NewBucketHandler(b.Logger, bucketBackend) - orgBackend := NewOrgBackend(b) + orgBackend := NewOrgBackend(b.Logger.With(zap.String("handler", "org")), b) orgBackend.OrganizationService = authorizer.NewOrgService(b.OrganizationService) - h.OrgHandler = NewOrgHandler(orgBackend) + h.OrgHandler = NewOrgHandler(b.Logger, orgBackend) - userBackend := NewUserBackend(b) + userBackend := NewUserBackend(b.Logger.With(zap.String("handler", "user")), b) userBackend.UserService = authorizer.NewUserService(b.UserService) userBackend.PasswordsService = authorizer.NewPasswordService(b.PasswordsService) - h.UserHandler = NewUserHandler(userBackend) + h.UserHandler = NewUserHandler(b.Logger, userBackend) - dashboardBackend := NewDashboardBackend(b) + dashboardBackend := NewDashboardBackend(b.Logger.With(zap.String("handler", "dashboard")), b) dashboardBackend.DashboardService = authorizer.NewDashboardService(b.DashboardService) - h.DashboardHandler = NewDashboardHandler(dashboardBackend) + h.DashboardHandler = NewDashboardHandler(b.Logger, dashboardBackend) - variableBackend := NewVariableBackend(b) + variableBackend := NewVariableBackend(b.Logger.With(zap.String("handler", "variable")), b) variableBackend.VariableService = authorizer.NewVariableService(b.VariableService) - h.VariableHandler = NewVariableHandler(variableBackend) + h.VariableHandler = NewVariableHandler(b.Logger, variableBackend) - authorizationBackend := NewAuthorizationBackend(b) + authorizationBackend := NewAuthorizationBackend(b.Logger.With(zap.String("handler", "authorization")), b) authorizationBackend.AuthorizationService = authorizer.NewAuthorizationService(b.AuthorizationService) - h.AuthorizationHandler = NewAuthorizationHandler(authorizationBackend) + h.AuthorizationHandler = NewAuthorizationHandler(b.Logger, authorizationBackend) - scraperBackend := NewScraperBackend(b) + scraperBackend := NewScraperBackend(b.Logger.With(zap.String("handler", "scraper")), b) scraperBackend.ScraperStorageService = authorizer.NewScraperTargetStoreService(b.ScraperTargetStoreService, b.UserResourceMappingService, b.OrganizationService) - h.ScraperHandler = NewScraperHandler(scraperBackend) + h.ScraperHandler = NewScraperHandler(b.Logger, scraperBackend) - sourceBackend := NewSourceBackend(b) + sourceBackend := NewSourceBackend(b.Logger.With(zap.String("handler", "source")), b) sourceBackend.SourceService = authorizer.NewSourceService(b.SourceService) sourceBackend.BucketService = authorizer.NewBucketService(b.BucketService) - h.SourceHandler = NewSourceHandler(sourceBackend) + h.SourceHandler = NewSourceHandler(b.Logger, sourceBackend) - setupBackend := NewSetupBackend(b) - h.SetupHandler = NewSetupHandler(setupBackend) + setupBackend := NewSetupBackend(b.Logger.With(zap.String("handler", "setup")), b) + h.SetupHandler = NewSetupHandler(b.Logger, setupBackend) - taskBackend := NewTaskBackend(b) - h.TaskHandler = NewTaskHandler(taskBackend) + taskBackend := NewTaskBackend(b.Logger.With(zap.String("handler", "task")), b) + h.TaskHandler = NewTaskHandler(b.Logger, taskBackend) h.TaskHandler.UserResourceMappingService = internalURM - telegrafBackend := NewTelegrafBackend(b) + telegrafBackend := NewTelegrafBackend(b.Logger.With(zap.String("handler", "telegraf")), b) telegrafBackend.TelegrafService = authorizer.NewTelegrafConfigService(b.TelegrafService, b.UserResourceMappingService) - h.TelegrafHandler = NewTelegrafHandler(telegrafBackend) + h.TelegrafHandler = NewTelegrafHandler(b.Logger, telegrafBackend) - notificationRuleBackend := NewNotificationRuleBackend(b) + notificationRuleBackend := NewNotificationRuleBackend(b.Logger.With(zap.String("handler", "notification_rule")), b) notificationRuleBackend.NotificationRuleStore = authorizer.NewNotificationRuleStore(b.NotificationRuleStore, b.UserResourceMappingService, b.OrganizationService) - h.NotificationRuleHandler = NewNotificationRuleHandler(notificationRuleBackend) + h.NotificationRuleHandler = NewNotificationRuleHandler(b.Logger, notificationRuleBackend) - notificationEndpointBackend := NewNotificationEndpointBackend(b) + notificationEndpointBackend := NewNotificationEndpointBackend(b.Logger.With(zap.String("handler", "notificationEndpoint")), b) notificationEndpointBackend.NotificationEndpointService = authorizer.NewNotificationEndpointService(b.NotificationEndpointService, b.UserResourceMappingService, b.OrganizationService) - h.NotificationEndpointHandler = NewNotificationEndpointHandler(notificationEndpointBackend) + h.NotificationEndpointHandler = NewNotificationEndpointHandler(notificationEndpointBackend.Logger(), notificationEndpointBackend) - checkBackend := NewCheckBackend(b) + checkBackend := NewCheckBackend(b.Logger.With(zap.String("handler", "check")), b) checkBackend.CheckService = authorizer.NewCheckService(b.CheckService, b.UserResourceMappingService, b.OrganizationService) - h.CheckHandler = NewCheckHandler(checkBackend) + h.CheckHandler = NewCheckHandler(b.Logger, checkBackend) - writeBackend := NewWriteBackend(b) - h.WriteHandler = NewWriteHandler(writeBackend) + writeBackend := NewWriteBackend(b.Logger.With(zap.String("handler", "write")), b) + h.WriteHandler = NewWriteHandler(b.Logger, writeBackend) - deleteBackend := NewDeleteBackend(b) - h.DeleteHandler = NewDeleteHandler(deleteBackend) + deleteBackend := NewDeleteBackend(b.Logger.With(zap.String("handler", "delete")), b) + h.DeleteHandler = NewDeleteHandler(b.Logger, deleteBackend) - fluxBackend := NewFluxBackend(b) - h.QueryHandler = NewFluxHandler(fluxBackend) + fluxBackend := NewFluxBackend(b.Logger.With(zap.String("handler", "query")), b) + h.QueryHandler = NewFluxHandler(b.Logger, fluxBackend) h.ChronografHandler = NewChronografHandler(b.ChronografService, b.HTTPErrorHandler) h.SwaggerHandler = newSwaggerLoader(b.Logger.With(zap.String("service", "swagger-loader")), b.HTTPErrorHandler) - h.LabelHandler = NewLabelHandler(authorizer.NewLabelService(b.LabelService), b.HTTPErrorHandler) + h.LabelHandler = NewLabelHandler(b.Logger, authorizer.NewLabelService(b.LabelService), b.HTTPErrorHandler) return h } diff --git a/http/api_handler_test.go b/http/api_handler_test.go index 9f9c7d49e5..7d844b6502 100644 --- a/http/api_handler_test.go +++ b/http/api_handler_test.go @@ -6,7 +6,7 @@ import ( "net/http/httptest" "testing" - "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) func TestAPIHandler_NotFound(t *testing.T) { @@ -51,8 +51,8 @@ func TestAPIHandler_NotFound(t *testing.T) { b := &APIBackend{ HTTPErrorHandler: ErrorHandler(0), + Logger: zaptest.NewLogger(t), } - b.Logger = zap.NewNop() h := NewAPIHandler(b) h.ServeHTTP(w, r) diff --git a/http/auth_service.go b/http/auth_service.go index 50e666e82f..ea746d6031 100644 --- a/http/auth_service.go +++ b/http/auth_service.go @@ -21,7 +21,7 @@ import ( // the AuthorizationHandler. type AuthorizationBackend struct { platform.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger AuthorizationService platform.AuthorizationService OrganizationService platform.OrganizationService @@ -30,10 +30,10 @@ type AuthorizationBackend struct { } // NewAuthorizationBackend returns a new instance of AuthorizationBackend. -func NewAuthorizationBackend(b *APIBackend) *AuthorizationBackend { +func NewAuthorizationBackend(log *zap.Logger, b *APIBackend) *AuthorizationBackend { return &AuthorizationBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "authorization")), + log: log, AuthorizationService: b.AuthorizationService, OrganizationService: b.OrganizationService, @@ -46,7 +46,7 @@ func NewAuthorizationBackend(b *APIBackend) *AuthorizationBackend { type AuthorizationHandler struct { *httprouter.Router platform.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger OrganizationService platform.OrganizationService UserService platform.UserService @@ -55,11 +55,11 @@ type AuthorizationHandler struct { } // NewAuthorizationHandler returns a new instance of AuthorizationHandler. -func NewAuthorizationHandler(b *AuthorizationBackend) *AuthorizationHandler { +func NewAuthorizationHandler(log *zap.Logger, b *AuthorizationBackend) *AuthorizationHandler { h := &AuthorizationHandler{ Router: NewRouter(b.HTTPErrorHandler), HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger, + log: log, AuthorizationService: b.AuthorizationService, OrganizationService: b.OrganizationService, @@ -231,10 +231,10 @@ func (h *AuthorizationHandler) handlePostAuthorization(w http.ResponseWriter, r return } - h.Logger.Debug("auth created ", zap.String("auth", fmt.Sprint(auth))) + h.log.Debug("Auth created ", zap.String("auth", fmt.Sprint(auth))) if err := encodeResponse(ctx, w, http.StatusCreated, newAuthResponse(auth, org, user, perms)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -336,7 +336,7 @@ func (h *AuthorizationHandler) handleGetAuthorizations(w http.ResponseWriter, r ctx := r.Context() req, err := decodeGetAuthorizationsRequest(ctx, r) if err != nil { - h.Logger.Info("failed to decode request", zap.String("handler", "getAuthorizations"), zap.Error(err)) + h.log.Info("Failed to decode request", zap.String("handler", "getAuthorizations"), zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -352,13 +352,13 @@ func (h *AuthorizationHandler) handleGetAuthorizations(w http.ResponseWriter, r for _, a := range as { o, err := h.OrganizationService.FindOrganizationByID(ctx, a.OrgID) if err != nil { - h.Logger.Info("failed to get organization", zap.String("handler", "getAuthorizations"), zap.String("orgID", a.OrgID.String()), zap.Error(err)) + h.log.Info("Failed to get organization", zap.String("handler", "getAuthorizations"), zap.String("orgID", a.OrgID.String()), zap.Error(err)) continue } u, err := h.UserService.FindUserByID(ctx, a.UserID) if err != nil { - h.Logger.Info("failed to get user", zap.String("handler", "getAuthorizations"), zap.String("userID", a.UserID.String()), zap.Error(err)) + h.log.Info("Failed to get user", zap.String("handler", "getAuthorizations"), zap.String("userID", a.UserID.String()), zap.Error(err)) continue } @@ -371,7 +371,7 @@ func (h *AuthorizationHandler) handleGetAuthorizations(w http.ResponseWriter, r auths = append(auths, newAuthResponse(a, o, u, ps)) } - h.Logger.Debug("auths retrieved ", zap.String("auths", fmt.Sprint(auths))) + h.log.Debug("Auths retrieved ", zap.String("auths", fmt.Sprint(auths))) if err := encodeResponse(ctx, w, http.StatusOK, newAuthsResponse(auths)); err != nil { h.HandleHTTPError(ctx, err, w) @@ -433,7 +433,7 @@ func (h *AuthorizationHandler) handleGetAuthorization(w http.ResponseWriter, r * ctx := r.Context() req, err := decodeGetAuthorizationRequest(ctx, r) if err != nil { - h.Logger.Info("failed to decode request", zap.String("handler", "getAuthorization"), zap.Error(err)) + h.log.Info("Failed to decode request", zap.String("handler", "getAuthorization"), zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -463,7 +463,7 @@ func (h *AuthorizationHandler) handleGetAuthorization(w http.ResponseWriter, r * return } - h.Logger.Debug("auth retrieved ", zap.String("auth", fmt.Sprint(a))) + h.log.Debug("Auth retrieved ", zap.String("auth", fmt.Sprint(a))) if err := encodeResponse(ctx, w, http.StatusOK, newAuthResponse(a, o, u, ps)); err != nil { h.HandleHTTPError(ctx, err, w) @@ -500,7 +500,7 @@ func (h *AuthorizationHandler) handleUpdateAuthorization(w http.ResponseWriter, ctx := r.Context() req, err := decodeUpdateAuthorizationRequest(ctx, r) if err != nil { - h.Logger.Info("failed to decode request", zap.String("handler", "updateAuthorization"), zap.Error(err)) + h.log.Info("Failed to decode request", zap.String("handler", "updateAuthorization"), zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -534,7 +534,7 @@ func (h *AuthorizationHandler) handleUpdateAuthorization(w http.ResponseWriter, h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("auth updated", zap.String("auth", fmt.Sprint(a))) + h.log.Debug("Auth updated", zap.String("auth", fmt.Sprint(a))) if err := encodeResponse(ctx, w, http.StatusOK, newAuthResponse(a, o, u, ps)); err != nil { h.HandleHTTPError(ctx, err, w) @@ -578,7 +578,7 @@ func (h *AuthorizationHandler) handleDeleteAuthorization(w http.ResponseWriter, ctx := r.Context() req, err := decodeDeleteAuthorizationRequest(ctx, r) if err != nil { - h.Logger.Info("failed to decode request", zap.String("handler", "deleteAuthorization"), zap.Error(err)) + h.log.Info("Failed to decode request", zap.String("handler", "deleteAuthorization"), zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -589,7 +589,7 @@ func (h *AuthorizationHandler) handleDeleteAuthorization(w http.ResponseWriter, return } - h.Logger.Debug("auth deleted", zap.String("authID", fmt.Sprint(req.ID))) + h.log.Debug("Auth deleted", zap.String("authID", fmt.Sprint(req.ID))) w.WriteHeader(http.StatusNoContent) } diff --git a/http/auth_test.go b/http/auth_test.go index 4fe6bdd8b3..8ffc771ab7 100644 --- a/http/auth_test.go +++ b/http/auth_test.go @@ -10,21 +10,20 @@ import ( "net/http/httptest" "testing" - "go.uber.org/zap" - + "github.com/influxdata/httprouter" platform "github.com/influxdata/influxdb" pcontext "github.com/influxdata/influxdb/context" "github.com/influxdata/influxdb/inmem" "github.com/influxdata/influxdb/kv" "github.com/influxdata/influxdb/mock" platformtesting "github.com/influxdata/influxdb/testing" - "github.com/influxdata/httprouter" + "go.uber.org/zap/zaptest" ) // NewMockAuthorizationBackend returns a AuthorizationBackend with mock services. -func NewMockAuthorizationBackend() *AuthorizationBackend { +func NewMockAuthorizationBackend(t *testing.T) *AuthorizationBackend { return &AuthorizationBackend{ - Logger: zap.NewNop().With(zap.String("handler", "authorization")), + log: zaptest.NewLogger(t), AuthorizationService: mock.NewAuthorizationService(), OrganizationService: mock.NewOrganizationService(), @@ -331,12 +330,12 @@ func TestService_handleGetAuthorizations(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - authorizationBackend := NewMockAuthorizationBackend() + authorizationBackend := NewMockAuthorizationBackend(t) authorizationBackend.HTTPErrorHandler = ErrorHandler(0) authorizationBackend.AuthorizationService = tt.fields.AuthorizationService authorizationBackend.UserService = tt.fields.UserService authorizationBackend.OrganizationService = tt.fields.OrganizationService - h := NewAuthorizationHandler(authorizationBackend) + h := NewAuthorizationHandler(zaptest.NewLogger(t), authorizationBackend) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -516,13 +515,13 @@ func TestService_handleGetAuthorization(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - authorizationBackend := NewMockAuthorizationBackend() + authorizationBackend := NewMockAuthorizationBackend(t) authorizationBackend.HTTPErrorHandler = ErrorHandler(0) authorizationBackend.AuthorizationService = tt.fields.AuthorizationService authorizationBackend.UserService = tt.fields.UserService authorizationBackend.OrganizationService = tt.fields.OrganizationService authorizationBackend.LookupService = tt.fields.LookupService - h := NewAuthorizationHandler(authorizationBackend) + h := NewAuthorizationHandler(zaptest.NewLogger(t), authorizationBackend) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -696,13 +695,13 @@ func TestService_handlePostAuthorization(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - authorizationBackend := NewMockAuthorizationBackend() + authorizationBackend := NewMockAuthorizationBackend(t) authorizationBackend.HTTPErrorHandler = ErrorHandler(0) authorizationBackend.AuthorizationService = tt.fields.AuthorizationService authorizationBackend.UserService = tt.fields.UserService authorizationBackend.OrganizationService = tt.fields.OrganizationService authorizationBackend.LookupService = tt.fields.LookupService - h := NewAuthorizationHandler(authorizationBackend) + h := NewAuthorizationHandler(zaptest.NewLogger(t), authorizationBackend) req, err := newPostAuthorizationRequest(tt.args.authorization) if err != nil { @@ -810,12 +809,12 @@ func TestService_handleDeleteAuthorization(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - authorizationBackend := NewMockAuthorizationBackend() + authorizationBackend := NewMockAuthorizationBackend(t) authorizationBackend.HTTPErrorHandler = ErrorHandler(0) authorizationBackend.AuthorizationService = tt.fields.AuthorizationService authorizationBackend.UserService = tt.fields.UserService authorizationBackend.OrganizationService = tt.fields.OrganizationService - h := NewAuthorizationHandler(authorizationBackend) + h := NewAuthorizationHandler(zaptest.NewLogger(t), authorizationBackend) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -869,7 +868,7 @@ func initAuthorizationService(f platformtesting.AuthorizationFields, t *testing. t.Skip("HTTP authorization service does not required a user id on the authentication struct. We get the user from the session token.") } - svc := kv.NewService(inmem.NewKVStore()) + svc := kv.NewService(zaptest.NewLogger(t), inmem.NewKVStore()) svc.IDGenerator = f.IDGenerator svc.TokenGenerator = f.TokenGenerator svc.TimeGenerator = f.TimeGenerator @@ -904,7 +903,7 @@ func initAuthorizationService(f platformtesting.AuthorizationFields, t *testing. }, } - authorizationBackend := NewMockAuthorizationBackend() + authorizationBackend := NewMockAuthorizationBackend(t) authorizationBackend.HTTPErrorHandler = ErrorHandler(0) authorizationBackend.AuthorizationService = svc authorizationBackend.UserService = mus @@ -921,8 +920,8 @@ func initAuthorizationService(f platformtesting.AuthorizationFields, t *testing. }, } - authZ := NewAuthorizationHandler(authorizationBackend) - authN := NewAuthenticationHandler(ErrorHandler(0)) + authZ := NewAuthorizationHandler(zaptest.NewLogger(t), authorizationBackend) + authN := NewAuthenticationHandler(zaptest.NewLogger(t), ErrorHandler(0)) authN.AuthorizationService = svc authN.Handler = authZ authN.UserService = mus diff --git a/http/authentication_middleware.go b/http/authentication_middleware.go index f916977db2..1088bd7a74 100644 --- a/http/authentication_middleware.go +++ b/http/authentication_middleware.go @@ -17,7 +17,7 @@ import ( // AuthenticationHandler is a middleware for authenticating incoming requests. type AuthenticationHandler struct { platform.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger AuthorizationService platform.AuthorizationService SessionService platform.SessionService @@ -33,9 +33,9 @@ type AuthenticationHandler struct { } // NewAuthenticationHandler creates an authentication handler. -func NewAuthenticationHandler(h platform.HTTPErrorHandler) *AuthenticationHandler { +func NewAuthenticationHandler(log *zap.Logger, h platform.HTTPErrorHandler) *AuthenticationHandler { return &AuthenticationHandler{ - Logger: zap.NewNop(), + log: log, HTTPErrorHandler: h, Handler: http.DefaultServeMux, TokenParser: jsonweb.NewTokenParser(jsonweb.EmptyKeyStore), @@ -71,7 +71,7 @@ func ProbeAuthScheme(r *http.Request) (string, error) { } func (h *AuthenticationHandler) unauthorized(ctx context.Context, w http.ResponseWriter, err error) { - h.Logger.Info("unauthorized", zap.Error(err)) + h.log.Info("Unauthorized", zap.Error(err)) UnauthorizedError(ctx, h, w) } diff --git a/http/authentication_test.go b/http/authentication_test.go index e05e884d39..2c3864b29e 100644 --- a/http/authentication_test.go +++ b/http/authentication_test.go @@ -14,6 +14,7 @@ import ( platformhttp "github.com/influxdata/influxdb/http" "github.com/influxdata/influxdb/jsonweb" "github.com/influxdata/influxdb/mock" + "go.uber.org/zap/zaptest" ) const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJjbG91ZDIuaW5mbHV4ZGF0YS5jb20iLCJhdWQiOiJnYXRld2F5LmluZmx1eGRhdGEuY29tIiwiaWF0IjoxNTY4NjI4OTgwLCJraWQiOiJzb21lLWtleSIsInBlcm1pc3Npb25zIjpbeyJhY3Rpb24iOiJ3cml0ZSIsInJlc291cmNlIjp7InR5cGUiOiJidWNrZXRzIiwiaWQiOiIwMDAwMDAwMDAwMDAwMDAxIiwib3JnSUQiOiIwMDAwMDAwMDAwMDAwMDAyIn19XX0.74vjbExiOd702VSIMmQWaDT_GFvUI0-_P-SfQ_OOHB0" @@ -208,7 +209,7 @@ func TestAuthenticationHandler(t *testing.T) { w.WriteHeader(http.StatusOK) }) - h := platformhttp.NewAuthenticationHandler(platformhttp.ErrorHandler(0)) + h := platformhttp.NewAuthenticationHandler(zaptest.NewLogger(t), platformhttp.ErrorHandler(0)) h.AuthorizationService = tt.fields.AuthorizationService h.SessionService = tt.fields.SessionService h.UserService = &mock.UserService{ @@ -375,7 +376,7 @@ func TestAuthenticationHandler_NoAuthRoutes(t *testing.T) { w.WriteHeader(http.StatusOK) }) - h := platformhttp.NewAuthenticationHandler(platformhttp.ErrorHandler(0)) + h := platformhttp.NewAuthenticationHandler(zaptest.NewLogger(t), platformhttp.ErrorHandler(0)) h.AuthorizationService = mock.NewAuthorizationService() h.SessionService = mock.NewSessionService() h.Handler = handler diff --git a/http/bucket_service.go b/http/bucket_service.go index ee91b78da5..6d1a7aab64 100644 --- a/http/bucket_service.go +++ b/http/bucket_service.go @@ -19,7 +19,7 @@ import ( // BucketBackend is all services and associated parameters required to construct // the BucketHandler. type BucketBackend struct { - Logger *zap.Logger + log *zap.Logger influxdb.HTTPErrorHandler BucketService influxdb.BucketService @@ -31,10 +31,10 @@ type BucketBackend struct { } // NewBucketBackend returns a new instance of BucketBackend. -func NewBucketBackend(b *APIBackend) *BucketBackend { +func NewBucketBackend(log *zap.Logger, b *APIBackend) *BucketBackend { return &BucketBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "bucket")), + log: log, BucketService: b.BucketService, BucketOperationLogService: b.BucketOperationLogService, @@ -49,7 +49,7 @@ func NewBucketBackend(b *APIBackend) *BucketBackend { type BucketHandler struct { *httprouter.Router influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger BucketService influxdb.BucketService BucketOperationLogService influxdb.BucketOperationLogService @@ -72,11 +72,11 @@ const ( ) // NewBucketHandler returns a new instance of BucketHandler. -func NewBucketHandler(b *BucketBackend) *BucketHandler { +func NewBucketHandler(log *zap.Logger, b *BucketBackend) *BucketHandler { h := &BucketHandler{ Router: NewRouter(b.HTTPErrorHandler), HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger, + log: log, BucketService: b.BucketService, BucketOperationLogService: b.BucketOperationLogService, @@ -95,7 +95,7 @@ func NewBucketHandler(b *BucketBackend) *BucketHandler { memberBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: influxdb.BucketsResourceType, UserType: influxdb.Member, UserResourceMappingService: b.UserResourceMappingService, @@ -107,7 +107,7 @@ func NewBucketHandler(b *BucketBackend) *BucketHandler { ownerBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: influxdb.BucketsResourceType, UserType: influxdb.Owner, UserResourceMappingService: b.UserResourceMappingService, @@ -119,7 +119,7 @@ func NewBucketHandler(b *BucketBackend) *BucketHandler { labelBackend := &LabelBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "label")), + log: b.log.With(zap.String("handler", "label")), LabelService: b.LabelService, ResourceType: influxdb.BucketsResourceType, } @@ -331,10 +331,10 @@ func (h *BucketHandler) handlePostBucket(w http.ResponseWriter, r *http.Request) h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("bucket created", zap.String("bucket", fmt.Sprint(bucket))) + h.log.Debug("Bucket created", zap.String("bucket", fmt.Sprint(bucket))) if err := encodeResponse(ctx, w, http.StatusCreated, newBucketResponse(bucket, []*influxdb.Label{})); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -414,10 +414,10 @@ func (h *BucketHandler) handleGetBucket(w http.ResponseWriter, r *http.Request) return } - h.Logger.Debug("bucket retrieved", zap.String("bucket", fmt.Sprint(b))) + h.log.Debug("Bucket retrieved", zap.String("bucket", fmt.Sprint(b))) if err := encodeResponse(ctx, w, http.StatusOK, newBucketResponse(b, labels)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -445,10 +445,10 @@ func (h *BucketHandler) handleGetBucketLog(w http.ResponseWriter, r *http.Reques return } - h.Logger.Debug("bucket log retrived", zap.String("bucket", fmt.Sprint(log))) + h.log.Debug("Bucket log retrived", zap.String("bucket", fmt.Sprint(log))) if err := encodeResponse(ctx, w, http.StatusOK, newBucketLogResponse(req.BucketID, log)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -532,7 +532,7 @@ func (h *BucketHandler) handleDeleteBucket(w http.ResponseWriter, r *http.Reques return } - h.Logger.Debug("bucket deleted", zap.String("bucketID", req.BucketID.String())) + h.log.Debug("Bucket deleted", zap.String("bucketID", req.BucketID.String())) w.WriteHeader(http.StatusNoContent) } @@ -579,10 +579,10 @@ func (h *BucketHandler) handleGetBuckets(w http.ResponseWriter, r *http.Request) h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("buckets retrieved", zap.String("buckets", fmt.Sprint(bs))) + h.log.Debug("Buckets retrieved", zap.String("buckets", fmt.Sprint(bs))) if err := encodeResponse(ctx, w, http.StatusOK, newBucketsResponse(ctx, req.opts, req.filter, bs, h.LabelService)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -650,10 +650,10 @@ func (h *BucketHandler) handlePatchBucket(w http.ResponseWriter, r *http.Request h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("bucket updated", zap.String("bucket", fmt.Sprint(b))) + h.log.Debug("Bucket updated", zap.String("bucket", fmt.Sprint(b))) if err := encodeResponse(ctx, w, http.StatusOK, newBucketResponse(b, labels)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } diff --git a/http/bucket_test.go b/http/bucket_test.go index aa306792c1..a12cb67f5a 100644 --- a/http/bucket_test.go +++ b/http/bucket_test.go @@ -11,19 +11,20 @@ import ( "testing" "time" + "github.com/influxdata/httprouter" platform "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/inmem" "github.com/influxdata/influxdb/kv" "github.com/influxdata/influxdb/mock" platformtesting "github.com/influxdata/influxdb/testing" - "github.com/influxdata/httprouter" "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) // NewMockBucketBackend returns a BucketBackend with mock services. -func NewMockBucketBackend() *BucketBackend { +func NewMockBucketBackend(t *testing.T) *BucketBackend { return &BucketBackend{ - Logger: zap.NewNop().With(zap.String("handler", "bucket")), + log: zaptest.NewLogger(t).With(zap.String("handler", "bucket")), BucketService: mock.NewBucketService(), BucketOperationLogService: mock.NewBucketOperationLogService(), @@ -195,10 +196,10 @@ func TestService_handleGetBuckets(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - bucketBackend := NewMockBucketBackend() + bucketBackend := NewMockBucketBackend(t) bucketBackend.BucketService = tt.fields.BucketService bucketBackend.LabelService = tt.fields.LabelService - h := NewBucketHandler(bucketBackend) + h := NewBucketHandler(zaptest.NewLogger(t), bucketBackend) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -320,10 +321,10 @@ func TestService_handleGetBucket(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - bucketBackend := NewMockBucketBackend() + bucketBackend := NewMockBucketBackend(t) bucketBackend.HTTPErrorHandler = ErrorHandler(0) bucketBackend.BucketService = tt.fields.BucketService - h := NewBucketHandler(bucketBackend) + h := NewBucketHandler(zaptest.NewLogger(t), bucketBackend) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -434,10 +435,10 @@ func TestService_handlePostBucket(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - bucketBackend := NewMockBucketBackend() + bucketBackend := NewMockBucketBackend(t) bucketBackend.BucketService = tt.fields.BucketService bucketBackend.OrganizationService = tt.fields.OrganizationService - h := NewBucketHandler(bucketBackend) + h := NewBucketHandler(zaptest.NewLogger(t), bucketBackend) b, err := json.Marshal(newBucket(tt.args.bucket)) if err != nil { @@ -532,10 +533,10 @@ func TestService_handleDeleteBucket(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - bucketBackend := NewMockBucketBackend() + bucketBackend := NewMockBucketBackend(t) bucketBackend.HTTPErrorHandler = ErrorHandler(0) bucketBackend.BucketService = tt.fields.BucketService - h := NewBucketHandler(bucketBackend) + h := NewBucketHandler(zaptest.NewLogger(t), bucketBackend) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -835,10 +836,10 @@ func TestService_handlePatchBucket(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - bucketBackend := NewMockBucketBackend() + bucketBackend := NewMockBucketBackend(t) bucketBackend.HTTPErrorHandler = ErrorHandler(0) bucketBackend.BucketService = tt.fields.BucketService - h := NewBucketHandler(bucketBackend) + h := NewBucketHandler(zaptest.NewLogger(t), bucketBackend) upd := platform.BucketUpdate{} if tt.args.name != "" { @@ -951,9 +952,9 @@ func TestService_handlePostBucketMember(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - bucketBackend := NewMockBucketBackend() + bucketBackend := NewMockBucketBackend(t) bucketBackend.UserService = tt.fields.UserService - h := NewBucketHandler(bucketBackend) + h := NewBucketHandler(zaptest.NewLogger(t), bucketBackend) b, err := json.Marshal(tt.args.user) if err != nil { @@ -1045,9 +1046,9 @@ func TestService_handlePostBucketOwner(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - bucketBackend := NewMockBucketBackend() + bucketBackend := NewMockBucketBackend(t) bucketBackend.UserService = tt.fields.UserService - h := NewBucketHandler(bucketBackend) + h := NewBucketHandler(zaptest.NewLogger(t), bucketBackend) b, err := json.Marshal(tt.args.user) if err != nil { @@ -1080,7 +1081,7 @@ func TestService_handlePostBucketOwner(t *testing.T) { } func initBucketService(f platformtesting.BucketFields, t *testing.T) (platform.BucketService, string, func()) { - svc := kv.NewService(inmem.NewKVStore()) + svc := kv.NewService(zaptest.NewLogger(t), inmem.NewKVStore()) svc.IDGenerator = f.IDGenerator svc.OrgBucketIDs = f.OrgBucketIDs svc.TimeGenerator = f.TimeGenerator @@ -1104,11 +1105,11 @@ func initBucketService(f platformtesting.BucketFields, t *testing.T) (platform.B } } - bucketBackend := NewMockBucketBackend() + bucketBackend := NewMockBucketBackend(t) bucketBackend.HTTPErrorHandler = ErrorHandler(0) bucketBackend.BucketService = svc bucketBackend.OrganizationService = svc - handler := NewBucketHandler(bucketBackend) + handler := NewBucketHandler(zaptest.NewLogger(t), bucketBackend) server := httptest.NewServer(handler) client := BucketService{ Addr: server.URL, diff --git a/http/check_service.go b/http/check_service.go index 4df31305a5..76a216c860 100644 --- a/http/check_service.go +++ b/http/check_service.go @@ -18,7 +18,7 @@ import ( // the CheckBackendHandler. type CheckBackend struct { influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger TaskService influxdb.TaskService CheckService influxdb.CheckService @@ -29,10 +29,10 @@ type CheckBackend struct { } // NewCheckBackend returns a new instance of CheckBackend. -func NewCheckBackend(b *APIBackend) *CheckBackend { +func NewCheckBackend(log *zap.Logger, b *APIBackend) *CheckBackend { return &CheckBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "check")), + log: log, TaskService: b.TaskService, CheckService: b.CheckService, @@ -47,7 +47,7 @@ func NewCheckBackend(b *APIBackend) *CheckBackend { type CheckHandler struct { *httprouter.Router influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger TaskService influxdb.TaskService CheckService influxdb.CheckService @@ -70,11 +70,11 @@ const ( ) // NewCheckHandler returns a new instance of CheckHandler. -func NewCheckHandler(b *CheckBackend) *CheckHandler { +func NewCheckHandler(log *zap.Logger, b *CheckBackend) *CheckHandler { h := &CheckHandler{ Router: NewRouter(b.HTTPErrorHandler), HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger, + log: log, CheckService: b.CheckService, UserResourceMappingService: b.UserResourceMappingService, @@ -93,7 +93,7 @@ func NewCheckHandler(b *CheckBackend) *CheckHandler { memberBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: influxdb.ChecksResourceType, UserType: influxdb.Member, UserResourceMappingService: b.UserResourceMappingService, @@ -105,7 +105,7 @@ func NewCheckHandler(b *CheckBackend) *CheckHandler { ownerBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: influxdb.ChecksResourceType, UserType: influxdb.Owner, UserResourceMappingService: b.UserResourceMappingService, @@ -117,7 +117,7 @@ func NewCheckHandler(b *CheckBackend) *CheckHandler { labelBackend := &LabelBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "label")), + log: b.log.With(zap.String("handler", "label")), LabelService: b.LabelService, ResourceType: influxdb.TelegrafsResourceType, } @@ -219,7 +219,7 @@ func (h *CheckHandler) newChecksResponse(ctx context.Context, chks []influxdb.Ch labels, _ := labelService.FindResourceLabels(ctx, influxdb.LabelMappingFilter{ResourceID: chk.GetID()}) cr, err := h.newCheckResponse(ctx, chk, labels) if err != nil { - h.Logger.Info("Failed to retrieve task associated with check", zap.String("checkID", chk.GetID().String())) + h.log.Info("Failed to retrieve task associated with check", zap.String("checkID", chk.GetID().String())) continue } @@ -248,7 +248,7 @@ func (h *CheckHandler) handleGetChecks(w http.ResponseWriter, r *http.Request) { ctx := r.Context() filter, opts, err := decodeCheckFilter(ctx, r) if err != nil { - h.Logger.Debug("failed to decode request", zap.Error(err)) + h.log.Debug("Failed to decode request", zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -257,10 +257,10 @@ func (h *CheckHandler) handleGetChecks(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("checks retrieved", zap.String("checks", fmt.Sprint(chks))) + h.log.Debug("Checks retrieved", zap.String("checks", fmt.Sprint(chks))) if err := encodeResponse(ctx, w, http.StatusOK, h.newChecksResponse(ctx, chks, h.LabelService, filter, *opts)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -282,9 +282,9 @@ func (h *CheckHandler) handleGetCheckQuery(w http.ResponseWriter, r *http.Reques h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("check query retrieved", zap.String("check query", flux)) + h.log.Debug("Check query retrieved", zap.String("check query", flux)) if err := encodeResponse(ctx, w, http.StatusOK, newFluxResponse(flux)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -311,7 +311,7 @@ func (h *CheckHandler) handleGetCheck(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("check retrieved", zap.String("check", fmt.Sprint(chk))) + h.log.Debug("Check retrieved", zap.String("check", fmt.Sprint(chk))) labels, err := h.LabelService.FindResourceLabels(ctx, influxdb.LabelMappingFilter{ResourceID: chk.GetID()}) if err != nil { @@ -326,7 +326,7 @@ func (h *CheckHandler) handleGetCheck(w http.ResponseWriter, r *http.Request) { } if err := encodeResponse(ctx, w, http.StatusOK, cr); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -516,7 +516,7 @@ func (h *CheckHandler) handlePostCheck(w http.ResponseWriter, r *http.Request) { ctx := r.Context() chk, err := decodePostCheckRequest(ctx, r) if err != nil { - h.Logger.Debug("failed to decode request", zap.Error(err)) + h.log.Debug("Failed to decode request", zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -531,7 +531,7 @@ func (h *CheckHandler) handlePostCheck(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("check created", zap.String("check", fmt.Sprint(chk))) + h.log.Debug("Check created", zap.String("check", fmt.Sprint(chk))) labels := h.mapNewCheckLabels(ctx, chk.CheckCreate, chk.Labels) @@ -542,7 +542,7 @@ func (h *CheckHandler) handlePostCheck(w http.ResponseWriter, r *http.Request) { } if err := encodeResponse(ctx, w, http.StatusCreated, cr); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -584,7 +584,7 @@ func (h *CheckHandler) handlePutCheck(w http.ResponseWriter, r *http.Request) { ctx := r.Context() chk, err := decodePutCheckRequest(ctx, r) if err != nil { - h.Logger.Debug("failed to decode request", zap.Error(err)) + h.log.Debug("Failed to decode request", zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -600,7 +600,7 @@ func (h *CheckHandler) handlePutCheck(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("check replaced", zap.String("check", fmt.Sprint(c))) + h.log.Debug("Check replaced", zap.String("check", fmt.Sprint(c))) cr, err := h.newCheckResponse(ctx, c, labels) if err != nil { @@ -609,7 +609,7 @@ func (h *CheckHandler) handlePutCheck(w http.ResponseWriter, r *http.Request) { } if err := encodeResponse(ctx, w, http.StatusOK, cr); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -619,7 +619,7 @@ func (h *CheckHandler) handlePatchCheck(w http.ResponseWriter, r *http.Request) ctx := r.Context() req, err := decodePatchCheckRequest(ctx, r) if err != nil { - h.Logger.Debug("failed to decode request", zap.Error(err)) + h.log.Debug("Failed to decode request", zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -635,7 +635,7 @@ func (h *CheckHandler) handlePatchCheck(w http.ResponseWriter, r *http.Request) h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("check patch", zap.String("check", fmt.Sprint(chk))) + h.log.Debug("Check patch", zap.String("check", fmt.Sprint(chk))) cr, err := h.newCheckResponse(ctx, chk, labels) if err != nil { @@ -644,7 +644,7 @@ func (h *CheckHandler) handlePatchCheck(w http.ResponseWriter, r *http.Request) } if err := encodeResponse(ctx, w, http.StatusOK, cr); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -661,7 +661,7 @@ func (h *CheckHandler) handleDeleteCheck(w http.ResponseWriter, r *http.Request) h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("check deleted", zap.String("checkID", fmt.Sprint(i))) + h.log.Debug("Check deleted", zap.String("checkID", fmt.Sprint(i))) w.WriteHeader(http.StatusNoContent) } diff --git a/http/check_test.go b/http/check_test.go index 9968c1887b..18ab81477a 100644 --- a/http/check_test.go +++ b/http/check_test.go @@ -13,19 +13,19 @@ import ( "github.com/influxdata/flux/parser" pcontext "github.com/influxdata/influxdb/context" "github.com/influxdata/influxdb/notification" + "go.uber.org/zap/zaptest" + "github.com/influxdata/httprouter" "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/mock" "github.com/influxdata/influxdb/notification/check" influxTesting "github.com/influxdata/influxdb/testing" - "github.com/influxdata/httprouter" - "go.uber.org/zap" ) // NewMockCheckBackend returns a CheckBackend with mock services. -func NewMockCheckBackend() *CheckBackend { +func NewMockCheckBackend(t *testing.T) *CheckBackend { return &CheckBackend{ - Logger: zap.NewNop().With(zap.String("handler", "check")), + log: zaptest.NewLogger(t), CheckService: mock.NewCheckService(), UserResourceMappingService: mock.NewUserResourceMappingService(), @@ -267,7 +267,7 @@ func TestService_handleGetChecks(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - checkBackend := NewMockCheckBackend() + checkBackend := NewMockCheckBackend(t) checkBackend.CheckService = tt.fields.CheckService checkBackend.LabelService = tt.fields.LabelService checkBackend.TaskService = &mock.TaskService{ @@ -275,7 +275,7 @@ func TestService_handleGetChecks(t *testing.T) { return &influxdb.Task{Status: "active"}, nil }, } - h := NewCheckHandler(checkBackend) + h := NewCheckHandler(zaptest.NewLogger(t), checkBackend) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -420,7 +420,7 @@ func TestService_handleGetCheckQuery(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - checkBackend := NewMockCheckBackend() + checkBackend := NewMockCheckBackend(t) checkBackend.HTTPErrorHandler = ErrorHandler(0) checkBackend.CheckService = tt.fields.CheckService checkBackend.TaskService = &mock.TaskService{ @@ -428,7 +428,7 @@ func TestService_handleGetCheckQuery(t *testing.T) { return &influxdb.Task{}, nil }, } - h := NewCheckHandler(checkBackend) + h := NewCheckHandler(zaptest.NewLogger(t), checkBackend) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -572,7 +572,7 @@ func TestService_handleGetCheck(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - checkBackend := NewMockCheckBackend() + checkBackend := NewMockCheckBackend(t) checkBackend.HTTPErrorHandler = ErrorHandler(0) checkBackend.CheckService = tt.fields.CheckService checkBackend.TaskService = &mock.TaskService{ @@ -580,7 +580,7 @@ func TestService_handleGetCheck(t *testing.T) { return &influxdb.Task{Status: "active"}, nil }, } - h := NewCheckHandler(checkBackend) + h := NewCheckHandler(zaptest.NewLogger(t), checkBackend) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -736,7 +736,7 @@ func TestService_handlePostCheck(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - checkBackend := NewMockCheckBackend() + checkBackend := NewMockCheckBackend(t) checkBackend.CheckService = tt.fields.CheckService checkBackend.OrganizationService = tt.fields.OrganizationService checkBackend.TaskService = &mock.TaskService{ @@ -744,7 +744,7 @@ func TestService_handlePostCheck(t *testing.T) { return &influxdb.Task{Status: "active"}, nil }, } - h := NewCheckHandler(checkBackend) + h := NewCheckHandler(zaptest.NewLogger(t), checkBackend) b, err := json.Marshal(tt.args.check) if err != nil { @@ -839,7 +839,7 @@ func TestService_handleDeleteCheck(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - checkBackend := NewMockCheckBackend() + checkBackend := NewMockCheckBackend(t) checkBackend.HTTPErrorHandler = ErrorHandler(0) checkBackend.CheckService = tt.fields.CheckService checkBackend.TaskService = &mock.TaskService{ @@ -847,7 +847,7 @@ func TestService_handleDeleteCheck(t *testing.T) { return &influxdb.Task{}, nil }, } - h := NewCheckHandler(checkBackend) + h := NewCheckHandler(zaptest.NewLogger(t), checkBackend) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -1002,7 +1002,7 @@ func TestService_handlePatchCheck(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - checkBackend := NewMockCheckBackend() + checkBackend := NewMockCheckBackend(t) checkBackend.HTTPErrorHandler = ErrorHandler(0) checkBackend.CheckService = tt.fields.CheckService checkBackend.TaskService = &mock.TaskService{ @@ -1010,7 +1010,7 @@ func TestService_handlePatchCheck(t *testing.T) { return &influxdb.Task{Status: "active"}, nil }, } - h := NewCheckHandler(checkBackend) + h := NewCheckHandler(zaptest.NewLogger(t), checkBackend) upd := influxdb.CheckUpdate{} if tt.args.name != "" { @@ -1189,7 +1189,7 @@ func TestService_handleUpdateCheck(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - checkBackend := NewMockCheckBackend() + checkBackend := NewMockCheckBackend(t) checkBackend.HTTPErrorHandler = ErrorHandler(0) checkBackend.CheckService = tt.fields.CheckService checkBackend.TaskService = &mock.TaskService{ @@ -1197,7 +1197,7 @@ func TestService_handleUpdateCheck(t *testing.T) { return &influxdb.Task{Status: "active"}, nil }, } - h := NewCheckHandler(checkBackend) + h := NewCheckHandler(zaptest.NewLogger(t), checkBackend) b, err := json.Marshal(tt.args.chk) if err != nil { @@ -1301,14 +1301,14 @@ func TestService_handlePostCheckMember(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - checkBackend := NewMockCheckBackend() + checkBackend := NewMockCheckBackend(t) checkBackend.UserService = tt.fields.UserService checkBackend.TaskService = &mock.TaskService{ FindTaskByIDFn: func(ctx context.Context, id influxdb.ID) (*influxdb.Task, error) { return &influxdb.Task{}, nil }, } - h := NewCheckHandler(checkBackend) + h := NewCheckHandler(zaptest.NewLogger(t), checkBackend) b, err := json.Marshal(tt.args.user) if err != nil { @@ -1400,9 +1400,9 @@ func TestService_handlePostCheckOwner(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - checkBackend := NewMockCheckBackend() + checkBackend := NewMockCheckBackend(t) checkBackend.UserService = tt.fields.UserService - h := NewCheckHandler(checkBackend) + h := NewCheckHandler(zaptest.NewLogger(t), checkBackend) b, err := json.Marshal(tt.args.user) if err != nil { diff --git a/http/chronograf_handler.go b/http/chronograf_handler.go index 6a991a3cb8..d59dfb003c 100644 --- a/http/chronograf_handler.go +++ b/http/chronograf_handler.go @@ -97,7 +97,7 @@ func NewChronografHandler(s *server.Service, he influxdb.HTTPErrorHandler) *Chro allRoutes := &server.AllRoutes{ // TODO(desa): what to do here - //Logger: opts.Logger, + //logger: opts.logger, //CustomLinks: opts.CustomLinks, StatusFeed: "https://www.influxdata.com/feed/json", } diff --git a/http/dashboard_service.go b/http/dashboard_service.go index a82fea06dc..e821b74b21 100644 --- a/http/dashboard_service.go +++ b/http/dashboard_service.go @@ -17,7 +17,7 @@ import ( // the DashboardHandler. type DashboardBackend struct { platform.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger DashboardService platform.DashboardService DashboardOperationLogService platform.DashboardOperationLogService @@ -27,10 +27,10 @@ type DashboardBackend struct { } // NewDashboardBackend creates a backend used by the dashboard handler. -func NewDashboardBackend(b *APIBackend) *DashboardBackend { +func NewDashboardBackend(log *zap.Logger, b *APIBackend) *DashboardBackend { return &DashboardBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "dashboard")), + log: log, DashboardService: b.DashboardService, DashboardOperationLogService: b.DashboardOperationLogService, @@ -45,7 +45,7 @@ type DashboardHandler struct { *httprouter.Router platform.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger DashboardService platform.DashboardService DashboardOperationLogService platform.DashboardOperationLogService @@ -70,11 +70,11 @@ const ( ) // NewDashboardHandler returns a new instance of DashboardHandler. -func NewDashboardHandler(b *DashboardBackend) *DashboardHandler { +func NewDashboardHandler(log *zap.Logger, b *DashboardBackend) *DashboardHandler { h := &DashboardHandler{ Router: NewRouter(b.HTTPErrorHandler), HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger, + log: log, DashboardService: b.DashboardService, DashboardOperationLogService: b.DashboardOperationLogService, @@ -100,7 +100,7 @@ func NewDashboardHandler(b *DashboardBackend) *DashboardHandler { memberBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: platform.DashboardsResourceType, UserType: platform.Member, UserResourceMappingService: b.UserResourceMappingService, @@ -112,7 +112,7 @@ func NewDashboardHandler(b *DashboardBackend) *DashboardHandler { ownerBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: platform.DashboardsResourceType, UserType: platform.Owner, UserResourceMappingService: b.UserResourceMappingService, @@ -124,7 +124,7 @@ func NewDashboardHandler(b *DashboardBackend) *DashboardHandler { labelBackend := &LabelBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "label")), + log: b.log.With(zap.String("handler", "label")), LabelService: b.LabelService, ResourceType: platform.DashboardsResourceType, } @@ -376,10 +376,10 @@ func (h *DashboardHandler) handleGetDashboards(w http.ResponseWriter, r *http.Re return } - h.Logger.Debug("dashboards retrieved", zap.String("dashboards", fmt.Sprint(dashboards))) + h.log.Debug("Dashboards retrieved", zap.String("dashboards", fmt.Sprint(dashboards))) if err := encodeResponse(ctx, w, http.StatusOK, newGetDashboardsResponse(ctx, dashboards, req.filter, req.opts, h.LabelService)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -472,7 +472,7 @@ func (h *DashboardHandler) handlePostDashboard(w http.ResponseWriter, r *http.Re } if err := encodeResponse(ctx, w, http.StatusCreated, newDashboardResponse(pd, []*platform.Label{})); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -597,10 +597,10 @@ func (h *DashboardHandler) handleGetDashboard(w http.ResponseWriter, r *http.Req return } - h.Logger.Debug("dashboard retrieved", zap.String("dashboard", fmt.Sprint(dashboard))) + h.log.Debug("Dashboard retrieved", zap.String("dashboard", fmt.Sprint(dashboard))) if err := encodeResponse(ctx, w, http.StatusOK, newDashboardResponse(dashboard, labels)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -644,10 +644,10 @@ func (h *DashboardHandler) handleGetDashboardLog(w http.ResponseWriter, r *http. return } - h.Logger.Debug("dashboard log retrieved", zap.String("log", fmt.Sprint(log))) + h.log.Debug("Dashboard log retrieved", zap.String("log", fmt.Sprint(log))) if err := encodeResponse(ctx, w, http.StatusOK, newDashboardLogResponse(req.DashboardID, log)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -697,7 +697,7 @@ func (h *DashboardHandler) handleDeleteDashboard(w http.ResponseWriter, r *http. return } - h.Logger.Debug("dashboard deleted", zap.String("dashboardID", req.DashboardID.String())) + h.log.Debug("Dashboard deleted", zap.String("dashboardID", req.DashboardID.String())) w.WriteHeader(http.StatusNoContent) } @@ -746,10 +746,10 @@ func (h *DashboardHandler) handlePatchDashboard(w http.ResponseWriter, r *http.R return } - h.Logger.Debug("dashboard updated", zap.String("dashboard", fmt.Sprint(dashboard))) + h.log.Debug("Dashboard updated", zap.String("dashboard", fmt.Sprint(dashboard))) if err := encodeResponse(ctx, w, http.StatusOK, newDashboardResponse(dashboard, labels)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -884,10 +884,10 @@ func (h *DashboardHandler) handlePostDashboardCell(w http.ResponseWriter, r *htt return } - h.Logger.Debug("dashboard cell created", zap.String("dashboardID", req.dashboardID.String()), zap.String("cell", fmt.Sprint(cell))) + h.log.Debug("Dashboard cell created", zap.String("dashboardID", req.dashboardID.String()), zap.String("cell", fmt.Sprint(cell))) if err := encodeResponse(ctx, w, http.StatusCreated, newDashboardCellResponse(req.dashboardID, cell)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -934,10 +934,10 @@ func (h *DashboardHandler) handlePutDashboardCells(w http.ResponseWriter, r *htt return } - h.Logger.Debug("dashboard cell replaced", zap.String("dashboardID", req.dashboardID.String()), zap.String("cells", fmt.Sprint(req.cells))) + h.log.Debug("Dashboard cell replaced", zap.String("dashboardID", req.dashboardID.String()), zap.String("cells", fmt.Sprint(req.cells))) if err := encodeResponse(ctx, w, http.StatusCreated, newDashboardCellsResponse(req.dashboardID, req.cells)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -1018,10 +1018,10 @@ func (h *DashboardHandler) handleGetDashboardCellView(w http.ResponseWriter, r * return } - h.Logger.Debug("dashboard cell view retrieved", zap.String("dashboardID", req.dashboardID.String()), zap.String("cellID", req.cellID.String()), zap.String("view", fmt.Sprint(view))) + h.log.Debug("Dashboard cell view retrieved", zap.String("dashboardID", req.dashboardID.String()), zap.String("cellID", req.cellID.String()), zap.String("view", fmt.Sprint(view))) if err := encodeResponse(ctx, w, http.StatusOK, newDashboardCellViewResponse(req.dashboardID, req.cellID, view)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -1072,10 +1072,10 @@ func (h *DashboardHandler) handlePatchDashboardCellView(w http.ResponseWriter, r h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("dashboard cell view updated", zap.String("dashboardID", req.dashboardID.String()), zap.String("cellID", req.cellID.String()), zap.String("view", fmt.Sprint(view))) + h.log.Debug("Dashboard cell view updated", zap.String("dashboardID", req.dashboardID.String()), zap.String("cellID", req.cellID.String()), zap.String("view", fmt.Sprint(view))) if err := encodeResponse(ctx, w, http.StatusOK, newDashboardCellViewResponse(req.dashboardID, req.cellID, view)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -1092,7 +1092,7 @@ func (h *DashboardHandler) handleDeleteDashboardCell(w http.ResponseWriter, r *h h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("dashboard cell deleted", zap.String("dashboardID", req.dashboardID.String()), zap.String("cellID", req.cellID.String())) + h.log.Debug("Dashboard cell deleted", zap.String("dashboardID", req.dashboardID.String()), zap.String("cellID", req.cellID.String())) w.WriteHeader(http.StatusNoContent) } @@ -1157,10 +1157,10 @@ func (h *DashboardHandler) handlePatchDashboardCell(w http.ResponseWriter, r *ht return } - h.Logger.Debug("dashboard cell updated", zap.String("dashboardID", req.dashboardID.String()), zap.String("cell", fmt.Sprint(cell))) + h.log.Debug("Dashboard cell updated", zap.String("dashboardID", req.dashboardID.String()), zap.String("cell", fmt.Sprint(cell))) if err := encodeResponse(ctx, w, http.StatusOK, newDashboardCellResponse(req.dashboardID, cell)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } diff --git a/http/dashboard_test.go b/http/dashboard_test.go index 601f3e4f8e..8a2d0d1947 100644 --- a/http/dashboard_test.go +++ b/http/dashboard_test.go @@ -11,8 +11,6 @@ import ( "testing" "time" - "go.uber.org/zap" - "github.com/google/go-cmp/cmp" "github.com/influxdata/httprouter" platform "github.com/influxdata/influxdb" @@ -21,12 +19,13 @@ import ( platformtesting "github.com/influxdata/influxdb/testing" "github.com/yudai/gojsondiff" "github.com/yudai/gojsondiff/formatter" + "go.uber.org/zap/zaptest" ) // NewMockDashboardBackend returns a DashboardBackend with mock services. -func NewMockDashboardBackend() *DashboardBackend { +func NewMockDashboardBackend(t *testing.T) *DashboardBackend { return &DashboardBackend{ - Logger: zap.NewNop().With(zap.String("handler", "dashboard")), + log: zaptest.NewLogger(t), DashboardService: mock.NewDashboardService(), DashboardOperationLogService: mock.NewDashboardOperationLogService(), @@ -331,11 +330,11 @@ func TestService_handleGetDashboards(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - dashboardBackend := NewMockDashboardBackend() + dashboardBackend := NewMockDashboardBackend(t) dashboardBackend.HTTPErrorHandler = ErrorHandler(0) dashboardBackend.LabelService = tt.fields.LabelService dashboardBackend.DashboardService = tt.fields.DashboardService - h := NewDashboardHandler(dashboardBackend) + h := NewDashboardHandler(zaptest.NewLogger(t), dashboardBackend) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -743,10 +742,10 @@ func TestService_handleGetDashboard(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - dashboardBackend := NewMockDashboardBackend() + dashboardBackend := NewMockDashboardBackend(t) dashboardBackend.HTTPErrorHandler = ErrorHandler(0) dashboardBackend.DashboardService = tt.fields.DashboardService - h := NewDashboardHandler(dashboardBackend) + h := NewDashboardHandler(zaptest.NewLogger(t), dashboardBackend) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -1008,10 +1007,10 @@ func TestService_handlePostDashboard(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - dashboardBackend := NewMockDashboardBackend() + dashboardBackend := NewMockDashboardBackend(t) dashboardBackend.HTTPErrorHandler = ErrorHandler(0) dashboardBackend.DashboardService = tt.fields.DashboardService - h := NewDashboardHandler(dashboardBackend) + h := NewDashboardHandler(zaptest.NewLogger(t), dashboardBackend) b, err := json.Marshal(tt.args.dashboard) if err != nil { @@ -1104,10 +1103,10 @@ func TestService_handleDeleteDashboard(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - dashboardBackend := NewMockDashboardBackend() + dashboardBackend := NewMockDashboardBackend(t) dashboardBackend.HTTPErrorHandler = ErrorHandler(0) dashboardBackend.DashboardService = tt.fields.DashboardService - h := NewDashboardHandler(dashboardBackend) + h := NewDashboardHandler(zaptest.NewLogger(t), dashboardBackend) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -1288,10 +1287,10 @@ func TestService_handlePatchDashboard(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - dashboardBackend := NewMockDashboardBackend() + dashboardBackend := NewMockDashboardBackend(t) dashboardBackend.HTTPErrorHandler = ErrorHandler(0) dashboardBackend.DashboardService = tt.fields.DashboardService - h := NewDashboardHandler(dashboardBackend) + h := NewDashboardHandler(zaptest.NewLogger(t), dashboardBackend) upd := platform.DashboardUpdate{} if tt.args.name != "" { @@ -1469,10 +1468,10 @@ func TestService_handlePostDashboardCell(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - dashboardBackend := NewMockDashboardBackend() + dashboardBackend := NewMockDashboardBackend(t) dashboardBackend.HTTPErrorHandler = ErrorHandler(0) dashboardBackend.DashboardService = tt.fields.DashboardService - h := NewDashboardHandler(dashboardBackend) + h := NewDashboardHandler(zaptest.NewLogger(t), dashboardBackend) buf := new(bytes.Buffer) _, _ = buf.WriteString(tt.args.body) r := httptest.NewRequest("POST", "http://any.url", buf) @@ -1553,10 +1552,10 @@ func TestService_handleDeleteDashboardCell(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - dashboardBackend := NewMockDashboardBackend() + dashboardBackend := NewMockDashboardBackend(t) dashboardBackend.HTTPErrorHandler = ErrorHandler(0) dashboardBackend.DashboardService = tt.fields.DashboardService - h := NewDashboardHandler(dashboardBackend) + h := NewDashboardHandler(zaptest.NewLogger(t), dashboardBackend) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -1668,10 +1667,10 @@ func TestService_handlePatchDashboardCell(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - dashboardBackend := NewMockDashboardBackend() + dashboardBackend := NewMockDashboardBackend(t) dashboardBackend.HTTPErrorHandler = ErrorHandler(0) dashboardBackend.DashboardService = tt.fields.DashboardService - h := NewDashboardHandler(dashboardBackend) + h := NewDashboardHandler(zaptest.NewLogger(t), dashboardBackend) upd := platform.CellUpdate{} if tt.args.x != 0 { @@ -1763,10 +1762,10 @@ func initDashboardService(f platformtesting.DashboardFields, t *testing.T) (plat } } - dashboardBackend := NewMockDashboardBackend() + dashboardBackend := NewMockDashboardBackend(t) dashboardBackend.HTTPErrorHandler = ErrorHandler(0) dashboardBackend.DashboardService = svc - h := NewDashboardHandler(dashboardBackend) + h := NewDashboardHandler(zaptest.NewLogger(t), dashboardBackend) server := httptest.NewServer(h) client := DashboardService{ Addr: server.URL, @@ -1848,10 +1847,10 @@ func TestService_handlePostDashboardLabel(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - dashboardBackend := NewMockDashboardBackend() + dashboardBackend := NewMockDashboardBackend(t) dashboardBackend.HTTPErrorHandler = ErrorHandler(0) dashboardBackend.LabelService = tt.fields.LabelService - h := NewDashboardHandler(dashboardBackend) + h := NewDashboardHandler(zaptest.NewLogger(t), dashboardBackend) b, err := json.Marshal(tt.args.labelMapping) if err != nil { diff --git a/http/delete_handler.go b/http/delete_handler.go index 72e959edd8..0c2091ed18 100644 --- a/http/delete_handler.go +++ b/http/delete_handler.go @@ -19,7 +19,7 @@ import ( // DeleteBackend is all services and associated parameters required to construct // the DeleteHandler. type DeleteBackend struct { - Logger *zap.Logger + log *zap.Logger influxdb.HTTPErrorHandler DeleteService influxdb.DeleteService @@ -28,9 +28,9 @@ type DeleteBackend struct { } // NewDeleteBackend returns a new instance of DeleteBackend -func NewDeleteBackend(b *APIBackend) *DeleteBackend { +func NewDeleteBackend(log *zap.Logger, b *APIBackend) *DeleteBackend { return &DeleteBackend{ - Logger: b.Logger.With(zap.String("handler", "delete")), + log: log, HTTPErrorHandler: b.HTTPErrorHandler, DeleteService: b.DeleteService, @@ -44,7 +44,7 @@ type DeleteHandler struct { influxdb.HTTPErrorHandler *httprouter.Router - Logger *zap.Logger + log *zap.Logger DeleteService influxdb.DeleteService BucketService influxdb.BucketService @@ -56,11 +56,11 @@ const ( ) // NewDeleteHandler creates a new handler at /api/v2/delete to recieve delete requests. -func NewDeleteHandler(b *DeleteBackend) *DeleteHandler { +func NewDeleteHandler(log *zap.Logger, b *DeleteBackend) *DeleteHandler { h := &DeleteHandler{ HTTPErrorHandler: b.HTTPErrorHandler, Router: NewRouter(b.HTTPErrorHandler), - Logger: b.Logger, + log: log, BucketService: b.BucketService, DeleteService: b.DeleteService, @@ -126,7 +126,7 @@ func (h *DeleteHandler) handleDelete(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("deleted", + h.log.Debug("Deleted", zap.String("orgID", fmt.Sprint(dr.Org.ID.String())), zap.String("buketID", fmt.Sprint(dr.Bucket.ID.String())), ) diff --git a/http/delete_test.go b/http/delete_test.go index fde4229e5c..8bf2017267 100644 --- a/http/delete_test.go +++ b/http/delete_test.go @@ -12,13 +12,13 @@ import ( pcontext "github.com/influxdata/influxdb/context" "github.com/influxdata/influxdb/mock" influxtesting "github.com/influxdata/influxdb/testing" - "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) // NewMockDeleteBackend returns a DeleteBackend with mock services. -func NewMockDeleteBackend() *DeleteBackend { +func NewMockDeleteBackend(t *testing.T) *DeleteBackend { return &DeleteBackend{ - Logger: zap.NewNop().With(zap.String("handler", "delete")), + log: zaptest.NewLogger(t), DeleteService: mock.NewDeleteService(), BucketService: mock.NewBucketService(), @@ -337,12 +337,12 @@ func TestDelete(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - deleteBackend := NewMockDeleteBackend() + deleteBackend := NewMockDeleteBackend(t) deleteBackend.HTTPErrorHandler = ErrorHandler(0) deleteBackend.DeleteService = tt.fields.DeleteService deleteBackend.OrganizationService = tt.fields.OrganizationService deleteBackend.BucketService = tt.fields.BucketService - h := NewDeleteHandler(deleteBackend) + h := NewDeleteHandler(zaptest.NewLogger(t), deleteBackend) r := httptest.NewRequest("POST", "http://any.tld", bytes.NewReader(tt.args.body)) diff --git a/http/document_service.go b/http/document_service.go index 488be21e7d..163a4470c5 100644 --- a/http/document_service.go +++ b/http/document_service.go @@ -15,7 +15,7 @@ import ( // DocumentBackend is all services and associated parameters required to construct // the DocumentHandler. type DocumentBackend struct { - Logger *zap.Logger + log *zap.Logger influxdb.HTTPErrorHandler DocumentService influxdb.DocumentService @@ -23,10 +23,10 @@ type DocumentBackend struct { } // NewDocumentBackend returns a new instance of DocumentBackend. -func NewDocumentBackend(b *APIBackend) *DocumentBackend { +func NewDocumentBackend(log *zap.Logger, b *APIBackend) *DocumentBackend { return &DocumentBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "document")), + log: log, DocumentService: b.DocumentService, LabelService: b.LabelService, } @@ -36,7 +36,7 @@ func NewDocumentBackend(b *APIBackend) *DocumentBackend { type DocumentHandler struct { *httprouter.Router - Logger *zap.Logger + log *zap.Logger influxdb.HTTPErrorHandler DocumentService influxdb.DocumentService @@ -56,7 +56,7 @@ func NewDocumentHandler(b *DocumentBackend) *DocumentHandler { h := &DocumentHandler{ Router: NewRouter(b.HTTPErrorHandler), HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger, + log: b.log, DocumentService: b.DocumentService, LabelService: b.LabelService, @@ -143,10 +143,10 @@ func (h *DocumentHandler) handlePostDocument(w http.ResponseWriter, r *http.Requ return } - h.Logger.Debug("document created", zap.String("document", fmt.Sprint(req.Document))) + h.log.Debug("Document created", zap.String("document", fmt.Sprint(req.Document))) if err := encodeResponse(ctx, w, http.StatusCreated, newDocumentResponse(req.Namespace, req.Document)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -229,10 +229,10 @@ func (h *DocumentHandler) handleGetDocuments(w http.ResponseWriter, r *http.Requ h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("documents retrieved", zap.String("documents", fmt.Sprint(ds))) + h.log.Debug("Documents retrieved", zap.String("documents", fmt.Sprint(ds))) if err := encodeResponse(ctx, w, http.StatusOK, newDocumentsResponse(req.Namespace, ds)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -301,10 +301,10 @@ func (h *DocumentHandler) handlePostDocumentLabel(w http.ResponseWriter, r *http h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("document label created", zap.String("label", fmt.Sprint(label))) + h.log.Debug("Document label created", zap.String("label", fmt.Sprint(label))) if err := encodeResponse(ctx, w, http.StatusCreated, newLabelResponse(label)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -341,7 +341,7 @@ func (h *DocumentHandler) handleDeleteDocumentLabel(w http.ResponseWriter, r *ht h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("document label deleted", zap.String("mapping", fmt.Sprint(mapping))) + h.log.Debug("Document label deleted", zap.String("mapping", fmt.Sprint(mapping))) w.WriteHeader(http.StatusNoContent) } @@ -353,10 +353,10 @@ func (h *DocumentHandler) handleGetDocumentLabel(w http.ResponseWriter, r *http. h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("document label retrieved", zap.String("labels", fmt.Sprint(d.Labels))) + h.log.Debug("Document label retrieved", zap.String("labels", fmt.Sprint(d.Labels))) if err := encodeResponse(ctx, w, http.StatusOK, newLabelsResponse(d.Labels)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -399,10 +399,10 @@ func (h *DocumentHandler) handleGetDocument(w http.ResponseWriter, r *http.Reque h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("document retrieved", zap.String("document", fmt.Sprint(d))) + h.log.Debug("Document retrieved", zap.String("document", fmt.Sprint(d))) if err := encodeResponse(ctx, w, http.StatusOK, newDocumentResponse(namspace, d)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -470,7 +470,7 @@ func (h *DocumentHandler) handleDeleteDocument(w http.ResponseWriter, r *http.Re return } - h.Logger.Debug("document deleted", zap.String("documentID", fmt.Sprint(req.ID))) + h.log.Debug("Document deleted", zap.String("documentID", fmt.Sprint(req.ID))) w.WriteHeader(http.StatusNoContent) } @@ -555,10 +555,10 @@ func (h *DocumentHandler) handlePutDocument(w http.ResponseWriter, r *http.Reque d := ds[0] - h.Logger.Debug("document updated", zap.String("document", fmt.Sprint(d))) + h.log.Debug("Document updated", zap.String("document", fmt.Sprint(d))) if err := encodeResponse(ctx, w, http.StatusOK, newDocumentResponse(req.Namespace, d)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } diff --git a/http/document_test.go b/http/document_test.go index 75076f5904..0082523d77 100644 --- a/http/document_test.go +++ b/http/document_test.go @@ -10,12 +10,12 @@ import ( "testing" "time" + "github.com/influxdata/httprouter" "github.com/influxdata/influxdb" pcontext "github.com/influxdata/influxdb/context" "github.com/influxdata/influxdb/mock" influxtesting "github.com/influxdata/influxdb/testing" - "github.com/influxdata/httprouter" - "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) var ( @@ -180,9 +180,9 @@ var ( ) // NewMockDocumentBackend returns a DocumentBackend with mock services. -func NewMockDocumentBackend() *DocumentBackend { +func NewMockDocumentBackend(t *testing.T) *DocumentBackend { return &DocumentBackend{ - Logger: zap.NewNop().With(zap.String("handler", "document")), + log: zaptest.NewLogger(t), DocumentService: mock.NewDocumentService(), LabelService: mock.NewLabelService(), @@ -290,7 +290,7 @@ func TestService_handleDeleteDocumentLabel(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - documentBackend := NewMockDocumentBackend() + documentBackend := NewMockDocumentBackend(t) documentBackend.HTTPErrorHandler = ErrorHandler(0) documentBackend.DocumentService = tt.fields.DocumentService documentBackend.LabelService = tt.fields.LabelService @@ -476,7 +476,7 @@ func TestService_handlePostDocumentLabel(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - documentBackend := NewMockDocumentBackend() + documentBackend := NewMockDocumentBackend(t) documentBackend.HTTPErrorHandler = ErrorHandler(0) documentBackend.DocumentService = tt.fields.DocumentService documentBackend.LabelService = tt.fields.LabelService @@ -581,7 +581,7 @@ func TestService_handleGetDocumentLabels(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - documentBackend := NewMockDocumentBackend() + documentBackend := NewMockDocumentBackend(t) documentBackend.HTTPErrorHandler = ErrorHandler(0) documentBackend.DocumentService = tt.fields.DocumentService documentBackend.LabelService = tt.fields.LabelService @@ -705,7 +705,7 @@ func TestService_handleGetDocuments(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - documentBackend := NewMockDocumentBackend() + documentBackend := NewMockDocumentBackend(t) documentBackend.HTTPErrorHandler = ErrorHandler(0) documentBackend.DocumentService = tt.fields.DocumentService h := NewDocumentHandler(documentBackend) @@ -905,7 +905,7 @@ func TestService_handlePostDocuments(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - documentBackend := NewMockDocumentBackend() + documentBackend := NewMockDocumentBackend(t) documentBackend.HTTPErrorHandler = ErrorHandler(0) documentBackend.DocumentService = tt.fields.DocumentService documentBackend.LabelService = tt.fields.LabelService diff --git a/http/handler.go b/http/handler.go index 302d5010ab..e37d2c35e4 100644 --- a/http/handler.go +++ b/http/handler.go @@ -45,8 +45,8 @@ type Handler struct { requests *prometheus.CounterVec requestDur *prometheus.HistogramVec - // Logger if set will log all HTTP requests as they are served - Logger *zap.Logger + // log logs all HTTP requests as they are served + log *zap.Logger } // NewHandler creates a new handler with the given name. @@ -68,13 +68,14 @@ func NewHandler(name string) *Handler { // NewHandlerFromRegistry creates a new handler with the given name, // and sets the /metrics endpoint to use the metrics from the given registry, // after self-registering h's metrics. -func NewHandlerFromRegistry(name string, reg *prom.Registry) *Handler { +func NewHandlerFromRegistry(log *zap.Logger, name string, reg *prom.Registry) *Handler { h := &Handler{ name: name, MetricsHandler: reg.HTTPHandler(), ReadyHandler: http.HandlerFunc(ReadyHandler), HealthHandler: http.HandlerFunc(HealthHandler), DebugHandler: http.DefaultServeMux, + log: log, } h.initMetrics() reg.MustRegister(h.PrometheusCollectors()...) @@ -169,11 +170,11 @@ func (h *Handler) initMetrics() { }, []string{"handler", "method", "path", "status", "user_agent"}) } -func logEncodingError(logger *zap.Logger, r *http.Request, err error) { +func logEncodingError(log *zap.Logger, r *http.Request, err error) { // If we encounter an error while encoding the response to an http request // the best thing we can do is log that error, as we may have already written // the headers for the http request in question. - logger.Info("error encoding response", + log.Info("Error encoding response", zap.String("path", r.URL.Path), zap.String("method", r.Method), zap.Error(err)) diff --git a/http/handler_test.go b/http/handler_test.go index 29d684a035..78bd125968 100644 --- a/http/handler_test.go +++ b/http/handler_test.go @@ -9,13 +9,14 @@ import ( "github.com/influxdata/influxdb/kit/prom" "github.com/influxdata/influxdb/kit/prom/promtest" "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) func TestHandler_ServeHTTP(t *testing.T) { type fields struct { name string - Handler http.Handler - Logger *zap.Logger + handler http.Handler + log *zap.Logger } type args struct { w *httptest.ResponseRecorder @@ -30,8 +31,8 @@ func TestHandler_ServeHTTP(t *testing.T) { name: "should record metrics when http handling", fields: fields{ name: "test", - Handler: http.HandlerFunc(func(http.ResponseWriter, *http.Request) {}), - Logger: zap.NewNop(), + handler: http.HandlerFunc(func(http.ResponseWriter, *http.Request) {}), + log: zaptest.NewLogger(t), }, args: args{ r: httptest.NewRequest(http.MethodGet, "/", nil), @@ -43,11 +44,11 @@ func TestHandler_ServeHTTP(t *testing.T) { t.Run(tt.name, func(t *testing.T) { h := &Handler{ name: tt.fields.name, - Handler: tt.fields.Handler, - Logger: tt.fields.Logger, + Handler: tt.fields.handler, + log: tt.fields.log, } h.initMetrics() - reg := prom.NewRegistry() + reg := prom.NewRegistry(zaptest.NewLogger(t)) reg.MustRegister(h.PrometheusCollectors()...) tt.args.r.Header.Set("User-Agent", "ua1") diff --git a/http/label_service.go b/http/label_service.go index 292b4aa96f..60828d60b3 100644 --- a/http/label_service.go +++ b/http/label_service.go @@ -19,7 +19,7 @@ import ( type LabelHandler struct { *httprouter.Router influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger LabelService influxdb.LabelService } @@ -30,11 +30,11 @@ const ( ) // NewLabelHandler returns a new instance of LabelHandler -func NewLabelHandler(s influxdb.LabelService, he influxdb.HTTPErrorHandler) *LabelHandler { +func NewLabelHandler(log *zap.Logger, s influxdb.LabelService, he influxdb.HTTPErrorHandler) *LabelHandler { h := &LabelHandler{ Router: NewRouter(he), HTTPErrorHandler: he, - Logger: zap.NewNop(), + log: log, LabelService: s, } @@ -61,9 +61,9 @@ func (h *LabelHandler) handlePostLabel(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("label created", zap.String("label", fmt.Sprint(req.Label))) + h.log.Debug("Label created", zap.String("label", fmt.Sprint(req.Label))) if err := encodeResponse(ctx, w, http.StatusCreated, newLabelResponse(req.Label)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -120,7 +120,7 @@ func (h *LabelHandler) handleGetLabels(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("labels retrived", zap.String("labels", fmt.Sprint(labels))) + h.log.Debug("Labels retrived", zap.String("labels", fmt.Sprint(labels))) err = encodeResponse(ctx, w, http.StatusOK, newLabelsResponse(labels)) if err != nil { h.HandleHTTPError(ctx, err, w) @@ -164,9 +164,9 @@ func (h *LabelHandler) handleGetLabel(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("label retrieved", zap.String("label", fmt.Sprint(l))) + h.log.Debug("Label retrieved", zap.String("label", fmt.Sprint(l))) if err := encodeResponse(ctx, w, http.StatusOK, newLabelResponse(l)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -209,7 +209,7 @@ func (h *LabelHandler) handleDeleteLabel(w http.ResponseWriter, r *http.Request) h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("label deleted", zap.String("labelID", fmt.Sprint(req.LabelID))) + h.log.Debug("Label deleted", zap.String("labelID", fmt.Sprint(req.LabelID))) w.WriteHeader(http.StatusNoContent) } @@ -252,9 +252,9 @@ func (h *LabelHandler) handlePatchLabel(w http.ResponseWriter, r *http.Request) h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("label updated", zap.String("label", fmt.Sprint(l))) + h.log.Debug("Label updated", zap.String("label", fmt.Sprint(l))) if err := encodeResponse(ctx, w, http.StatusOK, newLabelResponse(l)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -330,7 +330,7 @@ func newLabelsResponse(ls []*influxdb.Label) *labelsResponse { // LabelBackend is all services and associated parameters required to construct // label handlers. type LabelBackend struct { - Logger *zap.Logger + log *zap.Logger influxdb.HTTPErrorHandler LabelService influxdb.LabelService ResourceType influxdb.ResourceType @@ -354,7 +354,7 @@ func newGetLabelsHandler(b *LabelBackend) http.HandlerFunc { } if err := encodeResponse(ctx, w, http.StatusOK, newLabelsResponse(labels)); err != nil { - logEncodingError(b.Logger, r, err) + logEncodingError(b.log, r, err) return } } @@ -414,7 +414,7 @@ func newPostLabelHandler(b *LabelBackend) http.HandlerFunc { } if err := encodeResponse(ctx, w, http.StatusCreated, newLabelResponse(label)); err != nil { - logEncodingError(b.Logger, r, err) + logEncodingError(b.log, r, err) return } } diff --git a/http/label_test.go b/http/label_test.go index e2b8c652e3..73d4a8faf2 100644 --- a/http/label_test.go +++ b/http/label_test.go @@ -6,14 +6,15 @@ import ( "encoding/json" "fmt" "io/ioutil" - http "net/http" + "net/http" "net/http/httptest" "testing" + "github.com/influxdata/httprouter" platform "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/mock" platformtesting "github.com/influxdata/influxdb/testing" - "github.com/influxdata/httprouter" + "go.uber.org/zap/zaptest" ) func TestService_handleGetLabels(t *testing.T) { @@ -108,7 +109,7 @@ func TestService_handleGetLabels(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - h := NewLabelHandler(tt.fields.LabelService, ErrorHandler(0)) + h := NewLabelHandler(zaptest.NewLogger(t), tt.fields.LabelService, ErrorHandler(0)) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -216,7 +217,7 @@ func TestService_handleGetLabel(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - h := NewLabelHandler(tt.fields.LabelService, ErrorHandler(0)) + h := NewLabelHandler(zaptest.NewLogger(t), tt.fields.LabelService, ErrorHandler(0)) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -311,7 +312,7 @@ func TestService_handlePostLabel(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - h := NewLabelHandler(tt.fields.LabelService, ErrorHandler(0)) + h := NewLabelHandler(zaptest.NewLogger(t), tt.fields.LabelService, ErrorHandler(0)) l, err := json.Marshal(tt.args.label) if err != nil { @@ -402,7 +403,7 @@ func TestService_handleDeleteLabel(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - h := NewLabelHandler(tt.fields.LabelService, ErrorHandler(0)) + h := NewLabelHandler(zaptest.NewLogger(t), tt.fields.LabelService, ErrorHandler(0)) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -541,7 +542,7 @@ func TestService_handlePatchLabel(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - h := NewLabelHandler(tt.fields.LabelService, ErrorHandler(0)) + h := NewLabelHandler(zaptest.NewLogger(t), tt.fields.LabelService, ErrorHandler(0)) upd := platform.LabelUpdate{} if len(tt.args.properties) > 0 { diff --git a/http/middleware.go b/http/middleware.go index 79a3a4c1f2..61e957175b 100644 --- a/http/middleware.go +++ b/http/middleware.go @@ -16,7 +16,7 @@ import ( type Middleware func(http.Handler) http.Handler // LoggingMW middleware for logging inflight http requests. -func LoggingMW(logger *zap.Logger) Middleware { +func LoggingMW(log *zap.Logger) Middleware { return func(next http.Handler) http.Handler { fn := func(w http.ResponseWriter, r *http.Request) { srw := &statusResponseWriter{ @@ -62,7 +62,7 @@ func LoggingMW(logger *zap.Logger) Middleware { fields = append(fields, zap.ByteString("body", buf.Bytes())) } - logger.Debug("Request", fields...) + log.Debug("Request", fields...) }(time.Now()) next.ServeHTTP(srw, r) diff --git a/http/notification_endpoint.go b/http/notification_endpoint.go index 9e93a490eb..b278a1fae6 100644 --- a/http/notification_endpoint.go +++ b/http/notification_endpoint.go @@ -18,7 +18,7 @@ import ( // the NotificationEndpointBackendHandler. type NotificationEndpointBackend struct { influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger NotificationEndpointService influxdb.NotificationEndpointService UserResourceMappingService influxdb.UserResourceMappingService @@ -29,10 +29,10 @@ type NotificationEndpointBackend struct { } // NewNotificationEndpointBackend returns a new instance of NotificationEndpointBackend. -func NewNotificationEndpointBackend(b *APIBackend) *NotificationEndpointBackend { +func NewNotificationEndpointBackend(log *zap.Logger, b *APIBackend) *NotificationEndpointBackend { return &NotificationEndpointBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "notificationEndpoint")), + log: log, NotificationEndpointService: b.NotificationEndpointService, UserResourceMappingService: b.UserResourceMappingService, @@ -43,11 +43,15 @@ func NewNotificationEndpointBackend(b *APIBackend) *NotificationEndpointBackend } } +func (b *NotificationEndpointBackend) Logger() *zap.Logger { + return b.log +} + // NotificationEndpointHandler is the handler for the notificationEndpoint service type NotificationEndpointHandler struct { *httprouter.Router influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger NotificationEndpointService influxdb.NotificationEndpointService UserResourceMappingService influxdb.UserResourceMappingService @@ -69,11 +73,11 @@ const ( ) // NewNotificationEndpointHandler returns a new instance of NotificationEndpointHandler. -func NewNotificationEndpointHandler(b *NotificationEndpointBackend) *NotificationEndpointHandler { +func NewNotificationEndpointHandler(log *zap.Logger, b *NotificationEndpointBackend) *NotificationEndpointHandler { h := &NotificationEndpointHandler{ Router: NewRouter(b.HTTPErrorHandler), HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger, + log: log, NotificationEndpointService: b.NotificationEndpointService, UserResourceMappingService: b.UserResourceMappingService, @@ -91,7 +95,7 @@ func NewNotificationEndpointHandler(b *NotificationEndpointBackend) *Notificatio memberBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: influxdb.NotificationEndpointResourceType, UserType: influxdb.Member, UserResourceMappingService: b.UserResourceMappingService, @@ -103,7 +107,7 @@ func NewNotificationEndpointHandler(b *NotificationEndpointBackend) *Notificatio ownerBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: influxdb.NotificationEndpointResourceType, UserType: influxdb.Owner, UserResourceMappingService: b.UserResourceMappingService, @@ -115,7 +119,7 @@ func NewNotificationEndpointHandler(b *NotificationEndpointBackend) *Notificatio labelBackend := &LabelBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "label")), + log: b.log.With(zap.String("handler", "label")), LabelService: b.LabelService, ResourceType: influxdb.TelegrafsResourceType, } @@ -220,7 +224,7 @@ func (h *NotificationEndpointHandler) handleGetNotificationEndpoints(w http.Resp ctx := r.Context() filter, opts, err := decodeNotificationEndpointFilter(ctx, r) if err != nil { - h.Logger.Debug("failed to decode request", zap.Error(err)) + h.log.Debug("Failed to decode request", zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -229,10 +233,10 @@ func (h *NotificationEndpointHandler) handleGetNotificationEndpoints(w http.Resp h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("notificationEndpoints retrieved", zap.String("notificationEndpoints", fmt.Sprint(edps))) + h.log.Debug("NotificationEndpoints retrieved", zap.String("notificationEndpoints", fmt.Sprint(edps))) if err := encodeResponse(ctx, w, http.StatusOK, newNotificationEndpointsResponse(ctx, edps, h.LabelService, filter, *opts)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -249,7 +253,7 @@ func (h *NotificationEndpointHandler) handleGetNotificationEndpoint(w http.Respo h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("notificationEndpoint retrieved", zap.String("notificationEndpoint", fmt.Sprint(edp))) + h.log.Debug("NotificationEndpoint retrieved", zap.String("notificationEndpoint", fmt.Sprint(edp))) labels, err := h.LabelService.FindResourceLabels(ctx, influxdb.LabelMappingFilter{ResourceID: edp.GetID()}) if err != nil { @@ -258,7 +262,7 @@ func (h *NotificationEndpointHandler) handleGetNotificationEndpoint(w http.Respo } if err := encodeResponse(ctx, w, http.StatusOK, newNotificationEndpointResponse(edp, labels)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -412,7 +416,7 @@ func (h *NotificationEndpointHandler) handlePostNotificationEndpoint(w http.Resp ctx := r.Context() edp, err := decodePostNotificationEndpointRequest(ctx, r) if err != nil { - h.Logger.Debug("failed to decode request", zap.Error(err)) + h.log.Debug("Failed to decode request", zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -442,10 +446,10 @@ func (h *NotificationEndpointHandler) handlePostNotificationEndpoint(w http.Resp labels := h.mapNewNotificationEndpointLabels(ctx, edp.NotificationEndpoint, edp.Labels) - h.Logger.Debug("notificationEndpoint created", zap.String("notificationEndpoint", fmt.Sprint(edp))) + h.log.Debug("NotificationEndpoint created", zap.String("notificationEndpoint", fmt.Sprint(edp))) if err := encodeResponse(ctx, w, http.StatusCreated, newNotificationEndpointResponse(edp, labels)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -486,7 +490,7 @@ func (h *NotificationEndpointHandler) handlePutNotificationEndpoint(w http.Respo ctx := r.Context() edp, err := decodePutNotificationEndpointRequest(ctx, r) if err != nil { - h.Logger.Debug("failed to decode request", zap.Error(err)) + h.log.Debug("Failed to decode request", zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -520,10 +524,10 @@ func (h *NotificationEndpointHandler) handlePutNotificationEndpoint(w http.Respo h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("notificationEndpoint replaced", zap.String("notificationEndpoint", fmt.Sprint(edp))) + h.log.Debug("NotificationEndpoint replaced", zap.String("notificationEndpoint", fmt.Sprint(edp))) if err := encodeResponse(ctx, w, http.StatusOK, newNotificationEndpointResponse(edp, labels)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -533,7 +537,7 @@ func (h *NotificationEndpointHandler) handlePatchNotificationEndpoint(w http.Res ctx := r.Context() req, err := decodePatchNotificationEndpointRequest(ctx, r) if err != nil { - h.Logger.Debug("failed to decode request", zap.Error(err)) + h.log.Debug("Failed to decode request", zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -549,10 +553,10 @@ func (h *NotificationEndpointHandler) handlePatchNotificationEndpoint(w http.Res h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("notificationEndpoint patch", zap.String("notificationEndpoint", fmt.Sprint(edp))) + h.log.Debug("NotificationEndpoint patch", zap.String("notificationEndpoint", fmt.Sprint(edp))) if err := encodeResponse(ctx, w, http.StatusOK, newNotificationEndpointResponse(edp, labels)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -588,7 +592,7 @@ func (h *NotificationEndpointHandler) handleDeleteNotificationEndpoint(w http.Re }, w) return } - h.Logger.Debug("notificationEndpoint deleted", zap.String("notificationEndpointID", fmt.Sprint(i))) + h.log.Debug("NotificationEndpoint deleted", zap.String("notificationEndpointID", fmt.Sprint(i))) w.WriteHeader(http.StatusNoContent) } diff --git a/http/notification_endpoint_test.go b/http/notification_endpoint_test.go index 87013b2aef..64ac6fecf0 100644 --- a/http/notification_endpoint_test.go +++ b/http/notification_endpoint_test.go @@ -11,20 +11,19 @@ import ( "testing" "github.com/google/go-cmp/cmp" - + "github.com/influxdata/httprouter" "github.com/influxdata/influxdb" pcontext "github.com/influxdata/influxdb/context" "github.com/influxdata/influxdb/mock" "github.com/influxdata/influxdb/notification/endpoint" influxTesting "github.com/influxdata/influxdb/testing" - "github.com/influxdata/httprouter" - "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) // NewMockNotificationEndpointBackend returns a NotificationEndpointBackend with mock services. -func NewMockNotificationEndpointBackend() *NotificationEndpointBackend { +func NewMockNotificationEndpointBackend(t *testing.T) *NotificationEndpointBackend { return &NotificationEndpointBackend{ - Logger: zap.NewNop().With(zap.String("handler", "notification endpoint")), + log: zaptest.NewLogger(t), NotificationEndpointService: &mock.NotificationEndpointService{}, UserResourceMappingService: mock.NewUserResourceMappingService(), @@ -217,10 +216,10 @@ func TestService_handleGetNotificationEndpoints(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - notificationEndpointBackend := NewMockNotificationEndpointBackend() + notificationEndpointBackend := NewMockNotificationEndpointBackend(t) notificationEndpointBackend.NotificationEndpointService = tt.fields.NotificationEndpointService notificationEndpointBackend.LabelService = tt.fields.LabelService - h := NewNotificationEndpointHandler(notificationEndpointBackend) + h := NewNotificationEndpointHandler(zaptest.NewLogger(t), notificationEndpointBackend) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -354,10 +353,10 @@ func TestService_handleGetNotificationEndpoint(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - notificationEndpointBackend := NewMockNotificationEndpointBackend() + notificationEndpointBackend := NewMockNotificationEndpointBackend(t) notificationEndpointBackend.HTTPErrorHandler = ErrorHandler(0) notificationEndpointBackend.NotificationEndpointService = tt.fields.NotificationEndpointService - h := NewNotificationEndpointHandler(notificationEndpointBackend) + h := NewNotificationEndpointHandler(zaptest.NewLogger(t), notificationEndpointBackend) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -500,11 +499,11 @@ func TestService_handlePostNotificationEndpoint(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { secrets = tt.fields.Secrets - notificationEndpointBackend := NewMockNotificationEndpointBackend() + notificationEndpointBackend := NewMockNotificationEndpointBackend(t) notificationEndpointBackend.NotificationEndpointService = tt.fields.NotificationEndpointService notificationEndpointBackend.OrganizationService = tt.fields.OrganizationService notificationEndpointBackend.SecretService = tt.fields.SecretService - h := NewNotificationEndpointHandler(notificationEndpointBackend) + h := NewNotificationEndpointHandler(zaptest.NewLogger(t), notificationEndpointBackend) b, err := json.Marshal(tt.args.endpoint) if err != nil { @@ -625,11 +624,11 @@ func TestService_handleDeleteNotificationEndpoint(t *testing.T) { t.Run(tt.name, func(t *testing.T) { secrets = tt.fields.Secrets - notificationEndpointBackend := NewMockNotificationEndpointBackend() + notificationEndpointBackend := NewMockNotificationEndpointBackend(t) notificationEndpointBackend.HTTPErrorHandler = ErrorHandler(0) notificationEndpointBackend.NotificationEndpointService = tt.fields.NotificationEndpointService notificationEndpointBackend.SecretService = tt.fields.SecretService - h := NewNotificationEndpointHandler(notificationEndpointBackend) + h := NewNotificationEndpointHandler(zaptest.NewLogger(t), notificationEndpointBackend) r := httptest.NewRequest("GET", "http://any.url", nil) @@ -772,10 +771,10 @@ func TestService_handlePatchNotificationEndpoint(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - notificationEndpointBackend := NewMockNotificationEndpointBackend() + notificationEndpointBackend := NewMockNotificationEndpointBackend(t) notificationEndpointBackend.HTTPErrorHandler = ErrorHandler(0) notificationEndpointBackend.NotificationEndpointService = tt.fields.NotificationEndpointService - h := NewNotificationEndpointHandler(notificationEndpointBackend) + h := NewNotificationEndpointHandler(zaptest.NewLogger(t), notificationEndpointBackend) upd := influxdb.NotificationEndpointUpdate{} if tt.args.name != "" { @@ -936,11 +935,11 @@ func TestService_handleUpdateNotificationEndpoint(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { secrets = tt.fields.Secrets - notificationEndpointBackend := NewMockNotificationEndpointBackend() + notificationEndpointBackend := NewMockNotificationEndpointBackend(t) notificationEndpointBackend.HTTPErrorHandler = ErrorHandler(0) notificationEndpointBackend.NotificationEndpointService = tt.fields.NotificationEndpointService notificationEndpointBackend.SecretService = tt.fields.SecretService - h := NewNotificationEndpointHandler(notificationEndpointBackend) + h := NewNotificationEndpointHandler(zaptest.NewLogger(t), notificationEndpointBackend) b, err := json.Marshal(tt.args.edp) if err != nil { @@ -1046,9 +1045,9 @@ func TestService_handlePostNotificationEndpointMember(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - notificationEndpointBackend := NewMockNotificationEndpointBackend() + notificationEndpointBackend := NewMockNotificationEndpointBackend(t) notificationEndpointBackend.UserService = tt.fields.UserService - h := NewNotificationEndpointHandler(notificationEndpointBackend) + h := NewNotificationEndpointHandler(zaptest.NewLogger(t), notificationEndpointBackend) b, err := json.Marshal(tt.args.user) if err != nil { @@ -1141,9 +1140,9 @@ func TestService_handlePostNotificationEndpointOwner(t *testing.T) { for _, tt := range cases { t.Run(tt.name, func(t *testing.T) { - notificationEndpointBackend := NewMockNotificationEndpointBackend() + notificationEndpointBackend := NewMockNotificationEndpointBackend(t) notificationEndpointBackend.UserService = tt.fields.UserService - h := NewNotificationEndpointHandler(notificationEndpointBackend) + h := NewNotificationEndpointHandler(zaptest.NewLogger(t), notificationEndpointBackend) b, err := json.Marshal(tt.args.user) if err != nil { diff --git a/http/notification_rule.go b/http/notification_rule.go index ee2f854f23..50b472d976 100644 --- a/http/notification_rule.go +++ b/http/notification_rule.go @@ -22,7 +22,7 @@ type statusDecode struct { // the NotificationRuleBackendHandler. type NotificationRuleBackend struct { influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger NotificationRuleStore influxdb.NotificationRuleStore NotificationEndpointService influxdb.NotificationEndpointService @@ -34,10 +34,10 @@ type NotificationRuleBackend struct { } // NewNotificationRuleBackend returns a new instance of NotificationRuleBackend. -func NewNotificationRuleBackend(b *APIBackend) *NotificationRuleBackend { +func NewNotificationRuleBackend(log *zap.Logger, b *APIBackend) *NotificationRuleBackend { return &NotificationRuleBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "notification_rule")), + log: log, NotificationRuleStore: b.NotificationRuleStore, NotificationEndpointService: b.NotificationEndpointService, @@ -53,7 +53,7 @@ func NewNotificationRuleBackend(b *APIBackend) *NotificationRuleBackend { type NotificationRuleHandler struct { *httprouter.Router influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger NotificationRuleStore influxdb.NotificationRuleStore NotificationEndpointService influxdb.NotificationEndpointService @@ -77,11 +77,11 @@ const ( ) // NewNotificationRuleHandler returns a new instance of NotificationRuleHandler. -func NewNotificationRuleHandler(b *NotificationRuleBackend) *NotificationRuleHandler { +func NewNotificationRuleHandler(log *zap.Logger, b *NotificationRuleBackend) *NotificationRuleHandler { h := &NotificationRuleHandler{ Router: NewRouter(b.HTTPErrorHandler), HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger, + log: log, NotificationRuleStore: b.NotificationRuleStore, NotificationEndpointService: b.NotificationEndpointService, @@ -101,7 +101,7 @@ func NewNotificationRuleHandler(b *NotificationRuleBackend) *NotificationRuleHan memberBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: influxdb.NotificationRuleResourceType, UserType: influxdb.Member, UserResourceMappingService: b.UserResourceMappingService, @@ -113,7 +113,7 @@ func NewNotificationRuleHandler(b *NotificationRuleBackend) *NotificationRuleHan ownerBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: influxdb.NotificationRuleResourceType, UserType: influxdb.Owner, UserResourceMappingService: b.UserResourceMappingService, @@ -125,7 +125,7 @@ func NewNotificationRuleHandler(b *NotificationRuleBackend) *NotificationRuleHan labelBackend := &LabelBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "label")), + log: b.log.With(zap.String("handler", "label")), LabelService: b.LabelService, ResourceType: influxdb.TelegrafsResourceType, } @@ -242,7 +242,7 @@ func (h *NotificationRuleHandler) handleGetNotificationRules(w http.ResponseWrit ctx := r.Context() filter, opts, err := decodeNotificationRuleFilter(ctx, r) if err != nil { - h.Logger.Debug("failed to decode request", zap.Error(err)) + h.log.Debug("Failed to decode request", zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -251,7 +251,7 @@ func (h *NotificationRuleHandler) handleGetNotificationRules(w http.ResponseWrit h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("notification rules retrieved", zap.String("notificationRules", fmt.Sprint(nrs))) + h.log.Debug("Notification rules retrieved", zap.String("notificationRules", fmt.Sprint(nrs))) res, err := h.newNotificationRulesResponse(ctx, nrs, h.LabelService, filter, *opts) if err != nil { @@ -260,7 +260,7 @@ func (h *NotificationRuleHandler) handleGetNotificationRules(w http.ResponseWrit } if err := encodeResponse(ctx, w, http.StatusOK, res); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -291,9 +291,9 @@ func (h *NotificationRuleHandler) handleGetNotificationRuleQuery(w http.Response h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("notification rule query retrieved", zap.String("notificationRuleQuery", fmt.Sprint(flux))) + h.log.Debug("Notification rule query retrieved", zap.String("notificationRuleQuery", fmt.Sprint(flux))) if err := encodeResponse(ctx, w, http.StatusOK, newFluxResponse(flux)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -310,7 +310,7 @@ func (h *NotificationRuleHandler) handleGetNotificationRule(w http.ResponseWrite h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("notification rule retrieved", zap.String("notificationRule", fmt.Sprint(nr))) + h.log.Debug("Notification rule retrieved", zap.String("notificationRule", fmt.Sprint(nr))) labels, err := h.LabelService.FindResourceLabels(ctx, influxdb.LabelMappingFilter{ResourceID: nr.GetID()}) if err != nil { @@ -325,7 +325,7 @@ func (h *NotificationRuleHandler) handleGetNotificationRule(w http.ResponseWrite } if err := encodeResponse(ctx, w, http.StatusOK, res); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -530,7 +530,7 @@ func (h *NotificationRuleHandler) handlePostNotificationRule(w http.ResponseWrit ctx := r.Context() nr, err := decodePostNotificationRuleRequest(ctx, r) if err != nil { - h.Logger.Debug("failed to decode request", zap.Error(err)) + h.log.Debug("Failed to decode request", zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -545,7 +545,7 @@ func (h *NotificationRuleHandler) handlePostNotificationRule(w http.ResponseWrit h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("notification rule created", zap.String("notificationRule", fmt.Sprint(nr))) + h.log.Debug("Notification rule created", zap.String("notificationRule", fmt.Sprint(nr))) labels := h.mapNewNotificationRuleLabels(ctx, nr.NotificationRuleCreate, nr.Labels) @@ -556,7 +556,7 @@ func (h *NotificationRuleHandler) handlePostNotificationRule(w http.ResponseWrit } if err := encodeResponse(ctx, w, http.StatusCreated, res); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -597,7 +597,7 @@ func (h *NotificationRuleHandler) handlePutNotificationRule(w http.ResponseWrite ctx := r.Context() nrc, err := decodePutNotificationRuleRequest(ctx, r) if err != nil { - h.Logger.Debug("failed to decode request", zap.Error(err)) + h.log.Debug("Failed to decode request", zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -618,7 +618,7 @@ func (h *NotificationRuleHandler) handlePutNotificationRule(w http.ResponseWrite h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("notification rule updated", zap.String("notificationRule", fmt.Sprint(nr))) + h.log.Debug("Notification rule updated", zap.String("notificationRule", fmt.Sprint(nr))) res, err := h.newNotificationRuleResponse(ctx, nr, labels) if err != nil { @@ -627,7 +627,7 @@ func (h *NotificationRuleHandler) handlePutNotificationRule(w http.ResponseWrite } if err := encodeResponse(ctx, w, http.StatusOK, res); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -637,7 +637,7 @@ func (h *NotificationRuleHandler) handlePatchNotificationRule(w http.ResponseWri ctx := r.Context() req, err := decodePatchNotificationRuleRequest(ctx, r) if err != nil { - h.Logger.Debug("failed to decode request", zap.Error(err)) + h.log.Debug("Failed to decode request", zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -653,7 +653,7 @@ func (h *NotificationRuleHandler) handlePatchNotificationRule(w http.ResponseWri h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("notification rule patch", zap.String("notificationRule", fmt.Sprint(nr))) + h.log.Debug("Notification rule patch", zap.String("notificationRule", fmt.Sprint(nr))) res, err := h.newNotificationRuleResponse(ctx, nr, labels) if err != nil { @@ -662,7 +662,7 @@ func (h *NotificationRuleHandler) handlePatchNotificationRule(w http.ResponseWri } if err := encodeResponse(ctx, w, http.StatusOK, res); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -679,7 +679,7 @@ func (h *NotificationRuleHandler) handleDeleteNotificationRule(w http.ResponseWr h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("notification rule deleted", zap.String("notificationRuleID", fmt.Sprint(i))) + h.log.Debug("Notification rule deleted", zap.String("notificationRuleID", fmt.Sprint(i))) w.WriteHeader(http.StatusNoContent) } diff --git a/http/notification_rule_test.go b/http/notification_rule_test.go index 9fd9bf2666..edd64bee49 100644 --- a/http/notification_rule_test.go +++ b/http/notification_rule_test.go @@ -5,18 +5,17 @@ import ( "encoding/json" "testing" - "github.com/influxdata/influxdb/notification" - "go.uber.org/zap" - "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/mock" + "github.com/influxdata/influxdb/notification" "github.com/influxdata/influxdb/notification/rule" influxTesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) -func NewMockNotificationRuleBackend() *NotificationRuleBackend { +func NewMockNotificationRuleBackend(t *testing.T) *NotificationRuleBackend { return &NotificationRuleBackend{ - Logger: zap.NewNop().With(zap.String("handler", "check")), + log: zaptest.NewLogger(t), UserResourceMappingService: mock.NewUserResourceMappingService(), LabelService: mock.NewLabelService(), @@ -177,7 +176,7 @@ func Test_newNotificationRuleResponses(t *testing.T) { }`, }, } - handler := NewNotificationRuleHandler(NewMockNotificationRuleBackend()) + handler := NewNotificationRuleHandler(zaptest.NewLogger(t), NewMockNotificationRuleBackend(t)) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { ctx := context.Background() @@ -292,7 +291,7 @@ func Test_newNotificationRuleResponse(t *testing.T) { }`, }, } - handler := NewNotificationRuleHandler(NewMockNotificationRuleBackend()) + handler := NewNotificationRuleHandler(zaptest.NewLogger(t), NewMockNotificationRuleBackend(t)) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { res, err := handler.newNotificationRuleResponse(context.Background(), tt.args.nr, []*influxdb.Label{}) diff --git a/http/onboarding.go b/http/onboarding.go index e27236516d..7215f54ebf 100644 --- a/http/onboarding.go +++ b/http/onboarding.go @@ -16,15 +16,15 @@ import ( // the SetupHandler. type SetupBackend struct { platform.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger OnboardingService platform.OnboardingService } // NewSetupBackend returns a new instance of SetupBackend. -func NewSetupBackend(b *APIBackend) *SetupBackend { +func NewSetupBackend(log *zap.Logger, b *APIBackend) *SetupBackend { return &SetupBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "setup")), + log: log, OnboardingService: b.OnboardingService, } } @@ -33,7 +33,7 @@ func NewSetupBackend(b *APIBackend) *SetupBackend { type SetupHandler struct { *httprouter.Router platform.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger OnboardingService platform.OnboardingService } @@ -43,11 +43,11 @@ const ( ) // NewSetupHandler returns a new instance of SetupHandler. -func NewSetupHandler(b *SetupBackend) *SetupHandler { +func NewSetupHandler(log *zap.Logger, b *SetupBackend) *SetupHandler { h := &SetupHandler{ Router: NewRouter(b.HTTPErrorHandler), HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger, + log: log, OnboardingService: b.OnboardingService, } h.HandlerFunc("POST", setupPath, h.handlePostSetup) @@ -67,10 +67,10 @@ func (h *SetupHandler) isOnboarding(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("onboarding eligibility check finished", zap.String("result", fmt.Sprint(result))) + h.log.Debug("Onboarding eligibility check finished", zap.String("result", fmt.Sprint(result))) if err := encodeResponse(ctx, w, http.StatusOK, isOnboardingResponse{result}); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -88,10 +88,10 @@ func (h *SetupHandler) handlePostSetup(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("onboarding setup completed", zap.String("results", fmt.Sprint(results))) + h.log.Debug("Onboarding setup completed", zap.String("results", fmt.Sprint(results))) if err := encodeResponse(ctx, w, http.StatusCreated, newOnboardingResponse(results)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } diff --git a/http/onboarding_test.go b/http/onboarding_test.go index b9d84bfdeb..4ad5d6d14d 100644 --- a/http/onboarding_test.go +++ b/http/onboarding_test.go @@ -5,26 +5,25 @@ import ( "net/http/httptest" "testing" - "github.com/influxdata/influxdb/mock" - "go.uber.org/zap" - platform "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/inmem" "github.com/influxdata/influxdb/kv" + "github.com/influxdata/influxdb/mock" platformtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) // NewMockSetupBackend returns a SetupBackend with mock services. -func NewMockSetupBackend() *SetupBackend { +func NewMockSetupBackend(t *testing.T) *SetupBackend { return &SetupBackend{ - Logger: zap.NewNop().With(zap.String("handler", "scraper")), + log: zaptest.NewLogger(t), OnboardingService: mock.NewOnboardingService(), } } func initOnboardingService(f platformtesting.OnboardingFields, t *testing.T) (platform.OnboardingService, func()) { t.Helper() - svc := kv.NewService(inmem.NewKVStore()) + svc := kv.NewService(zaptest.NewLogger(t), inmem.NewKVStore()) svc.IDGenerator = f.IDGenerator svc.OrgBucketIDs = f.IDGenerator svc.TokenGenerator = f.TokenGenerator @@ -38,10 +37,10 @@ func initOnboardingService(f platformtesting.OnboardingFields, t *testing.T) (pl t.Fatalf("failed to set new onboarding finished: %v", err) } - setupBackend := NewMockSetupBackend() + setupBackend := NewMockSetupBackend(t) setupBackend.HTTPErrorHandler = ErrorHandler(0) setupBackend.OnboardingService = svc - handler := NewSetupHandler(setupBackend) + handler := NewSetupHandler(zaptest.NewLogger(t), setupBackend) server := httptest.NewServer(handler) client := struct { *SetupService diff --git a/http/org_service.go b/http/org_service.go index b760cd17f6..d69e4ac871 100644 --- a/http/org_service.go +++ b/http/org_service.go @@ -19,7 +19,7 @@ import ( // the OrgHandler. type OrgBackend struct { influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger OrganizationService influxdb.OrganizationService OrganizationOperationLogService influxdb.OrganizationOperationLogService @@ -30,10 +30,10 @@ type OrgBackend struct { } // NewOrgBackend is a datasource used by the org handler. -func NewOrgBackend(b *APIBackend) *OrgBackend { +func NewOrgBackend(log *zap.Logger, b *APIBackend) *OrgBackend { return &OrgBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "org")), + log: log, OrganizationService: b.OrganizationService, OrganizationOperationLogService: b.OrganizationOperationLogService, @@ -48,7 +48,7 @@ func NewOrgBackend(b *APIBackend) *OrgBackend { type OrgHandler struct { *httprouter.Router influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger OrganizationService influxdb.OrganizationService OrganizationOperationLogService influxdb.OrganizationOperationLogService @@ -96,11 +96,11 @@ func checkOrganziationExists(handler *OrgHandler) Middleware { } // NewOrgHandler returns a new instance of OrgHandler. -func NewOrgHandler(b *OrgBackend) *OrgHandler { +func NewOrgHandler(log *zap.Logger, b *OrgBackend) *OrgHandler { h := &OrgHandler{ Router: NewRouter(b.HTTPErrorHandler), HTTPErrorHandler: b.HTTPErrorHandler, - Logger: zap.NewNop(), + log: log, OrganizationService: b.OrganizationService, OrganizationOperationLogService: b.OrganizationOperationLogService, @@ -119,7 +119,7 @@ func NewOrgHandler(b *OrgBackend) *OrgHandler { memberBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: influxdb.OrgsResourceType, UserType: influxdb.Member, UserResourceMappingService: b.UserResourceMappingService, @@ -131,7 +131,7 @@ func NewOrgHandler(b *OrgBackend) *OrgHandler { ownerBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: influxdb.OrgsResourceType, UserType: influxdb.Owner, UserResourceMappingService: b.UserResourceMappingService, @@ -148,7 +148,7 @@ func NewOrgHandler(b *OrgBackend) *OrgHandler { labelBackend := &LabelBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "label")), + log: b.log.With(zap.String("handler", "label")), LabelService: b.LabelService, ResourceType: influxdb.OrgsResourceType, } @@ -235,10 +235,10 @@ func (h *OrgHandler) handlePostOrg(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("org created", zap.String("org", fmt.Sprint(req.Org))) + h.log.Debug("Org created", zap.String("org", fmt.Sprint(req.Org))) if err := encodeResponse(ctx, w, http.StatusCreated, newOrgResponse(req.Org)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -272,10 +272,10 @@ func (h *OrgHandler) handleGetOrg(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("org retrieved", zap.String("org", fmt.Sprint(b))) + h.log.Debug("Org retrieved", zap.String("org", fmt.Sprint(b))) if err := encodeResponse(ctx, w, http.StatusOK, newOrgResponse(b)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -320,10 +320,10 @@ func (h *OrgHandler) handleGetOrgs(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("orgs retrieved", zap.String("org", fmt.Sprint(orgs))) + h.log.Debug("Orgs retrieved", zap.String("org", fmt.Sprint(orgs))) if err := encodeResponse(ctx, w, http.StatusOK, newOrgsResponse(orgs)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -364,7 +364,7 @@ func (h *OrgHandler) handleDeleteOrg(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("org deleted", zap.String("orgID", fmt.Sprint(req.OrganizationID))) + h.log.Debug("Org deleted", zap.String("orgID", fmt.Sprint(req.OrganizationID))) w.WriteHeader(http.StatusNoContent) } @@ -412,10 +412,10 @@ func (h *OrgHandler) handlePatchOrg(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("org updated", zap.String("org", fmt.Sprint(o))) + h.log.Debug("Org updated", zap.String("org", fmt.Sprint(o))) if err := encodeResponse(ctx, w, http.StatusOK, newOrgResponse(o)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -468,7 +468,7 @@ func (h *OrgHandler) handleGetSecrets(w http.ResponseWriter, r *http.Request) { } if err := encodeResponse(ctx, w, http.StatusOK, newSecretsResponse(req.orgID, ks)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -854,10 +854,10 @@ func (h *OrgHandler) handleGetOrgLog(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("org logs retrieved", zap.String("log", fmt.Sprint(log))) + h.log.Debug("Org logs retrieved", zap.String("log", fmt.Sprint(log))) if err := encodeResponse(ctx, w, http.StatusOK, newOrganizationLogResponse(req.OrganizationID, log)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } diff --git a/http/org_test.go b/http/org_test.go index f510445a61..9df0577831 100644 --- a/http/org_test.go +++ b/http/org_test.go @@ -10,19 +10,18 @@ import ( "net/http/httptest" "testing" - "go.uber.org/zap" - platform "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/inmem" "github.com/influxdata/influxdb/kv" "github.com/influxdata/influxdb/mock" platformtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) // NewMockOrgBackend returns a OrgBackend with mock services. -func NewMockOrgBackend() *OrgBackend { +func NewMockOrgBackend(t *testing.T) *OrgBackend { return &OrgBackend{ - Logger: zap.NewNop().With(zap.String("handler", "org")), + log: zaptest.NewLogger(t), OrganizationService: mock.NewOrganizationService(), OrganizationOperationLogService: mock.NewOrganizationOperationLogService(), @@ -35,7 +34,7 @@ func NewMockOrgBackend() *OrgBackend { func initOrganizationService(f platformtesting.OrganizationFields, t *testing.T) (platform.OrganizationService, string, func()) { t.Helper() - svc := kv.NewService(inmem.NewKVStore()) + svc := kv.NewService(zaptest.NewLogger(t), inmem.NewKVStore()) svc.IDGenerator = f.IDGenerator svc.OrgBucketIDs = f.OrgBucketIDs svc.TimeGenerator = f.TimeGenerator @@ -54,10 +53,10 @@ func initOrganizationService(f platformtesting.OrganizationFields, t *testing.T) } } - orgBackend := NewMockOrgBackend() + orgBackend := NewMockOrgBackend(t) orgBackend.HTTPErrorHandler = ErrorHandler(0) orgBackend.OrganizationService = svc - handler := NewOrgHandler(orgBackend) + handler := NewOrgHandler(zaptest.NewLogger(t), orgBackend) server := httptest.NewServer(handler) client := OrganizationService{ Addr: server.URL, @@ -181,10 +180,10 @@ func TestSecretService_handleGetSecrets(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - orgBackend := NewMockOrgBackend() + orgBackend := NewMockOrgBackend(t) orgBackend.HTTPErrorHandler = ErrorHandler(0) orgBackend.SecretService = tt.fields.SecretService - h := NewOrgHandler(orgBackend) + h := NewOrgHandler(zaptest.NewLogger(t), orgBackend) u := fmt.Sprintf("http://any.url/api/v2/orgs/%s/secrets", tt.args.orgID) r := httptest.NewRequest("GET", u, nil) @@ -257,10 +256,10 @@ func TestSecretService_handlePatchSecrets(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - orgBackend := NewMockOrgBackend() + orgBackend := NewMockOrgBackend(t) orgBackend.HTTPErrorHandler = ErrorHandler(0) orgBackend.SecretService = tt.fields.SecretService - h := NewOrgHandler(orgBackend) + h := NewOrgHandler(zaptest.NewLogger(t), orgBackend) b, err := json.Marshal(tt.args.secrets) if err != nil { @@ -339,10 +338,10 @@ func TestSecretService_handleDeleteSecrets(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - orgBackend := NewMockOrgBackend() + orgBackend := NewMockOrgBackend(t) orgBackend.HTTPErrorHandler = ErrorHandler(0) orgBackend.SecretService = tt.fields.SecretService - h := NewOrgHandler(orgBackend) + h := NewOrgHandler(zaptest.NewLogger(t), orgBackend) b, err := json.Marshal(deleteSecretsRequest{ Secrets: tt.args.secrets, diff --git a/http/pkger_http_server_test.go b/http/pkger_http_server_test.go index e64a6a60b4..6bee70af4e 100644 --- a/http/pkger_http_server_test.go +++ b/http/pkger_http_server_test.go @@ -16,6 +16,7 @@ import ( "github.com/influxdata/influxdb/pkger" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" "gopkg.in/yaml.v3" ) @@ -28,7 +29,7 @@ func TestPkgerHTTPServer(t *testing.T) { ID: id, }, nil } - svc := pkger.NewService(pkger.WithLabelSVC(fakeLabelSVC)) + svc := pkger.NewService(zaptest.NewLogger(t), pkger.WithLabelSVC(fakeLabelSVC)) pkgHandler := fluxTTP.NewHandlerPkg(fluxTTP.ErrorHandler(0), svc) svr := newMountedHandler(pkgHandler) diff --git a/http/platform_handler.go b/http/platform_handler.go index 13c466d8ec..988c079344 100644 --- a/http/platform_handler.go +++ b/http/platform_handler.go @@ -24,7 +24,7 @@ func setCORSResponseHeaders(w http.ResponseWriter, r *http.Request) { // NewPlatformHandler returns a platform handler that serves the API and associated assets. func NewPlatformHandler(b *APIBackend, opts ...APIHandlerOptFn) *PlatformHandler { - h := NewAuthenticationHandler(b.HTTPErrorHandler) + h := NewAuthenticationHandler(b.Logger, b.HTTPErrorHandler) h.Handler = NewAPIHandler(b, opts...) h.AuthorizationService = b.AuthorizationService h.SessionService = b.SessionService diff --git a/http/query_handler.go b/http/query_handler.go index 2a529894eb..44dc1c84bf 100644 --- a/http/query_handler.go +++ b/http/query_handler.go @@ -38,7 +38,7 @@ const ( // the FluxHandler. type FluxBackend struct { influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger QueryEventRecorder metric.EventRecorder OrganizationService influxdb.OrganizationService @@ -46,10 +46,10 @@ type FluxBackend struct { } // NewFluxBackend returns a new instance of FluxBackend. -func NewFluxBackend(b *APIBackend) *FluxBackend { +func NewFluxBackend(log *zap.Logger, b *APIBackend) *FluxBackend { return &FluxBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "query")), + log: log, QueryEventRecorder: b.QueryEventRecorder, ProxyQueryService: b.FluxService, @@ -66,7 +66,7 @@ type HTTPDialect interface { type FluxHandler struct { *httprouter.Router influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger Now func() time.Time OrganizationService influxdb.OrganizationService @@ -76,12 +76,12 @@ type FluxHandler struct { } // NewFluxHandler returns a new handler at /api/v2/query for flux queries. -func NewFluxHandler(b *FluxBackend) *FluxHandler { +func NewFluxHandler(log *zap.Logger, b *FluxBackend) *FluxHandler { h := &FluxHandler{ Router: NewRouter(b.HTTPErrorHandler), Now: time.Now, HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger, + log: log, ProxyQueryService: b.ProxyQueryService, OrganizationService: b.OrganizationService, @@ -169,7 +169,7 @@ func (h *FluxHandler) handleQuery(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Info("Error writing response to client", + h.log.Info("Error writing response to client", zap.String("handler", "flux"), zap.Error(err), ) @@ -218,7 +218,7 @@ func (h *FluxHandler) postFluxAST(w http.ResponseWriter, r *http.Request) { } if err := encodeResponse(ctx, w, http.StatusOK, res); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -246,7 +246,7 @@ func (h *FluxHandler) postQueryAnalyze(w http.ResponseWriter, r *http.Request) { return } if err := encodeResponse(ctx, w, http.StatusOK, a); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -298,7 +298,7 @@ func (h *FluxHandler) getFluxSuggestions(w http.ResponseWriter, r *http.Request) res := suggestionsResponse{Functions: functions} if err := encodeResponse(ctx, w, http.StatusOK, res); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -320,7 +320,7 @@ func (h *FluxHandler) getFluxSuggestion(w http.ResponseWriter, r *http.Request) res := suggestionResponse{Name: name, Params: suggestion.Params} if err := encodeResponse(ctx, w, http.StatusOK, res); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } diff --git a/http/query_handler_test.go b/http/query_handler_test.go index 505f289081..b083d4b7c6 100644 --- a/http/query_handler_test.go +++ b/http/query_handler_test.go @@ -324,7 +324,7 @@ func TestFluxHandler_PostQuery_Errors(t *testing.T) { i := inmem.NewService() b := &FluxBackend{ HTTPErrorHandler: ErrorHandler(0), - Logger: zaptest.NewLogger(t), + log: zaptest.NewLogger(t), QueryEventRecorder: noopEventRecorder{}, OrganizationService: i, ProxyQueryService: &mock.ProxyQueryService{ @@ -336,7 +336,7 @@ func TestFluxHandler_PostQuery_Errors(t *testing.T) { }, }, } - h := NewFluxHandler(b) + h := NewFluxHandler(zaptest.NewLogger(t), b) t.Run("missing authorizer", func(t *testing.T) { ts := httptest.NewServer(h) @@ -478,18 +478,18 @@ func TestFluxService_Query_gzip(t *testing.T) { fluxBackend := &FluxBackend{ HTTPErrorHandler: ErrorHandler(0), - Logger: zaptest.NewLogger(t), + log: zaptest.NewLogger(t), QueryEventRecorder: noopEventRecorder{}, OrganizationService: orgService, ProxyQueryService: queryService, } - fluxHandler := NewFluxHandler(fluxBackend) + fluxHandler := NewFluxHandler(zaptest.NewLogger(t), fluxBackend) // fluxHandling expects authorization to be on the request context. // AuthenticationHandler extracts the token from headers and places // the auth on context. - auth := NewAuthenticationHandler(ErrorHandler(0)) + auth := NewAuthenticationHandler(zaptest.NewLogger(t), ErrorHandler(0)) auth.AuthorizationService = authService auth.Handler = fluxHandler auth.UserService = &influxmock.UserService{ @@ -614,18 +614,18 @@ func benchmarkQuery(b *testing.B, disableCompression bool) { fluxBackend := &FluxBackend{ HTTPErrorHandler: ErrorHandler(0), - Logger: zaptest.NewLogger(b), + log: zaptest.NewLogger(b), QueryEventRecorder: noopEventRecorder{}, OrganizationService: orgService, ProxyQueryService: queryService, } - fluxHandler := NewFluxHandler(fluxBackend) + fluxHandler := NewFluxHandler(zaptest.NewLogger(b), fluxBackend) // fluxHandling expects authorization to be on the request context. // AuthenticationHandler extracts the token from headers and places // the auth on context. - auth := NewAuthenticationHandler(ErrorHandler(0)) + auth := NewAuthenticationHandler(zaptest.NewLogger(b), ErrorHandler(0)) auth.AuthorizationService = authService auth.Handler = fluxHandler diff --git a/http/scraper_service.go b/http/scraper_service.go index b96a51e7f0..78b3759ed5 100644 --- a/http/scraper_service.go +++ b/http/scraper_service.go @@ -18,7 +18,7 @@ import ( // the ScraperHandler. type ScraperBackend struct { influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger ScraperStorageService influxdb.ScraperTargetStoreService BucketService influxdb.BucketService @@ -29,10 +29,10 @@ type ScraperBackend struct { } // NewScraperBackend returns a new instance of ScraperBackend. -func NewScraperBackend(b *APIBackend) *ScraperBackend { +func NewScraperBackend(log *zap.Logger, b *APIBackend) *ScraperBackend { return &ScraperBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "scraper")), + log: log, ScraperStorageService: b.ScraperTargetStoreService, BucketService: b.BucketService, @@ -47,7 +47,7 @@ func NewScraperBackend(b *APIBackend) *ScraperBackend { type ScraperHandler struct { *httprouter.Router influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger UserService influxdb.UserService UserResourceMappingService influxdb.UserResourceMappingService LabelService influxdb.LabelService @@ -67,11 +67,11 @@ const ( ) // NewScraperHandler returns a new instance of ScraperHandler. -func NewScraperHandler(b *ScraperBackend) *ScraperHandler { +func NewScraperHandler(log *zap.Logger, b *ScraperBackend) *ScraperHandler { h := &ScraperHandler{ Router: NewRouter(b.HTTPErrorHandler), HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger, + log: log, UserService: b.UserService, UserResourceMappingService: b.UserResourceMappingService, LabelService: b.LabelService, @@ -87,7 +87,7 @@ func NewScraperHandler(b *ScraperBackend) *ScraperHandler { memberBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: influxdb.ScraperResourceType, UserType: influxdb.Member, UserResourceMappingService: b.UserResourceMappingService, @@ -99,7 +99,7 @@ func NewScraperHandler(b *ScraperBackend) *ScraperHandler { ownerBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: influxdb.ScraperResourceType, UserType: influxdb.Owner, UserResourceMappingService: b.UserResourceMappingService, @@ -111,7 +111,7 @@ func NewScraperHandler(b *ScraperBackend) *ScraperHandler { labelBackend := &LabelBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "label")), + log: b.log.With(zap.String("handler", "label")), LabelService: b.LabelService, ResourceType: influxdb.ScraperResourceType, } @@ -141,7 +141,7 @@ func (h *ScraperHandler) handlePostScraperTarget(w http.ResponseWriter, r *http. h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("scraper created", zap.String("scraper", fmt.Sprint(req))) + h.log.Debug("Scraper created", zap.String("scraper", fmt.Sprint(req))) resp, err := h.newTargetResponse(ctx, *req) if err != nil { @@ -149,7 +149,7 @@ func (h *ScraperHandler) handlePostScraperTarget(w http.ResponseWriter, r *http. return } if err := encodeResponse(ctx, w, http.StatusCreated, resp); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -167,7 +167,7 @@ func (h *ScraperHandler) handleDeleteScraperTarget(w http.ResponseWriter, r *htt h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("scraper deleted", zap.String("scraperTargetID", fmt.Sprint(id))) + h.log.Debug("Scraper deleted", zap.String("scraperTargetID", fmt.Sprint(id))) w.WriteHeader(http.StatusNoContent) } @@ -192,7 +192,7 @@ func (h *ScraperHandler) handlePatchScraperTarget(w http.ResponseWriter, r *http h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("scraper updated", zap.String("scraper", fmt.Sprint(target))) + h.log.Debug("Scraper updated", zap.String("scraper", fmt.Sprint(target))) resp, err := h.newTargetResponse(ctx, *target) if err != nil { @@ -201,7 +201,7 @@ func (h *ScraperHandler) handlePatchScraperTarget(w http.ResponseWriter, r *http } if err := encodeResponse(ctx, w, http.StatusOK, resp); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -218,7 +218,7 @@ func (h *ScraperHandler) handleGetScraperTarget(w http.ResponseWriter, r *http.R h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("scraper retrieved", zap.String("scraper", fmt.Sprint(target))) + h.log.Debug("Scraper retrieved", zap.String("scraper", fmt.Sprint(target))) resp, err := h.newTargetResponse(ctx, *target) if err != nil { @@ -227,7 +227,7 @@ func (h *ScraperHandler) handleGetScraperTarget(w http.ResponseWriter, r *http.R } if err := encodeResponse(ctx, w, http.StatusOK, resp); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -280,7 +280,7 @@ func (h *ScraperHandler) handleGetScraperTargets(w http.ResponseWriter, r *http. h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("scrapers retrieved", zap.String("scrapers", fmt.Sprint(targets))) + h.log.Debug("Scrapers retrieved", zap.String("scrapers", fmt.Sprint(targets))) resp, err := h.newListTargetsResponse(ctx, targets) if err != nil { @@ -289,7 +289,7 @@ func (h *ScraperHandler) handleGetScraperTargets(w http.ResponseWriter, r *http. } if err := encodeResponse(ctx, w, http.StatusOK, resp); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } diff --git a/http/scraper_service_test.go b/http/scraper_service_test.go index 40f8842912..fed17d5add 100644 --- a/http/scraper_service_test.go +++ b/http/scraper_service_test.go @@ -10,15 +10,14 @@ import ( "net/http/httptest" "testing" - "go.uber.org/zap" - + "github.com/influxdata/httprouter" "github.com/influxdata/influxdb" platcontext "github.com/influxdata/influxdb/context" httpMock "github.com/influxdata/influxdb/http/mock" "github.com/influxdata/influxdb/inmem" "github.com/influxdata/influxdb/mock" platformtesting "github.com/influxdata/influxdb/testing" - "github.com/influxdata/httprouter" + "go.uber.org/zap/zaptest" ) const ( @@ -32,9 +31,9 @@ var ( ) // NewMockScraperBackend returns a ScraperBackend with mock services. -func NewMockScraperBackend() *ScraperBackend { +func NewMockScraperBackend(t *testing.T) *ScraperBackend { return &ScraperBackend{ - Logger: zap.NewNop().With(zap.String("handler", "scraper")), + log: zaptest.NewLogger(t), ScraperStorageService: &mock.ScraperTargetStoreService{}, BucketService: mock.NewBucketService(), @@ -206,12 +205,12 @@ func TestService_handleGetScraperTargets(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - scraperBackend := NewMockScraperBackend() + scraperBackend := NewMockScraperBackend(t) scraperBackend.HTTPErrorHandler = ErrorHandler(0) scraperBackend.ScraperStorageService = tt.fields.ScraperTargetStoreService scraperBackend.OrganizationService = tt.fields.OrganizationService scraperBackend.BucketService = tt.fields.BucketService - h := NewScraperHandler(scraperBackend) + h := NewScraperHandler(zaptest.NewLogger(t), scraperBackend) r := httptest.NewRequest("GET", "http://any.tld", nil) @@ -343,12 +342,12 @@ func TestService_handleGetScraperTarget(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - scraperBackend := NewMockScraperBackend() + scraperBackend := NewMockScraperBackend(t) scraperBackend.HTTPErrorHandler = ErrorHandler(0) scraperBackend.ScraperStorageService = tt.fields.ScraperTargetStoreService scraperBackend.OrganizationService = tt.fields.OrganizationService scraperBackend.BucketService = tt.fields.BucketService - h := NewScraperHandler(scraperBackend) + h := NewScraperHandler(zaptest.NewLogger(t), scraperBackend) r := httptest.NewRequest("GET", "http://any.tld", nil) @@ -451,10 +450,10 @@ func TestService_handleDeleteScraperTarget(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - scraperBackend := NewMockScraperBackend() + scraperBackend := NewMockScraperBackend(t) scraperBackend.HTTPErrorHandler = ErrorHandler(0) scraperBackend.ScraperStorageService = tt.fields.Service - h := NewScraperHandler(scraperBackend) + h := NewScraperHandler(zaptest.NewLogger(t), scraperBackend) r := httptest.NewRequest("GET", "http://any.tld", nil) @@ -582,12 +581,12 @@ func TestService_handlePostScraperTarget(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - scraperBackend := NewMockScraperBackend() + scraperBackend := NewMockScraperBackend(t) scraperBackend.HTTPErrorHandler = ErrorHandler(0) scraperBackend.ScraperStorageService = tt.fields.ScraperTargetStoreService scraperBackend.OrganizationService = tt.fields.OrganizationService scraperBackend.BucketService = tt.fields.BucketService - h := NewScraperHandler(scraperBackend) + h := NewScraperHandler(zaptest.NewLogger(t), scraperBackend) st, err := json.Marshal(tt.args.target) if err != nil { @@ -760,12 +759,12 @@ func TestService_handlePatchScraperTarget(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - scraperBackend := NewMockScraperBackend() + scraperBackend := NewMockScraperBackend(t) scraperBackend.HTTPErrorHandler = ErrorHandler(0) scraperBackend.ScraperStorageService = tt.fields.ScraperTargetStoreService scraperBackend.OrganizationService = tt.fields.OrganizationService scraperBackend.BucketService = tt.fields.BucketService - h := NewScraperHandler(scraperBackend) + h := NewScraperHandler(zaptest.NewLogger(t), scraperBackend) var err error st := make([]byte, 0) @@ -836,7 +835,7 @@ func initScraperService(f platformtesting.TargetFields, t *testing.T) (influxdb. } } - scraperBackend := NewMockScraperBackend() + scraperBackend := NewMockScraperBackend(t) scraperBackend.HTTPErrorHandler = ErrorHandler(0) scraperBackend.ScraperStorageService = svc scraperBackend.OrganizationService = svc @@ -849,7 +848,7 @@ func initScraperService(f platformtesting.TargetFields, t *testing.T) (influxdb. }, } - handler := NewScraperHandler(scraperBackend) + handler := NewScraperHandler(zaptest.NewLogger(t), scraperBackend) server := httptest.NewServer(httpMock.NewAuthMiddlewareHandler( handler, &influxdb.Authorization{ diff --git a/http/server.go b/http/server.go index c888f209bc..6614c44e07 100644 --- a/http/server.go +++ b/http/server.go @@ -27,22 +27,19 @@ type Server struct { srv *http.Server signals map[os.Signal]struct{} - logger *zap.Logger + log *zap.Logger wg sync.WaitGroup } // NewServer returns a new server struct that can be used. -func NewServer(handler http.Handler, logger *zap.Logger) *Server { - if logger == nil { - logger = zap.NewNop() - } +func NewServer(log *zap.Logger, handler http.Handler) *Server { return &Server{ ShutdownTimeout: DefaultShutdownTimeout, srv: &http.Server{ Handler: handler, - ErrorLog: zap.NewStdLog(logger), + ErrorLog: zap.NewStdLog(log), }, - logger: logger, + log: log, } } @@ -79,7 +76,7 @@ func (s *Server) serve(listener net.Listener) <-chan error { } func (s *Server) shutdown(signalCh <-chan os.Signal) error { - s.logger.Info("Shutting down server", logger.DurationLiteral("timeout", s.ShutdownTimeout)) + s.log.Info("Shutting down server", logger.DurationLiteral("timeout", s.ShutdownTimeout)) // The shutdown needs to succeed in 20 seconds or less. ctx, cancel := context.WithTimeout(context.Background(), s.ShutdownTimeout) @@ -94,7 +91,7 @@ func (s *Server) shutdown(signalCh <-chan os.Signal) error { defer s.wg.Done() select { case <-signalCh: - s.logger.Info("Initializing hard shutdown") + s.log.Info("Initializing hard shutdown") cancel() case <-done: } @@ -135,13 +132,13 @@ func (s *Server) notifyOnSignals() (_ <-chan os.Signal, cancel func()) { // ListenAndServe is a convenience method for opening a listener using the address // and then serving the handler on that address. This method sets up the typical // signal handlers. -func ListenAndServe(addr string, handler http.Handler, logger *zap.Logger) error { +func ListenAndServe(log *zap.Logger, addr string, handler http.Handler) error { l, err := net.Listen("tcp", addr) if err != nil { return err } - server := NewServer(handler, logger) + server := NewServer(log, handler) server.ListenForSignals(os.Interrupt, syscall.SIGTERM) return server.Serve(l) } diff --git a/http/session_handler.go b/http/session_handler.go index de7edbb594..bce1752fd1 100644 --- a/http/session_handler.go +++ b/http/session_handler.go @@ -12,7 +12,7 @@ import ( // SessionBackend is all services and associated parameters required to construct // the SessionHandler. type SessionBackend struct { - Logger *zap.Logger + log *zap.Logger platform.HTTPErrorHandler PasswordsService platform.PasswordsService @@ -21,10 +21,10 @@ type SessionBackend struct { } // newSessionBackend creates a new SessionBackend with associated logger. -func newSessionBackend(b *APIBackend) *SessionBackend { +func newSessionBackend(log *zap.Logger, b *APIBackend) *SessionBackend { return &SessionBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "session")), + log: log, PasswordsService: b.PasswordsService, SessionService: b.SessionService, @@ -36,7 +36,7 @@ func newSessionBackend(b *APIBackend) *SessionBackend { type SessionHandler struct { *httprouter.Router platform.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger PasswordsService platform.PasswordsService SessionService platform.SessionService @@ -44,11 +44,11 @@ type SessionHandler struct { } // NewSessionHandler returns a new instance of SessionHandler. -func NewSessionHandler(b *SessionBackend) *SessionHandler { +func NewSessionHandler(log *zap.Logger, b *SessionBackend) *SessionHandler { h := &SessionHandler{ Router: NewRouter(b.HTTPErrorHandler), HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger, + log: log, PasswordsService: b.PasswordsService, SessionService: b.SessionService, diff --git a/http/session_test.go b/http/session_test.go index 1d1ad6b3bc..13c4de95fe 100644 --- a/http/session_test.go +++ b/http/session_test.go @@ -1,4 +1,4 @@ -package http_test +package http import ( "context" @@ -7,21 +7,19 @@ import ( "testing" "time" - "go.uber.org/zap" - platform "github.com/influxdata/influxdb" - platformhttp "github.com/influxdata/influxdb/http" "github.com/influxdata/influxdb/mock" + "go.uber.org/zap/zaptest" ) // NewMockSessionBackend returns a SessionBackend with mock services. -func NewMockSessionBackend() *platformhttp.SessionBackend { +func NewMockSessionBackend(t *testing.T) *SessionBackend { userSVC := mock.NewUserService() userSVC.FindUserFn = func(_ context.Context, f platform.UserFilter) (*platform.User, error) { return &platform.User{ID: 1}, nil } - return &platformhttp.SessionBackend{ - Logger: zap.NewNop(), + return &SessionBackend{ + log: zaptest.NewLogger(t), SessionService: mock.NewSessionService(), PasswordsService: mock.NewPasswordsService(), @@ -82,10 +80,10 @@ func TestSessionHandler_handleSignin(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - b := NewMockSessionBackend() + b := NewMockSessionBackend(t) b.PasswordsService = tt.fields.PasswordsService b.SessionService = tt.fields.SessionService - h := platformhttp.NewSessionHandler(b) + h := NewSessionHandler(zaptest.NewLogger(t), b) w := httptest.NewRecorder() r := httptest.NewRequest("POST", "http://localhost:9999/api/v2/signin", nil) diff --git a/http/source_service.go b/http/source_service.go index 183fe4b469..719bca8668 100644 --- a/http/source_service.go +++ b/http/source_service.go @@ -79,7 +79,7 @@ func newSourcesResponse(srcs []*platform.Source) *sourcesResponse { // the SourceHandler. type SourceBackend struct { platform.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger SourceService platform.SourceService LabelService platform.LabelService @@ -88,10 +88,10 @@ type SourceBackend struct { } // NewSourceBackend returns a new instance of SourceBackend. -func NewSourceBackend(b *APIBackend) *SourceBackend { +func NewSourceBackend(log *zap.Logger, b *APIBackend) *SourceBackend { return &SourceBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "source")), + log: log, SourceService: b.SourceService, LabelService: b.LabelService, @@ -104,7 +104,7 @@ func NewSourceBackend(b *APIBackend) *SourceBackend { type SourceHandler struct { *httprouter.Router platform.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger SourceService platform.SourceService LabelService platform.LabelService BucketService platform.BucketService @@ -115,11 +115,11 @@ type SourceHandler struct { } // NewSourceHandler returns a new instance of SourceHandler. -func NewSourceHandler(b *SourceBackend) *SourceHandler { +func NewSourceHandler(log *zap.Logger, b *SourceBackend) *SourceHandler { h := &SourceHandler{ Router: NewRouter(b.HTTPErrorHandler), HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger, + log: log, SourceService: b.SourceService, LabelService: b.LabelService, @@ -244,7 +244,7 @@ func (h *SourceHandler) handleGetSourcesBuckets(w http.ResponseWriter, r *http.R } if err := encodeResponse(ctx, w, http.StatusOK, newBucketsResponse(ctx, req.opts, req.filter, bs, h.LabelService)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -284,9 +284,9 @@ func (h *SourceHandler) handlePostSource(w http.ResponseWriter, r *http.Request) } res := newSourceResponse(req.Source) - h.Logger.Debug("source created", zap.String("source", fmt.Sprint(res))) + h.log.Debug("Source created", zap.String("source", fmt.Sprint(res))) if err := encodeResponse(ctx, w, http.StatusCreated, res); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -322,10 +322,10 @@ func (h *SourceHandler) handleGetSource(w http.ResponseWriter, r *http.Request) } res := newSourceResponse(s) - h.Logger.Debug("source retrieved", zap.String("source", fmt.Sprint(res))) + h.log.Debug("Source retrieved", zap.String("source", fmt.Sprint(res))) if err := encodeResponse(ctx, w, http.StatusOK, res); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -392,7 +392,7 @@ func (h *SourceHandler) handleDeleteSource(w http.ResponseWriter, r *http.Reques h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("source deleted", zap.String("sourceID", fmt.Sprint(req.SourceID))) + h.log.Debug("Source deleted", zap.String("sourceID", fmt.Sprint(req.SourceID))) w.WriteHeader(http.StatusNoContent) } @@ -438,10 +438,10 @@ func (h *SourceHandler) handleGetSources(w http.ResponseWriter, r *http.Request) } res := newSourcesResponse(srcs) - h.Logger.Debug("sources retrieved", zap.String("sources", fmt.Sprint(res))) + h.log.Debug("Sources retrieved", zap.String("sources", fmt.Sprint(res))) if err := encodeResponse(ctx, w, http.StatusOK, res); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -469,10 +469,10 @@ func (h *SourceHandler) handlePatchSource(w http.ResponseWriter, r *http.Request h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("source updated", zap.String("source", fmt.Sprint(b))) + h.log.Debug("Source updated", zap.String("source", fmt.Sprint(b))) if err := encodeResponse(ctx, w, http.StatusOK, b); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } diff --git a/http/swagger.go b/http/swagger.go index 524cfdf43f..e2185e6a1f 100644 --- a/http/swagger.go +++ b/http/swagger.go @@ -17,7 +17,7 @@ var _ http.Handler = (*swaggerLoader)(nil) // swaggerLoader manages loading the swagger asset and serving it as JSON. type swaggerLoader struct { influxdb.HTTPErrorHandler - logger *zap.Logger + log *zap.Logger // Ensure we only call initialize once. once sync.Once @@ -29,8 +29,11 @@ type swaggerLoader struct { loadErr error } -func newSwaggerLoader(logger *zap.Logger, h influxdb.HTTPErrorHandler) *swaggerLoader { - return &swaggerLoader{logger: logger, HTTPErrorHandler: h} +func newSwaggerLoader(log *zap.Logger, h influxdb.HTTPErrorHandler) *swaggerLoader { + return &swaggerLoader{ + log: log, + HTTPErrorHandler: h, + } } func (s *swaggerLoader) initialize() { diff --git a/http/swagger_noassets.go b/http/swagger_noassets.go index 00fb200230..c6dc5a7fe3 100644 --- a/http/swagger_noassets.go +++ b/http/swagger_noassets.go @@ -24,7 +24,7 @@ func (s *swaggerLoader) asset(swaggerData []byte, _ error) ([]byte, error) { return swaggerData, nil } - path := findSwaggerPath(s.logger) + path := findSwaggerPath(s.log) if path == "" { // Couldn't find it. return nil, errors.New("this developer binary not built with assets, and could not locate swagger.yml on disk") @@ -32,18 +32,18 @@ func (s *swaggerLoader) asset(swaggerData []byte, _ error) ([]byte, error) { b, err := ioutil.ReadFile(path) if err != nil { - s.logger.Info("Unable to load swagger.yml from disk", zap.String("path", path), zap.Error(err)) + s.log.Info("Unable to load swagger.yml from disk", zap.String("path", path), zap.Error(err)) return nil, errors.New("this developer binary not built with assets, and unable to load swagger.yml from disk") } - s.logger.Info("Successfully loaded swagger.yml", zap.String("path", path)) + s.log.Info("Successfully loaded swagger.yml", zap.String("path", path)) return b, nil } // findSwaggerPath makes a best-effort to find the path of the swagger file on disk. // If it can't find the path, it returns the empty string. -func findSwaggerPath(logger *zap.Logger) string { +func findSwaggerPath(log *zap.Logger) string { // First, look for environment variable pointing at swagger. path := os.Getenv("INFLUXDB_VALID_SWAGGER_PATH") if path != "" { @@ -51,13 +51,13 @@ func findSwaggerPath(logger *zap.Logger) string { return path } - logger.Info("INFLUXDB_VALID_SWAGGER_PATH not set; falling back to checking relative paths") + log.Info("INFLUXDB_VALID_SWAGGER_PATH not set; falling back to checking relative paths") // Get the path to the executable so we can do a relative lookup. execPath, err := os.Executable() if err != nil { // Give up. - logger.Info("Can't determine path of currently running executable", zap.Error(err)) + log.Info("Can't determine path of currently running executable", zap.Error(err)) return "" } @@ -87,6 +87,6 @@ func findSwaggerPath(logger *zap.Logger) string { } } - logger.Info("Couldn't guess path to swagger definition") + log.Info("Couldn't guess path to swagger definition") return "" } diff --git a/http/task_service.go b/http/task_service.go index 5abe75c9fc..52a7057dc2 100644 --- a/http/task_service.go +++ b/http/task_service.go @@ -26,7 +26,7 @@ import ( // the TaskHandler. type TaskBackend struct { influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger TaskService influxdb.TaskService AuthorizationService influxdb.AuthorizationService @@ -38,10 +38,10 @@ type TaskBackend struct { } // NewTaskBackend returns a new instance of TaskBackend. -func NewTaskBackend(b *APIBackend) *TaskBackend { +func NewTaskBackend(log *zap.Logger, b *APIBackend) *TaskBackend { return &TaskBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "task")), + log: log, TaskService: b.TaskService, AuthorizationService: b.AuthorizationService, OrganizationService: b.OrganizationService, @@ -56,7 +56,7 @@ func NewTaskBackend(b *APIBackend) *TaskBackend { type TaskHandler struct { *httprouter.Router influxdb.HTTPErrorHandler - logger *zap.Logger + log *zap.Logger TaskService influxdb.TaskService AuthorizationService influxdb.AuthorizationService @@ -84,11 +84,11 @@ const ( ) // NewTaskHandler returns a new instance of TaskHandler. -func NewTaskHandler(b *TaskBackend) *TaskHandler { +func NewTaskHandler(log *zap.Logger, b *TaskBackend) *TaskHandler { h := &TaskHandler{ Router: NewRouter(b.HTTPErrorHandler), HTTPErrorHandler: b.HTTPErrorHandler, - logger: b.Logger, + log: log, TaskService: b.TaskService, AuthorizationService: b.AuthorizationService, @@ -111,7 +111,7 @@ func NewTaskHandler(b *TaskBackend) *TaskHandler { memberBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: influxdb.TasksResourceType, UserType: influxdb.Member, UserResourceMappingService: b.UserResourceMappingService, @@ -123,7 +123,7 @@ func NewTaskHandler(b *TaskBackend) *TaskHandler { ownerBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: influxdb.TasksResourceType, UserType: influxdb.Owner, UserResourceMappingService: b.UserResourceMappingService, @@ -141,7 +141,7 @@ func NewTaskHandler(b *TaskBackend) *TaskHandler { labelBackend := &LabelBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "label")), + log: b.log.With(zap.String("handler", "label")), LabelService: b.LabelService, ResourceType: influxdb.TasksResourceType, } @@ -440,9 +440,9 @@ func (h *TaskHandler) handleGetTasks(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.logger.Debug("tasks retrived", zap.String("tasks", fmt.Sprint(tasks))) + h.log.Debug("Tasks retrived", zap.String("tasks", fmt.Sprint(tasks))) if err := encodeResponse(ctx, w, http.StatusOK, newTasksResponse(ctx, tasks, req.filter, h.LabelService)); err != nil { - logEncodingError(h.logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -566,7 +566,7 @@ func (h *TaskHandler) handlePostTask(w http.ResponseWriter, r *http.Request) { task, err := h.TaskService.CreateTask(ctx, req.TaskCreate) if err != nil { if e, ok := err.(AuthzError); ok { - h.logger.Error("failed authentication", zap.Errors("error messages", []error{err, e.AuthzError()})) + h.log.Error("Failed authentication", zap.Errors("error messages", []error{err, e.AuthzError()})) } // if the error is not already a influxdb.error then make it into one @@ -583,7 +583,7 @@ func (h *TaskHandler) handlePostTask(w http.ResponseWriter, r *http.Request) { } if err := encodeResponse(ctx, w, http.StatusCreated, newTaskResponse(*task, []*influxdb.Label{})); err != nil { - logEncodingError(h.logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -650,9 +650,9 @@ func (h *TaskHandler) handleGetTask(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.logger.Debug("task retrived", zap.String("tasks", fmt.Sprint(task))) + h.log.Debug("Task retrieved", zap.String("tasks", fmt.Sprint(task))) if err := encodeResponse(ctx, w, http.StatusOK, newTaskResponse(*task, labels)); err != nil { - logEncodingError(h.logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -717,9 +717,9 @@ func (h *TaskHandler) handleUpdateTask(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.logger.Debug("tasks updated", zap.String("task", fmt.Sprint(task))) + h.log.Debug("Tasks updated", zap.String("task", fmt.Sprint(task))) if err := encodeResponse(ctx, w, http.StatusOK, newTaskResponse(*task, labels)); err != nil { - logEncodingError(h.logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -783,7 +783,7 @@ func (h *TaskHandler) handleDeleteTask(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.logger.Debug("tasks deleted", zap.String("taskID", fmt.Sprint(req.TaskID))) + h.log.Debug("Tasks deleted", zap.String("taskID", fmt.Sprint(req.TaskID))) w.WriteHeader(http.StatusNoContent) } @@ -862,7 +862,7 @@ func (h *TaskHandler) handleGetLogs(w http.ResponseWriter, r *http.Request) { } if err := encodeResponse(ctx, w, http.StatusOK, &getLogsResponse{Events: logs}); err != nil { - logEncodingError(h.logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -954,7 +954,7 @@ func (h *TaskHandler) handleGetRuns(w http.ResponseWriter, r *http.Request) { } if err := encodeResponse(ctx, w, http.StatusOK, newRunsResponse(runs, req.filter.Task)); err != nil { - logEncodingError(h.logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -1057,7 +1057,7 @@ func (h *TaskHandler) handleForceRun(w http.ResponseWriter, r *http.Request) { return } if err := encodeResponse(ctx, w, http.StatusCreated, newRunResponse(*run)); err != nil { - logEncodingError(h.logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -1157,7 +1157,7 @@ func (h *TaskHandler) handleGetRun(w http.ResponseWriter, r *http.Request) { } if err := encodeResponse(ctx, w, http.StatusOK, newRunResponse(*run)); err != nil { - logEncodingError(h.logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -1313,7 +1313,7 @@ func (h *TaskHandler) handleRetryRun(w http.ResponseWriter, r *http.Request) { return } if err := encodeResponse(ctx, w, http.StatusOK, newRunResponse(*run)); err != nil { - logEncodingError(h.logger, r, err) + logEncodingError(h.log, r, err) return } } diff --git a/http/task_service_test.go b/http/task_service_test.go index b6849dded0..aab4b0e9d3 100644 --- a/http/task_service_test.go +++ b/http/task_service_test.go @@ -13,6 +13,7 @@ import ( "testing" "time" + "github.com/influxdata/httprouter" platform "github.com/influxdata/influxdb" pcontext "github.com/influxdata/influxdb/context" "github.com/influxdata/influxdb/inmem" @@ -20,7 +21,6 @@ import ( _ "github.com/influxdata/influxdb/query/builtin" "github.com/influxdata/influxdb/task/backend" platformtesting "github.com/influxdata/influxdb/testing" - "github.com/influxdata/httprouter" "go.uber.org/zap" "go.uber.org/zap/zaptest" ) @@ -28,7 +28,7 @@ import ( // NewMockTaskBackend returns a TaskBackend with mock services. func NewMockTaskBackend(t *testing.T) *TaskBackend { return &TaskBackend{ - Logger: zaptest.NewLogger(t).With(zap.String("handler", "task")), + log: zaptest.NewLogger(t).With(zap.String("handler", "task")), AuthorizationService: mock.NewAuthorizationService(), TaskService: &mock.TaskService{}, @@ -395,7 +395,7 @@ func TestTaskHandler_handleGetTasks(t *testing.T) { taskBackend.HTTPErrorHandler = ErrorHandler(0) taskBackend.TaskService = tt.fields.taskService taskBackend.LabelService = tt.fields.labelService - h := NewTaskHandler(taskBackend) + h := NewTaskHandler(zaptest.NewLogger(t), taskBackend) h.handleGetTasks(w, r) res := w.Result() @@ -561,7 +561,7 @@ func TestTaskHandler_handlePostTasks(t *testing.T) { taskBackend := NewMockTaskBackend(t) taskBackend.HTTPErrorHandler = ErrorHandler(0) taskBackend.TaskService = tt.fields.taskService - h := NewTaskHandler(taskBackend) + h := NewTaskHandler(zaptest.NewLogger(t), taskBackend) h.handlePostTask(w, r) res := w.Result() @@ -675,7 +675,7 @@ func TestTaskHandler_handleGetRun(t *testing.T) { taskBackend := NewMockTaskBackend(t) taskBackend.HTTPErrorHandler = ErrorHandler(0) taskBackend.TaskService = tt.fields.taskService - h := NewTaskHandler(taskBackend) + h := NewTaskHandler(zaptest.NewLogger(t), taskBackend) h.handleGetRun(w, r) res := w.Result() @@ -793,7 +793,7 @@ func TestTaskHandler_handleGetRuns(t *testing.T) { taskBackend := NewMockTaskBackend(t) taskBackend.HTTPErrorHandler = ErrorHandler(0) taskBackend.TaskService = tt.fields.taskService - h := NewTaskHandler(taskBackend) + h := NewTaskHandler(zaptest.NewLogger(t), taskBackend) h.handleGetRuns(w, r) res := w.Result() @@ -823,7 +823,7 @@ func TestTaskHandler_NotFoundStatus(t *testing.T) { im := inmem.NewService() taskBackend := NewMockTaskBackend(t) taskBackend.HTTPErrorHandler = ErrorHandler(0) - h := NewTaskHandler(taskBackend) + h := NewTaskHandler(zaptest.NewLogger(t), taskBackend) h.UserResourceMappingService = im h.LabelService = im h.UserService = im @@ -1173,7 +1173,7 @@ func TestService_handlePostTaskLabel(t *testing.T) { t.Run(tt.name, func(t *testing.T) { taskBE := NewMockTaskBackend(t) taskBE.LabelService = tt.fields.LabelService - h := NewTaskHandler(taskBE) + h := NewTaskHandler(zaptest.NewLogger(t), taskBE) b, err := json.Marshal(tt.args.labelMapping) if err != nil { @@ -1248,8 +1248,8 @@ func TestTaskHandler_CreateTaskWithOrgName(t *testing.T) { }, } - h := NewTaskHandler(&TaskBackend{ - Logger: zaptest.NewLogger(t), + h := NewTaskHandler(zaptest.NewLogger(t), &TaskBackend{ + log: zaptest.NewLogger(t), TaskService: ts, AuthorizationService: i, @@ -1344,9 +1344,9 @@ func TestTaskHandler_Sessions(t *testing.T) { }) newHandler := func(t *testing.T, ts *mock.TaskService) *TaskHandler { - return NewTaskHandler(&TaskBackend{ + return NewTaskHandler(zaptest.NewLogger(t), &TaskBackend{ HTTPErrorHandler: ErrorHandler(0), - Logger: zaptest.NewLogger(t), + log: zaptest.NewLogger(t), TaskService: ts, AuthorizationService: i, diff --git a/http/telegraf.go b/http/telegraf.go index de78827439..37fd03a23e 100644 --- a/http/telegraf.go +++ b/http/telegraf.go @@ -23,7 +23,7 @@ import ( // the TelegrafHandler. type TelegrafBackend struct { platform.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger TelegrafService platform.TelegrafConfigStore UserResourceMappingService platform.UserResourceMappingService @@ -33,10 +33,10 @@ type TelegrafBackend struct { } // NewTelegrafBackend returns a new instance of TelegrafBackend. -func NewTelegrafBackend(b *APIBackend) *TelegrafBackend { +func NewTelegrafBackend(log *zap.Logger, b *APIBackend) *TelegrafBackend { return &TelegrafBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "telegraf")), + log: log, TelegrafService: b.TelegrafService, UserResourceMappingService: b.UserResourceMappingService, @@ -50,7 +50,7 @@ func NewTelegrafBackend(b *APIBackend) *TelegrafBackend { type TelegrafHandler struct { *httprouter.Router platform.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger TelegrafService platform.TelegrafConfigStore UserResourceMappingService platform.UserResourceMappingService @@ -71,11 +71,11 @@ const ( ) // NewTelegrafHandler returns a new instance of TelegrafHandler. -func NewTelegrafHandler(b *TelegrafBackend) *TelegrafHandler { +func NewTelegrafHandler(log *zap.Logger, b *TelegrafBackend) *TelegrafHandler { h := &TelegrafHandler{ Router: NewRouter(b.HTTPErrorHandler), HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger, + log: log, TelegrafService: b.TelegrafService, UserResourceMappingService: b.UserResourceMappingService, @@ -91,7 +91,7 @@ func NewTelegrafHandler(b *TelegrafBackend) *TelegrafHandler { memberBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: platform.TelegrafsResourceType, UserType: platform.Member, UserResourceMappingService: b.UserResourceMappingService, @@ -103,7 +103,7 @@ func NewTelegrafHandler(b *TelegrafBackend) *TelegrafHandler { ownerBackend := MemberBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "member")), + log: b.log.With(zap.String("handler", "member")), ResourceType: platform.TelegrafsResourceType, UserType: platform.Owner, UserResourceMappingService: b.UserResourceMappingService, @@ -115,7 +115,7 @@ func NewTelegrafHandler(b *TelegrafBackend) *TelegrafHandler { labelBackend := &LabelBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "label")), + log: b.log.With(zap.String("handler", "label")), LabelService: b.LabelService, ResourceType: platform.TelegrafsResourceType, } @@ -242,7 +242,7 @@ func (h *TelegrafHandler) handleGetTelegrafs(w http.ResponseWriter, r *http.Requ ctx := r.Context() filter, err := decodeTelegrafConfigFilter(ctx, r) if err != nil { - h.Logger.Debug("failed to decode request", zap.Error(err)) + h.log.Debug("Failed to decode request", zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -251,10 +251,10 @@ func (h *TelegrafHandler) handleGetTelegrafs(w http.ResponseWriter, r *http.Requ h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("telegrafs retrieved", zap.String("telegrafs", fmt.Sprint(tcs))) + h.log.Debug("Telegrafs retrieved", zap.String("telegrafs", fmt.Sprint(tcs))) if err := encodeResponse(ctx, w, http.StatusOK, newTelegrafResponses(ctx, tcs, h.LabelService)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -271,7 +271,7 @@ func (h *TelegrafHandler) handleGetTelegraf(w http.ResponseWriter, r *http.Reque h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("telegraf retrieved", zap.String("telegraf", fmt.Sprint(tc))) + h.log.Debug("Telegraf retrieved", zap.String("telegraf", fmt.Sprint(tc))) offers := []string{"application/toml", "application/json", "application/octet-stream"} defaultOffer := "application/toml" @@ -290,7 +290,7 @@ func (h *TelegrafHandler) handleGetTelegraf(w http.ResponseWriter, r *http.Reque } if err := encodeResponse(ctx, w, http.StatusOK, newTelegrafResponse(tc, labels)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } case "application/toml": @@ -356,7 +356,7 @@ func (h *TelegrafHandler) handlePostTelegraf(w http.ResponseWriter, r *http.Requ ctx := r.Context() tc, err := decodePostTelegrafRequest(r) if err != nil { - h.Logger.Debug("failed to decode request", zap.Error(err)) + h.log.Debug("Failed to decode request", zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -370,10 +370,10 @@ func (h *TelegrafHandler) handlePostTelegraf(w http.ResponseWriter, r *http.Requ h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("telegraf created", zap.String("telegraf", fmt.Sprint(tc))) + h.log.Debug("Telegraf created", zap.String("telegraf", fmt.Sprint(tc))) if err := encodeResponse(ctx, w, http.StatusCreated, newTelegrafResponse(tc, []*platform.Label{})); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -383,7 +383,7 @@ func (h *TelegrafHandler) handlePutTelegraf(w http.ResponseWriter, r *http.Reque ctx := r.Context() tc, err := decodePutTelegrafRequest(ctx, r) if err != nil { - h.Logger.Debug("failed to decode request", zap.Error(err)) + h.log.Debug("Failed to decode request", zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -404,10 +404,10 @@ func (h *TelegrafHandler) handlePutTelegraf(w http.ResponseWriter, r *http.Reque h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("telegraf updated", zap.String("telegraf", fmt.Sprint(tc))) + h.log.Debug("Telegraf updated", zap.String("telegraf", fmt.Sprint(tc))) if err := encodeResponse(ctx, w, http.StatusOK, newTelegrafResponse(tc, labels)); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -424,7 +424,7 @@ func (h *TelegrafHandler) handleDeleteTelegraf(w http.ResponseWriter, r *http.Re h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("telegraf deleted", zap.String("telegrafID", fmt.Sprint(i))) + h.log.Debug("Telegraf deleted", zap.String("telegrafID", fmt.Sprint(i))) w.WriteHeader(http.StatusNoContent) } diff --git a/http/telegraf_test.go b/http/telegraf_test.go index 1264f0a8ea..190a77ca41 100644 --- a/http/telegraf_test.go +++ b/http/telegraf_test.go @@ -10,18 +10,17 @@ 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 { +func NewMockTelegrafBackend(t *testing.T) *TelegrafBackend { return &TelegrafBackend{ - Logger: zap.NewNop().With(zap.String("handler", "telegraf")), + log: zaptest.NewLogger(t), TelegrafService: &mock.TelegrafConfigStore{}, UserResourceMappingService: mock.NewUserResourceMappingService(), @@ -186,9 +185,9 @@ func TestTelegrafHandler_handleGetTelegrafs(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { w := httptest.NewRecorder() - telegrafBackend := NewMockTelegrafBackend() + telegrafBackend := NewMockTelegrafBackend(t) telegrafBackend.TelegrafService = tt.svc - h := NewTelegrafHandler(telegrafBackend) + h := NewTelegrafHandler(zaptest.NewLogger(t), telegrafBackend) h.ServeHTTP(w, tt.r) res := w.Result() @@ -726,9 +725,9 @@ func TestTelegrafHandler_handleGetTelegraf(t *testing.T) { t.Run(tt.name, func(t *testing.T) { tt.r.Header.Set("Accept", tt.acceptHeader) w := httptest.NewRecorder() - telegrafBackend := NewMockTelegrafBackend() + telegrafBackend := NewMockTelegrafBackend(t) telegrafBackend.TelegrafService = tt.svc - h := NewTelegrafHandler(telegrafBackend) + h := NewTelegrafHandler(zaptest.NewLogger(t), telegrafBackend) h.ServeHTTP(w, tt.r) diff --git a/http/usage_service.go b/http/usage_service.go index f24539b665..b9334bc2bf 100644 --- a/http/usage_service.go +++ b/http/usage_service.go @@ -15,16 +15,16 @@ import ( type UsageHandler struct { *httprouter.Router platform.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger UsageService platform.UsageService } // NewUsageHandler returns a new instance of UsageHandler. -func NewUsageHandler(he platform.HTTPErrorHandler) *UsageHandler { +func NewUsageHandler(log *zap.Logger, he platform.HTTPErrorHandler) *UsageHandler { h := &UsageHandler{ Router: NewRouter(he), - Logger: zap.NewNop(), + log: log, } h.HandlerFunc("GET", "/api/v2/usage", h.handleGetUsage) @@ -48,7 +48,7 @@ func (h *UsageHandler) handleGetUsage(w http.ResponseWriter, r *http.Request) { } if err := encodeResponse(ctx, w, http.StatusOK, b); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } diff --git a/http/user_resource_mapping_service.go b/http/user_resource_mapping_service.go index 1da5d72aa8..34d6d2a37d 100644 --- a/http/user_resource_mapping_service.go +++ b/http/user_resource_mapping_service.go @@ -56,7 +56,7 @@ func newResourceUsersResponse(opts influxdb.FindOptions, f influxdb.UserResource // member handler. type MemberBackend struct { influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger ResourceType influxdb.ResourceType UserType influxdb.UserType @@ -92,7 +92,7 @@ func newPostMemberHandler(b MemberBackend) http.HandlerFunc { b.HandleHTTPError(ctx, err, w) return } - b.Logger.Debug("member/owner created", zap.String("mapping", fmt.Sprint(mapping))) + b.log.Debug("Member/owner created", zap.String("mapping", fmt.Sprint(mapping))) if err := encodeResponse(ctx, w, http.StatusCreated, newResourceUserResponse(user, b.UserType)); err != nil { b.HandleHTTPError(ctx, err, w) @@ -175,7 +175,7 @@ func newGetMembersHandler(b MemberBackend) http.HandlerFunc { users = append(users, user) } - b.Logger.Debug("members/owners retrieved", zap.String("users", fmt.Sprint(users))) + b.log.Debug("Members/owners retrieved", zap.String("users", fmt.Sprint(users))) if err := encodeResponse(ctx, w, http.StatusOK, newResourceUsersResponse(opts, filter, users)); err != nil { b.HandleHTTPError(ctx, err, w) @@ -225,7 +225,7 @@ func newDeleteMemberHandler(b MemberBackend) http.HandlerFunc { b.HandleHTTPError(ctx, err, w) return } - b.Logger.Debug("member deleted", zap.String("resourceID", req.ResourceID.String()), zap.String("memberID", req.MemberID.String())) + b.log.Debug("Member deleted", zap.String("resourceID", req.ResourceID.String()), zap.String("memberID", req.MemberID.String())) w.WriteHeader(http.StatusNoContent) } diff --git a/http/user_resource_mapping_test.go b/http/user_resource_mapping_test.go index 64d3aa4d92..cda2016532 100644 --- a/http/user_resource_mapping_test.go +++ b/http/user_resource_mapping_test.go @@ -10,11 +10,10 @@ import ( "net/http/httptest" "testing" - "go.uber.org/zap" - + "github.com/influxdata/httprouter" platform "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/mock" - "github.com/influxdata/httprouter" + "go.uber.org/zap/zaptest" ) func TestUserResourceMappingService_GetMembersHandler(t *testing.T) { @@ -197,7 +196,7 @@ func TestUserResourceMappingService_GetMembersHandler(t *testing.T) { w := httptest.NewRecorder() memberBackend := MemberBackend{ - Logger: zap.NewNop().With(zap.String("handler", "member")), + log: zaptest.NewLogger(t), ResourceType: resourceType, UserType: tt.args.userType, UserResourceMappingService: tt.fields.userResourceMappingService, @@ -358,7 +357,7 @@ func TestUserResourceMappingService_PostMembersHandler(t *testing.T) { w := httptest.NewRecorder() memberBackend := MemberBackend{ - Logger: zap.NewNop().With(zap.String("handler", "member")), + log: zaptest.NewLogger(t), ResourceType: resourceType, UserType: tt.args.userType, UserResourceMappingService: tt.fields.userResourceMappingService, diff --git a/http/user_service.go b/http/user_service.go index 841287da9b..d2f6254ca2 100644 --- a/http/user_service.go +++ b/http/user_service.go @@ -18,17 +18,17 @@ import ( // the UserHandler. type UserBackend struct { influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger UserService influxdb.UserService UserOperationLogService influxdb.UserOperationLogService PasswordsService influxdb.PasswordsService } // NewUserBackend creates a UserBackend using information in the APIBackend. -func NewUserBackend(b *APIBackend) *UserBackend { +func NewUserBackend(log *zap.Logger, b *APIBackend) *UserBackend { return &UserBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "user")), + log: log, UserService: b.UserService, UserOperationLogService: b.UserOperationLogService, PasswordsService: b.PasswordsService, @@ -39,7 +39,7 @@ func NewUserBackend(b *APIBackend) *UserBackend { type UserHandler struct { *httprouter.Router influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger UserService influxdb.UserService UserOperationLogService influxdb.UserOperationLogService PasswordsService influxdb.PasswordsService @@ -55,11 +55,11 @@ const ( ) // NewUserHandler returns a new instance of UserHandler. -func NewUserHandler(b *UserBackend) *UserHandler { +func NewUserHandler(log *zap.Logger, b *UserBackend) *UserHandler { h := &UserHandler{ Router: NewRouter(b.HTTPErrorHandler), HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger, + log: log, UserService: b.UserService, UserOperationLogService: b.UserOperationLogService, @@ -148,7 +148,7 @@ func (h *UserHandler) handlePutUserPassword(w http.ResponseWriter, r *http.Reque h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("user password updated") + h.log.Debug("User password updated") w.WriteHeader(http.StatusNoContent) } @@ -201,7 +201,7 @@ func (h *UserHandler) handlePostUser(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("user created", zap.String("user", fmt.Sprint(req.User))) + h.log.Debug("User created", zap.String("user", fmt.Sprint(req.User))) if err := encodeResponse(ctx, w, http.StatusCreated, newUserResponse(req.User)); err != nil { h.HandleHTTPError(ctx, err, w) @@ -261,7 +261,7 @@ func (h *UserHandler) handleGetUser(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("user retrieved", zap.String("user", fmt.Sprint(b))) + h.log.Debug("User retrieved", zap.String("user", fmt.Sprint(b))) if err := encodeResponse(ctx, w, http.StatusOK, newUserResponse(b)); err != nil { h.HandleHTTPError(ctx, err, w) @@ -308,7 +308,7 @@ func (h *UserHandler) handleDeleteUser(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("user deleted", zap.String("userID", fmt.Sprint(req.UserID))) + h.log.Debug("User deleted", zap.String("userID", fmt.Sprint(req.UserID))) w.WriteHeader(http.StatusNoContent) } @@ -393,7 +393,7 @@ func (h *UserHandler) handleGetUsers(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("users retrieved", zap.String("users", fmt.Sprint(users))) + h.log.Debug("Users retrieved", zap.String("users", fmt.Sprint(users))) err = encodeResponse(ctx, w, http.StatusOK, newUsersResponse(users)) if err != nil { @@ -439,7 +439,7 @@ func (h *UserHandler) handlePatchUser(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("users updated", zap.String("user", fmt.Sprint(b))) + h.log.Debug("Users updated", zap.String("user", fmt.Sprint(b))) if err := encodeResponse(ctx, w, http.StatusOK, newUserResponse(b)); err != nil { h.HandleHTTPError(ctx, err, w) @@ -747,7 +747,7 @@ func (h *UserHandler) handleGetUserLog(w http.ResponseWriter, r *http.Request) { h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("user log retrieved", zap.String("log", fmt.Sprint(log))) + h.log.Debug("User log retrieved", zap.String("log", fmt.Sprint(log))) if err := encodeResponse(ctx, w, http.StatusOK, newUserLogResponse(req.UserID, log)); err != nil { h.HandleHTTPError(ctx, err, w) diff --git a/http/user_test.go b/http/user_test.go index 08c870c02a..a55c0437e1 100644 --- a/http/user_test.go +++ b/http/user_test.go @@ -10,21 +10,19 @@ import ( "path" "testing" - "github.com/stretchr/testify/require" - - "github.com/influxdata/influxdb/pkg/testttp" - platform "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/inmem" "github.com/influxdata/influxdb/mock" + "github.com/influxdata/influxdb/pkg/testttp" platformtesting "github.com/influxdata/influxdb/testing" - "go.uber.org/zap" + "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" ) // NewMockUserBackend returns a UserBackend with mock services. -func NewMockUserBackend() *UserBackend { +func NewMockUserBackend(t *testing.T) *UserBackend { return &UserBackend{ - Logger: zap.NewNop(), + log: zaptest.NewLogger(t), UserService: mock.NewUserService(), UserOperationLogService: mock.NewUserOperationLogService(), PasswordsService: mock.NewPasswordsService(), @@ -44,10 +42,10 @@ func initUserService(f platformtesting.UserFields, t *testing.T) (platform.UserS } } - userBackend := NewMockUserBackend() + userBackend := NewMockUserBackend(t) userBackend.HTTPErrorHandler = ErrorHandler(0) userBackend.UserService = svc - handler := NewUserHandler(userBackend) + handler := NewUserHandler(zaptest.NewLogger(t), userBackend) server := httptest.NewServer(handler) client := UserService{ Addr: server.URL, @@ -65,7 +63,7 @@ func TestUserService(t *testing.T) { } func TestUserHandler_SettingPassword(t *testing.T) { - be := NewMockUserBackend() + be := NewMockUserBackend(t) fakePassSVC := mock.NewPasswordsService() userID := platform.ID(1) @@ -80,7 +78,7 @@ func TestUserHandler_SettingPassword(t *testing.T) { } be.PasswordsService = fakePassSVC - h := NewUserHandler(be) + h := NewUserHandler(zaptest.NewLogger(t), be) body := newReqBody(t, passwordSetRequest{Password: "newpassword"}) addr := path.Join("/api/v2/users", userID.String(), "/password") diff --git a/http/variable_service.go b/http/variable_service.go index 037939214d..f8e926bb33 100644 --- a/http/variable_service.go +++ b/http/variable_service.go @@ -21,16 +21,16 @@ const ( // the VariableHandler. type VariableBackend struct { platform.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger VariableService platform.VariableService LabelService platform.LabelService } // NewVariableBackend creates a backend used by the variable handler. -func NewVariableBackend(b *APIBackend) *VariableBackend { +func NewVariableBackend(log *zap.Logger, b *APIBackend) *VariableBackend { return &VariableBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "variable")), + log: log, VariableService: b.VariableService, LabelService: b.LabelService, } @@ -41,18 +41,18 @@ type VariableHandler struct { *httprouter.Router platform.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger VariableService platform.VariableService LabelService platform.LabelService } // NewVariableHandler creates a new VariableHandler -func NewVariableHandler(b *VariableBackend) *VariableHandler { +func NewVariableHandler(log *zap.Logger, b *VariableBackend) *VariableHandler { h := &VariableHandler{ Router: NewRouter(b.HTTPErrorHandler), HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger, + log: log, VariableService: b.VariableService, LabelService: b.LabelService, @@ -71,7 +71,7 @@ func NewVariableHandler(b *VariableBackend) *VariableHandler { labelBackend := &LabelBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "label")), + log: b.log.With(zap.String("handler", "label")), LabelService: b.LabelService, ResourceType: platform.DashboardsResourceType, } @@ -158,10 +158,10 @@ func (h *VariableHandler) handleGetVariables(w http.ResponseWriter, r *http.Requ }, w) return } - h.Logger.Debug("variables retrieved", zap.String("vars", fmt.Sprint(variables))) + h.log.Debug("Variables retrieved", zap.String("vars", fmt.Sprint(variables))) err = encodeResponse(ctx, w, http.StatusOK, newGetVariablesResponse(ctx, variables, req.filter, req.opts, h.LabelService)) if err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -203,10 +203,10 @@ func (h *VariableHandler) handleGetVariable(w http.ResponseWriter, r *http.Reque h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("variable retrieved", zap.String("var", fmt.Sprint(variable))) + h.log.Debug("Variable retrieved", zap.String("var", fmt.Sprint(variable))) err = encodeResponse(ctx, w, http.StatusOK, newVariableResponse(variable, labels)) if err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -253,9 +253,9 @@ func (h *VariableHandler) handlePostVariable(w http.ResponseWriter, r *http.Requ h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("variable created", zap.String("var", fmt.Sprint(req.variable))) + h.log.Debug("Variable created", zap.String("var", fmt.Sprint(req.variable))) if err := encodeResponse(ctx, w, http.StatusCreated, newVariableResponse(req.variable, []*platform.Label{})); err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -312,10 +312,10 @@ func (h *VariableHandler) handlePatchVariable(w http.ResponseWriter, r *http.Req h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("variable updated", zap.String("var", fmt.Sprint(variable))) + h.log.Debug("Variable updated", zap.String("var", fmt.Sprint(variable))) err = encodeResponse(ctx, w, http.StatusOK, newVariableResponse(variable, labels)) if err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -379,10 +379,10 @@ func (h *VariableHandler) handlePutVariable(w http.ResponseWriter, r *http.Reque h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("variable replaced", zap.String("var", fmt.Sprint(req.variable))) + h.log.Debug("Variable replaced", zap.String("var", fmt.Sprint(req.variable))) err = encodeResponse(ctx, w, http.StatusOK, newVariableResponse(req.variable, labels)) if err != nil { - logEncodingError(h.Logger, r, err) + logEncodingError(h.log, r, err) return } } @@ -433,7 +433,7 @@ func (h *VariableHandler) handleDeleteVariable(w http.ResponseWriter, r *http.Re h.HandleHTTPError(ctx, err, w) return } - h.Logger.Debug("variable deleted", zap.String("variableID", fmt.Sprint(id))) + h.log.Debug("Variable deleted", zap.String("variableID", fmt.Sprint(id))) w.WriteHeader(http.StatusNoContent) } diff --git a/http/variable_test.go b/http/variable_test.go index 616f2346f4..b3fdff828d 100644 --- a/http/variable_test.go +++ b/http/variable_test.go @@ -11,20 +11,19 @@ import ( "testing" "time" - "go.uber.org/zap" - + "github.com/influxdata/httprouter" platform "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/mock" platformtesting "github.com/influxdata/influxdb/testing" - "github.com/influxdata/httprouter" + "go.uber.org/zap/zaptest" ) var faketime = time.Date(2006, 5, 4, 1, 2, 3, 0, time.UTC) // NewMockVariableBackend returns a VariableBackend with mock services. -func NewMockVariableBackend() *VariableBackend { +func NewMockVariableBackend(t *testing.T) *VariableBackend { return &VariableBackend{ - Logger: zap.NewNop().With(zap.String("handler", "variable")), + log: zaptest.NewLogger(t), VariableService: mock.NewVariableService(), LabelService: mock.NewLabelService(), } @@ -294,11 +293,11 @@ func TestVariableService_handleGetVariables(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - variableBackend := NewMockVariableBackend() + variableBackend := NewMockVariableBackend(t) variableBackend.HTTPErrorHandler = ErrorHandler(0) variableBackend.LabelService = tt.fields.LabelService variableBackend.VariableService = tt.fields.VariableService - h := NewVariableHandler(variableBackend) + h := NewVariableHandler(zaptest.NewLogger(t), variableBackend) r := httptest.NewRequest("GET", "http://howdy.tld", nil) @@ -426,10 +425,10 @@ func TestVariableService_handleGetVariable(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - variableBackend := NewMockVariableBackend() + variableBackend := NewMockVariableBackend(t) variableBackend.HTTPErrorHandler = ErrorHandler(0) variableBackend.VariableService = tt.fields.VariableService - h := NewVariableHandler(variableBackend) + h := NewVariableHandler(zaptest.NewLogger(t), variableBackend) r := httptest.NewRequest("GET", "http://howdy.tld", nil) r = r.WithContext(context.WithValue( context.TODO(), @@ -565,10 +564,10 @@ func TestVariableService_handlePostVariable(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - variableBackend := NewMockVariableBackend() + variableBackend := NewMockVariableBackend(t) variableBackend.HTTPErrorHandler = ErrorHandler(0) variableBackend.VariableService = tt.fields.VariableService - h := NewVariableHandler(variableBackend) + h := NewVariableHandler(zaptest.NewLogger(t), variableBackend) r := httptest.NewRequest("GET", "http://howdy.tld", bytes.NewReader([]byte(tt.args.variable))) w := httptest.NewRecorder() @@ -665,10 +664,10 @@ func TestVariableService_handlePatchVariable(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - variableBackend := NewMockVariableBackend() + variableBackend := NewMockVariableBackend(t) variableBackend.HTTPErrorHandler = ErrorHandler(0) variableBackend.VariableService = tt.fields.VariableService - h := NewVariableHandler(variableBackend) + h := NewVariableHandler(zaptest.NewLogger(t), variableBackend) r := httptest.NewRequest("GET", "http://howdy.tld", bytes.NewReader([]byte(tt.args.update))) r = r.WithContext(context.WithValue( context.TODO(), @@ -759,10 +758,10 @@ func TestVariableService_handleDeleteVariable(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - variableBackend := NewMockVariableBackend() + variableBackend := NewMockVariableBackend(t) variableBackend.HTTPErrorHandler = ErrorHandler(0) variableBackend.VariableService = tt.fields.VariableService - h := NewVariableHandler(variableBackend) + h := NewVariableHandler(zaptest.NewLogger(t), variableBackend) r := httptest.NewRequest("GET", "http://howdy.tld", nil) r = r.WithContext(context.WithValue( context.TODO(), @@ -852,10 +851,10 @@ func TestService_handlePostVariableLabel(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - variableBackend := NewMockVariableBackend() + variableBackend := NewMockVariableBackend(t) variableBackend.HTTPErrorHandler = ErrorHandler(0) variableBackend.LabelService = tt.fields.LabelService - h := NewVariableHandler(variableBackend) + h := NewVariableHandler(zaptest.NewLogger(t), variableBackend) b, err := json.Marshal(tt.args.labelMapping) if err != nil { diff --git a/http/write_handler.go b/http/write_handler.go index 1f05c443f3..d23bb09a8e 100644 --- a/http/write_handler.go +++ b/http/write_handler.go @@ -25,7 +25,7 @@ import ( // the WriteHandler. type WriteBackend struct { influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger WriteEventRecorder metric.EventRecorder PointsWriter storage.PointsWriter @@ -34,10 +34,10 @@ type WriteBackend struct { } // NewWriteBackend returns a new instance of WriteBackend. -func NewWriteBackend(b *APIBackend) *WriteBackend { +func NewWriteBackend(log *zap.Logger, b *APIBackend) *WriteBackend { return &WriteBackend{ HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger.With(zap.String("handler", "write")), + log: log, WriteEventRecorder: b.WriteEventRecorder, PointsWriter: b.PointsWriter, @@ -50,7 +50,7 @@ func NewWriteBackend(b *APIBackend) *WriteBackend { type WriteHandler struct { *httprouter.Router influxdb.HTTPErrorHandler - Logger *zap.Logger + log *zap.Logger BucketService influxdb.BucketService OrganizationService influxdb.OrganizationService @@ -67,11 +67,11 @@ const ( ) // NewWriteHandler creates a new handler at /api/v2/write to receive line protocol. -func NewWriteHandler(b *WriteBackend) *WriteHandler { +func NewWriteHandler(log *zap.Logger, b *WriteBackend) *WriteHandler { h := &WriteHandler{ Router: NewRouter(b.HTTPErrorHandler), HTTPErrorHandler: b.HTTPErrorHandler, - Logger: b.Logger, + log: log, PointsWriter: b.PointsWriter, BucketService: b.BucketService, @@ -134,12 +134,12 @@ func (h *WriteHandler) handleWrite(w http.ResponseWriter, r *http.Request) { return } - logger := h.Logger.With(zap.String("org", req.Org), zap.String("bucket", req.Bucket)) + log := h.log.With(zap.String("org", req.Org), zap.String("bucket", req.Bucket)) var org *influxdb.Organization org, err = queryOrganization(ctx, r, h.OrganizationService) if err != nil { - logger.Info("Failed to find organization", zap.Error(err)) + log.Info("Failed to find organization", zap.Error(err)) h.HandleHTTPError(ctx, err, w) return } @@ -204,7 +204,7 @@ func (h *WriteHandler) handleWrite(w http.ResponseWriter, r *http.Request) { span.LogKV("request_bytes", len(data)) span.Finish() if err != nil { - logger.Error("Error reading body", zap.Error(err)) + log.Error("Error reading body", zap.Error(err)) h.HandleHTTPError(ctx, &influxdb.Error{ Code: influxdb.EInternal, Op: "http/handleWrite", @@ -231,7 +231,7 @@ func (h *WriteHandler) handleWrite(w http.ResponseWriter, r *http.Request) { span.LogKV("values_total", len(points)) span.Finish() if err != nil { - logger.Error("Error parsing points", zap.Error(err)) + log.Error("Error parsing points", zap.Error(err)) h.HandleHTTPError(ctx, &influxdb.Error{ Code: influxdb.EInvalid, Msg: err.Error(), @@ -240,7 +240,7 @@ func (h *WriteHandler) handleWrite(w http.ResponseWriter, r *http.Request) { } if err := h.PointsWriter.WritePoints(ctx, points); err != nil { - logger.Error("Error writing points", zap.Error(err)) + log.Error("Error writing points", zap.Error(err)) h.HandleHTTPError(ctx, &influxdb.Error{ Code: influxdb.EInternal, Op: "http/handleWrite", diff --git a/http/write_handler_test.go b/http/write_handler_test.go index 4cd659167f..cae33ed7a1 100644 --- a/http/write_handler_test.go +++ b/http/write_handler_test.go @@ -275,7 +275,7 @@ func TestWriteHandler_handleWrite(t *testing.T) { PointsWriter: &mock.PointsWriter{Err: tt.state.writeErr}, WriteEventRecorder: &metric.NopEventRecorder{}, } - writeHandler := NewWriteHandler(NewWriteBackend(b)) + writeHandler := NewWriteHandler(zaptest.NewLogger(t), NewWriteBackend(zaptest.NewLogger(t), b)) handler := httpmock.NewAuthMiddlewareHandler(writeHandler, tt.request.auth) r := httptest.NewRequest( diff --git a/inmem/task_test.go b/inmem/task_test.go index 3fe769f8f5..ff324e3798 100644 --- a/inmem/task_test.go +++ b/inmem/task_test.go @@ -9,6 +9,7 @@ import ( "github.com/influxdata/influxdb/inmem" "github.com/influxdata/influxdb/kv" "github.com/influxdata/influxdb/snowflake" + "go.uber.org/zap/zaptest" ) var ( @@ -28,7 +29,7 @@ func BenchmarkFindTaskByID_CursorHints(b *testing.B) { return nil }) - s := kv.NewService(kvs) + s := kv.NewService(zaptest.NewLogger(b), kvs) _ = s.Initialize(ctx) b.ResetTimer() diff --git a/inmem/user_test.go b/inmem/user_test.go index 4595239a1e..226cd831d3 100644 --- a/inmem/user_test.go +++ b/inmem/user_test.go @@ -7,11 +7,12 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func initUserService(f influxdbtesting.UserFields, t *testing.T) (influxdb.UserService, string, func()) { s := NewKVStore() - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) svc.IDGenerator = f.IDGenerator ctx := context.Background() if err := svc.Initialize(ctx); err != nil { diff --git a/kit/prom/example_test.go b/kit/prom/example_test.go index f955d00197..51a6d77a13 100644 --- a/kit/prom/example_test.go +++ b/kit/prom/example_test.go @@ -9,6 +9,7 @@ import ( "github.com/influxdata/influxdb/kit/prom" "github.com/prometheus/client_golang/prometheus" + "go.uber.org/zap" ) // RandomHandler implements an HTTP endpoint that prints a random float, @@ -66,7 +67,7 @@ func Example() { } // Use a local registry, not the global registry in the prometheus package. - reg := prom.NewRegistry() + reg := prom.NewRegistry(zap.NewNop()) // Build the mux out of handlers from above. mux := http.NewServeMux() diff --git a/kit/prom/promtest/promtest_test.go b/kit/prom/promtest/promtest_test.go index 70e29de4e9..7954fa410a 100644 --- a/kit/prom/promtest/promtest_test.go +++ b/kit/prom/promtest/promtest_test.go @@ -13,6 +13,7 @@ import ( "github.com/influxdata/influxdb/kit/prom/promtest" "github.com/prometheus/client_golang/prometheus" dto "github.com/prometheus/client_model/go" + "go.uber.org/zap/zaptest" ) func helperCollectors() []prometheus.Collector { @@ -36,7 +37,7 @@ func helperCollectors() []prometheus.Collector { } func TestFindMetric(t *testing.T) { - reg := prom.NewRegistry() + reg := prom.NewRegistry(zaptest.NewLogger(t)) reg.MustRegister(helperCollectors()...) mfs, err := reg.Gather() @@ -88,7 +89,7 @@ func (t *fakeT) Fatalf(format string, args ...interface{}) { } func TestMustFindMetric(t *testing.T) { - reg := prom.NewRegistry() + reg := prom.NewRegistry(zaptest.NewLogger(t)) reg.MustRegister(helperCollectors()...) mfs, err := reg.Gather() @@ -177,7 +178,7 @@ func TestMustGather(t *testing.T) { } func TestFromHTTPResponse(t *testing.T) { - reg := prom.NewRegistry() + reg := prom.NewRegistry(zaptest.NewLogger(t)) reg.MustRegister(helperCollectors()...) s := httptest.NewServer(reg.HTTPHandler()) diff --git a/kit/prom/registry.go b/kit/prom/registry.go index 940a53faa7..f734ce4c5d 100644 --- a/kit/prom/registry.go +++ b/kit/prom/registry.go @@ -23,23 +23,17 @@ type PrometheusCollector interface { type Registry struct { *prometheus.Registry - logger *zap.Logger + log *zap.Logger } // NewRegistry returns a new registry. -func NewRegistry() *Registry { +func NewRegistry(log *zap.Logger) *Registry { return &Registry{ Registry: prometheus.NewRegistry(), - logger: zap.NewNop(), + log: log, } } -// WithLogger sets the logger for the Registry. -// The logger will print any errors that occur while serving metrics over HTTP. -func (r *Registry) WithLogger(l *zap.Logger) { - r.logger = l.With(zap.String("service", "prom_registry")) -} - // HTTPHandler returns an http.Handler for the registry, // so that the /metrics HTTP handler is uniformly configured across all apps in the platform. func (r *Registry) HTTPHandler() http.Handler { @@ -50,7 +44,7 @@ func (r *Registry) HTTPHandler() http.Handler { return promhttp.HandlerFor(r.Registry, opts) } -// promLogger satisfies the promhttp.Logger interface with the registry. +// promLogger satisfies the promhttp.logger interface with the registry. // Because normal usage is that WithLogger is called after HTTPHandler, // we refer to the Registry rather than its logger. type promLogger struct { @@ -59,7 +53,7 @@ type promLogger struct { var _ promhttp.Logger = (*promLogger)(nil) -// Println implements promhttp.Logger. +// Println implements promhttp.logger. func (pl promLogger) Println(v ...interface{}) { - pl.r.logger.Sugar().Info(v...) + pl.r.log.Sugar().Info(v...) } diff --git a/kit/prom/registry_test.go b/kit/prom/registry_test.go index 9629f95797..b53d810f96 100644 --- a/kit/prom/registry_test.go +++ b/kit/prom/registry_test.go @@ -14,17 +14,13 @@ import ( ) func TestRegistry_Logger(t *testing.T) { - reg := prom.NewRegistry() + core, logs := observer.New(zap.DebugLevel) + reg := prom.NewRegistry(zap.New(core)) // Normal use: HTTP handler is created immediately... s := httptest.NewServer(reg.HTTPHandler()) defer s.Close() - // ... and then WithLogger is called. - core, logs := observer.New(zap.DebugLevel) - logger := zap.New(core) - reg.WithLogger(logger) - // Force an error with a fake collector. reg.MustRegister(errorCollector{}) resp, err := http.Get(s.URL) diff --git a/kv/auth_test.go b/kv/auth_test.go index b14a6ed07b..e5cc1c5764 100644 --- a/kv/auth_test.go +++ b/kv/auth_test.go @@ -7,6 +7,7 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltAuthorizationService(t *testing.T) { @@ -18,7 +19,7 @@ func TestInmemAuthorizationService(t *testing.T) { } func initBoltAuthorizationService(f influxdbtesting.AuthorizationFields, t *testing.T) (influxdb.AuthorizationService, string, func()) { - s, closeBolt, err := NewTestBoltStore() + s, closeBolt, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -31,7 +32,7 @@ func initBoltAuthorizationService(f influxdbtesting.AuthorizationFields, t *test } func initInmemAuthorizationService(f influxdbtesting.AuthorizationFields, t *testing.T) (influxdb.AuthorizationService, string, func()) { - s, closeBolt, err := NewTestInmemStore() + s, closeBolt, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -44,7 +45,7 @@ func initInmemAuthorizationService(f influxdbtesting.AuthorizationFields, t *tes } func initAuthorizationService(s kv.Store, f influxdbtesting.AuthorizationFields, t *testing.T) (influxdb.AuthorizationService, string, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) svc.IDGenerator = f.IDGenerator svc.TokenGenerator = f.TokenGenerator svc.TimeGenerator = f.TimeGenerator diff --git a/kv/bucket_test.go b/kv/bucket_test.go index ebe5b364fe..6ccbd30c65 100644 --- a/kv/bucket_test.go +++ b/kv/bucket_test.go @@ -7,6 +7,7 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltBucketService(t *testing.T) { @@ -18,7 +19,7 @@ func TestInmemBucketService(t *testing.T) { } func initBoltBucketService(f influxdbtesting.BucketFields, t *testing.T) (influxdb.BucketService, string, func()) { - s, closeBolt, err := NewTestBoltStore() + s, closeBolt, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -31,7 +32,7 @@ func initBoltBucketService(f influxdbtesting.BucketFields, t *testing.T) (influx } func initInmemBucketService(f influxdbtesting.BucketFields, t *testing.T) (influxdb.BucketService, string, func()) { - s, closeBolt, err := NewTestInmemStore() + s, closeBolt, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -44,7 +45,7 @@ func initInmemBucketService(f influxdbtesting.BucketFields, t *testing.T) (influ } func initBucketService(s kv.Store, f influxdbtesting.BucketFields, t *testing.T) (influxdb.BucketService, string, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) svc.OrgBucketIDs = f.OrgBucketIDs svc.IDGenerator = f.IDGenerator svc.TimeGenerator = f.TimeGenerator diff --git a/kv/check_test.go b/kv/check_test.go index 8e0d9ecf0a..e3acdf4f5d 100644 --- a/kv/check_test.go +++ b/kv/check_test.go @@ -7,6 +7,7 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltCheckService(t *testing.T) { @@ -20,7 +21,7 @@ func TestInmemCheckService(t *testing.T) { } func initBoltCheckService(f influxdbtesting.CheckFields, t *testing.T) (influxdb.CheckService, string, func()) { - s, closeBolt, err := NewTestBoltStore() + s, closeBolt, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -33,7 +34,7 @@ func initBoltCheckService(f influxdbtesting.CheckFields, t *testing.T) (influxdb } func initInmemCheckService(f influxdbtesting.CheckFields, t *testing.T) (influxdb.CheckService, string, func()) { - s, closeBolt, err := NewTestInmemStore() + s, closeBolt, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -46,7 +47,7 @@ func initInmemCheckService(f influxdbtesting.CheckFields, t *testing.T) (influxd } func initCheckService(s kv.Store, f influxdbtesting.CheckFields, t *testing.T) (influxdb.CheckService, string, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) svc.IDGenerator = f.IDGenerator svc.TimeGenerator = f.TimeGenerator if f.TimeGenerator == nil { diff --git a/kv/dashboard.go b/kv/dashboard.go index 41ade250ae..381a3e0d74 100644 --- a/kv/dashboard.go +++ b/kv/dashboard.go @@ -308,7 +308,7 @@ func (s *Service) CreateDashboard(ctx context.Context, d *influxdb.Dashboard) er } if err := s.addDashboardOwner(ctx, tx, d.ID); err != nil { - s.Logger.Info("failed to make user owner of organization", zap.Error(err)) + s.log.Info("Failed to make user owner of organization", zap.Error(err)) } return nil diff --git a/kv/dashboard_test.go b/kv/dashboard_test.go index 560771d25c..849b0be2db 100644 --- a/kv/dashboard_test.go +++ b/kv/dashboard_test.go @@ -7,6 +7,7 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltDashboardService(t *testing.T) { @@ -18,7 +19,7 @@ func TestInmemDashboardService(t *testing.T) { } func initBoltDashboardService(f influxdbtesting.DashboardFields, t *testing.T) (influxdb.DashboardService, string, func()) { - s, closeBolt, err := NewTestBoltStore() + s, closeBolt, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -31,7 +32,7 @@ func initBoltDashboardService(f influxdbtesting.DashboardFields, t *testing.T) ( } func initInmemDashboardService(f influxdbtesting.DashboardFields, t *testing.T) (influxdb.DashboardService, string, func()) { - s, closeBolt, err := NewTestInmemStore() + s, closeBolt, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -48,7 +49,7 @@ func initDashboardService(s kv.Store, f influxdbtesting.DashboardFields, t *test if f.TimeGenerator == nil { f.TimeGenerator = influxdb.RealTimeGenerator{} } - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) svc.IDGenerator = f.IDGenerator svc.TimeGenerator = f.TimeGenerator diff --git a/kv/document_test.go b/kv/document_test.go index 92b3dac634..0c3abc4a39 100644 --- a/kv/document_test.go +++ b/kv/document_test.go @@ -7,7 +7,7 @@ import ( ) func TestBoltDocumentStore(t *testing.T) { - boltStore, closeBolt, err := NewTestBoltStore() + boltStore, closeBolt, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new bolt kv store: %v", err) } @@ -18,7 +18,7 @@ func TestBoltDocumentStore(t *testing.T) { func TestInmemDocumentStore(t *testing.T) { t.Skip("https://github.com/influxdata/influxdb/issues/12403") - inmemStore, closeInmem, err := NewTestInmemStore() + inmemStore, closeInmem, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new inmem kv store: %v", err) } diff --git a/kv/kv_test.go b/kv/kv_test.go index 9540626d8d..47a50cd6a1 100644 --- a/kv/kv_test.go +++ b/kv/kv_test.go @@ -5,13 +5,15 @@ import ( "errors" "io/ioutil" "os" + "testing" "github.com/influxdata/influxdb/bolt" "github.com/influxdata/influxdb/inmem" "github.com/influxdata/influxdb/kv" + "go.uber.org/zap/zaptest" ) -func NewTestBoltStore() (kv.Store, func(), error) { +func NewTestBoltStore(t *testing.T) (kv.Store, func(), error) { f, err := ioutil.TempFile("", "influxdata-bolt-") if err != nil { return nil, nil, errors.New("unable to open temporary boltdb file") @@ -19,7 +21,7 @@ func NewTestBoltStore() (kv.Store, func(), error) { f.Close() path := f.Name() - s := bolt.NewKVStore(path) + s := bolt.NewKVStore(zaptest.NewLogger(t), path) if err := s.Open(context.Background()); err != nil { return nil, nil, err } @@ -32,6 +34,6 @@ func NewTestBoltStore() (kv.Store, func(), error) { return s, close, nil } -func NewTestInmemStore() (kv.Store, func(), error) { +func NewTestInmemStore(t *testing.T) (kv.Store, func(), error) { return inmem.NewKVStore(), func() {}, nil } diff --git a/kv/kvlog_test.go b/kv/kvlog_test.go index ce2ee63c34..ff45403596 100644 --- a/kv/kvlog_test.go +++ b/kv/kvlog_test.go @@ -7,6 +7,7 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltKeyValueLog(t *testing.T) { @@ -18,7 +19,7 @@ func TestInmemKeyValueLog(t *testing.T) { } func initBoltKeyValueLog(f influxdbtesting.KeyValueLogFields, t *testing.T) (influxdb.KeyValueLog, func()) { - s, closeBolt, err := NewTestBoltStore() + s, closeBolt, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -31,7 +32,7 @@ func initBoltKeyValueLog(f influxdbtesting.KeyValueLogFields, t *testing.T) (inf } func initInmemKeyValueLog(f influxdbtesting.KeyValueLogFields, t *testing.T) (influxdb.KeyValueLog, func()) { - s, closeBolt, err := NewTestInmemStore() + s, closeBolt, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -44,7 +45,7 @@ func initInmemKeyValueLog(f influxdbtesting.KeyValueLogFields, t *testing.T) (in } func initKeyValueLog(s kv.Store, f influxdbtesting.KeyValueLogFields, t *testing.T) (influxdb.KeyValueLog, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) ctx := context.Background() if err := svc.Initialize(ctx); err != nil { diff --git a/kv/label_test.go b/kv/label_test.go index 6dd87e1481..065c49627c 100644 --- a/kv/label_test.go +++ b/kv/label_test.go @@ -7,6 +7,7 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltLabelService(t *testing.T) { @@ -18,7 +19,7 @@ func TestInmemLabelService(t *testing.T) { } func initBoltLabelService(f influxdbtesting.LabelFields, t *testing.T) (influxdb.LabelService, string, func()) { - s, closeBolt, err := NewTestBoltStore() + s, closeBolt, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -31,7 +32,7 @@ func initBoltLabelService(f influxdbtesting.LabelFields, t *testing.T) (influxdb } func initInmemLabelService(f influxdbtesting.LabelFields, t *testing.T) (influxdb.LabelService, string, func()) { - s, closeBolt, err := NewTestInmemStore() + s, closeBolt, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -44,7 +45,7 @@ func initInmemLabelService(f influxdbtesting.LabelFields, t *testing.T) (influxd } func initLabelService(s kv.Store, f influxdbtesting.LabelFields, t *testing.T) (influxdb.LabelService, string, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) svc.IDGenerator = f.IDGenerator ctx := context.Background() diff --git a/kv/lookup_service_test.go b/kv/lookup_service_test.go index f563b05c5f..b6345c6a65 100644 --- a/kv/lookup_service_test.go +++ b/kv/lookup_service_test.go @@ -9,6 +9,7 @@ import ( "github.com/influxdata/influxdb/kv" "github.com/influxdata/influxdb/mock" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) var ( @@ -17,7 +18,7 @@ var ( nonexistantID = platform.ID(10001) ) -type StoreFn func() (kv.Store, func(), error) +type StoreFn func(*testing.T) (kv.Store, func(), error) func TestLookupService_Name_WithBolt(t *testing.T) { testLookupName(NewTestBoltStore, t) @@ -239,11 +240,11 @@ func testLookupName(newStore StoreFn, t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - store, done, err := newStore() + store, done, err := newStore(t) if err != nil { t.Fatalf("unable to create bolt test client: %v", err) } - svc := kv.NewService(store) + svc := kv.NewService(zaptest.NewLogger(t), store) defer done() svc.IDGenerator = mock.NewMockIDGenerator() diff --git a/kv/notification_endpoint_test.go b/kv/notification_endpoint_test.go index e0b3390a06..ac777312fe 100644 --- a/kv/notification_endpoint_test.go +++ b/kv/notification_endpoint_test.go @@ -7,6 +7,7 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltNotificationEndpointService(t *testing.T) { @@ -18,7 +19,7 @@ func TestNotificationEndpointService(t *testing.T) { } func initBoltNotificationEndpointService(f influxdbtesting.NotificationEndpointFields, t *testing.T) (influxdb.NotificationEndpointService, func()) { - s, closeBolt, err := NewTestBoltStore() + s, closeBolt, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -31,7 +32,7 @@ func initBoltNotificationEndpointService(f influxdbtesting.NotificationEndpointF } func initInmemNotificationEndpointService(f influxdbtesting.NotificationEndpointFields, t *testing.T) (influxdb.NotificationEndpointService, func()) { - s, closeInmem, err := NewTestInmemStore() + s, closeInmem, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -44,7 +45,7 @@ func initInmemNotificationEndpointService(f influxdbtesting.NotificationEndpoint } func initNotificationEndpointService(s kv.Store, f influxdbtesting.NotificationEndpointFields, t *testing.T) (influxdb.NotificationEndpointService, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) svc.IDGenerator = f.IDGenerator svc.TimeGenerator = f.TimeGenerator if f.TimeGenerator == nil { diff --git a/kv/notification_rule.go b/kv/notification_rule.go index cf27a4a07e..df353ae409 100644 --- a/kv/notification_rule.go +++ b/kv/notification_rule.go @@ -508,7 +508,7 @@ func (s *Service) deleteNotificationRule(ctx context.Context, tx Tx, id influxdb }); err != nil { // TODO(desa): it is possible that there were no user resource mappings for a resource so this likely shouldn't be a blocking // condition for deleting a notification rule. - s.Logger.Info("failed to remove user resource mappings for notification rule", zap.Error(err), zap.Stringer("rule_id", id)) + s.log.Info("Failed to remove user resource mappings for notification rule", zap.Error(err), zap.Stringer("rule_id", id)) } return nil diff --git a/kv/notification_rule_test.go b/kv/notification_rule_test.go index f2bb0b9f8f..08162ad2e1 100644 --- a/kv/notification_rule_test.go +++ b/kv/notification_rule_test.go @@ -7,6 +7,7 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltNotificationRuleStore(t *testing.T) { @@ -20,7 +21,7 @@ func TestNotificationRuleStore(t *testing.T) { } func initBoltNotificationRuleStore(f influxdbtesting.NotificationRuleFields, t *testing.T) (influxdb.NotificationRuleStore, func()) { - s, closeBolt, err := NewTestBoltStore() + s, closeBolt, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -33,7 +34,7 @@ func initBoltNotificationRuleStore(f influxdbtesting.NotificationRuleFields, t * } func initInmemNotificationRuleStore(f influxdbtesting.NotificationRuleFields, t *testing.T) (influxdb.NotificationRuleStore, func()) { - s, closeBolt, err := NewTestInmemStore() + s, closeBolt, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -46,7 +47,7 @@ func initInmemNotificationRuleStore(f influxdbtesting.NotificationRuleFields, t } func initNotificationRuleStore(s kv.Store, f influxdbtesting.NotificationRuleFields, t *testing.T) (influxdb.NotificationRuleStore, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) svc.IDGenerator = f.IDGenerator svc.TimeGenerator = f.TimeGenerator if f.TimeGenerator == nil { diff --git a/kv/onboarding_test.go b/kv/onboarding_test.go index d8b8e27392..c59b69d6e0 100644 --- a/kv/onboarding_test.go +++ b/kv/onboarding_test.go @@ -7,6 +7,7 @@ import ( influxdb "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltOnboardingService(t *testing.T) { @@ -18,7 +19,7 @@ func TestInmemOnboardingService(t *testing.T) { } func initBoltOnboardingService(f influxdbtesting.OnboardingFields, t *testing.T) (influxdb.OnboardingService, func()) { - s, closeStore, err := NewTestBoltStore() + s, closeStore, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new bolt kv store: %v", err) } @@ -31,7 +32,7 @@ func initBoltOnboardingService(f influxdbtesting.OnboardingFields, t *testing.T) } func initInmemOnboardingService(f influxdbtesting.OnboardingFields, t *testing.T) (influxdb.OnboardingService, func()) { - s, closeStore, err := NewTestInmemStore() + s, closeStore, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new inmem kv store: %v", err) } @@ -44,7 +45,7 @@ func initInmemOnboardingService(f influxdbtesting.OnboardingFields, t *testing.T } func initOnboardingService(s kv.Store, f influxdbtesting.OnboardingFields, t *testing.T) (influxdb.OnboardingService, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) svc.IDGenerator = f.IDGenerator svc.OrgBucketIDs = f.IDGenerator svc.TokenGenerator = f.TokenGenerator diff --git a/kv/org.go b/kv/org.go index e54085b4d5..51ec725728 100644 --- a/kv/org.go +++ b/kv/org.go @@ -264,7 +264,7 @@ func (s *Service) CreateOrganization(ctx context.Context, o *influxdb.Organizati // Attempt to add user as owner of organization, if that is not possible allow the // organization to be created anyways. if err := s.addOrgOwner(ctx, tx, o.ID); err != nil { - s.Logger.Info("Failed to make user owner of organization", zap.Error(err)) + s.log.Info("Failed to make user owner of organization", zap.Error(err)) } return s.createSystemBuckets(ctx, tx, o) @@ -469,7 +469,7 @@ func (s *Service) deleteOrganizationsBuckets(ctx context.Context, tx Tx, id infl } for _, b := range bs { if err := s.deleteBucket(ctx, tx, b.ID); err != nil { - s.Logger.Warn("bucket was not deleted", zap.Stringer("bucketID", b.ID), zap.Stringer("orgID", b.OrgID)) + s.log.Warn("Bucket was not deleted", zap.Stringer("bucketID", b.ID), zap.Stringer("orgID", b.OrgID)) } } return nil diff --git a/kv/org_test.go b/kv/org_test.go index 9efc0acbc4..1c0531d792 100644 --- a/kv/org_test.go +++ b/kv/org_test.go @@ -7,6 +7,7 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltOrganizationService(t *testing.T) { @@ -18,7 +19,7 @@ func TestInmemOrganizationService(t *testing.T) { } func initBoltOrganizationService(f influxdbtesting.OrganizationFields, t *testing.T) (influxdb.OrganizationService, string, func()) { - s, closeBolt, err := NewTestBoltStore() + s, closeBolt, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -31,7 +32,7 @@ func initBoltOrganizationService(f influxdbtesting.OrganizationFields, t *testin } func initInmemOrganizationService(f influxdbtesting.OrganizationFields, t *testing.T) (influxdb.OrganizationService, string, func()) { - s, closeBolt, err := NewTestInmemStore() + s, closeBolt, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -44,7 +45,7 @@ func initInmemOrganizationService(f influxdbtesting.OrganizationFields, t *testi } func initOrganizationService(s kv.Store, f influxdbtesting.OrganizationFields, t *testing.T) (influxdb.OrganizationService, string, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) svc.OrgBucketIDs = f.OrgBucketIDs svc.IDGenerator = f.IDGenerator svc.TimeGenerator = f.TimeGenerator diff --git a/kv/passwords_test.go b/kv/passwords_test.go index c8c8172a50..842c092a5f 100644 --- a/kv/passwords_test.go +++ b/kv/passwords_test.go @@ -10,6 +10,7 @@ import ( "github.com/influxdata/influxdb/kv" "github.com/influxdata/influxdb/mock" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltPasswordService(t *testing.T) { @@ -21,7 +22,7 @@ func TestInmemPasswordService(t *testing.T) { } func initBoltPasswordsService(f influxdbtesting.PasswordFields, t *testing.T) (influxdb.PasswordsService, func()) { - s, closeStore, err := NewTestBoltStore() + s, closeStore, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new bolt kv store: %v", err) } @@ -34,7 +35,7 @@ func initBoltPasswordsService(f influxdbtesting.PasswordFields, t *testing.T) (i } func initInmemPasswordsService(f influxdbtesting.PasswordFields, t *testing.T) (influxdb.PasswordsService, func()) { - s, closeStore, err := NewTestInmemStore() + s, closeStore, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new inmem kv store: %v", err) } @@ -47,7 +48,7 @@ func initInmemPasswordsService(f influxdbtesting.PasswordFields, t *testing.T) ( } func initPasswordsService(s kv.Store, f influxdbtesting.PasswordFields, t *testing.T) (influxdb.PasswordsService, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) svc.IDGenerator = f.IDGenerator ctx := context.Background() diff --git a/kv/scrapers_test.go b/kv/scrapers_test.go index 1cda071194..feea31894d 100644 --- a/kv/scrapers_test.go +++ b/kv/scrapers_test.go @@ -7,6 +7,7 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltScraperTargetStoreService(t *testing.T) { @@ -18,7 +19,7 @@ func TestInmemScraperTargetStoreService(t *testing.T) { } func initBoltTargetService(f influxdbtesting.TargetFields, t *testing.T) (influxdb.ScraperTargetStoreService, string, func()) { - s, closeFn, err := NewTestBoltStore() + s, closeFn, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -31,7 +32,7 @@ func initBoltTargetService(f influxdbtesting.TargetFields, t *testing.T) (influx } func initInmemTargetService(f influxdbtesting.TargetFields, t *testing.T) (influxdb.ScraperTargetStoreService, string, func()) { - s, closeFn, err := NewTestInmemStore() + s, closeFn, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -44,7 +45,7 @@ func initInmemTargetService(f influxdbtesting.TargetFields, t *testing.T) (influ } func initScraperTargetStoreService(s kv.Store, f influxdbtesting.TargetFields, t *testing.T) (influxdb.ScraperTargetStoreService, string, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) svc.IDGenerator = f.IDGenerator ctx := context.Background() diff --git a/kv/secret_test.go b/kv/secret_test.go index 9db271a072..1dda545a7a 100644 --- a/kv/secret_test.go +++ b/kv/secret_test.go @@ -7,6 +7,7 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltSecretService(t *testing.T) { @@ -18,7 +19,7 @@ func TestInmemSecretService(t *testing.T) { } func initBoltSecretService(f influxdbtesting.SecretServiceFields, t *testing.T) (influxdb.SecretService, func()) { - s, closeBolt, err := NewTestBoltStore() + s, closeBolt, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -31,7 +32,7 @@ func initBoltSecretService(f influxdbtesting.SecretServiceFields, t *testing.T) } func initInmemSecretService(f influxdbtesting.SecretServiceFields, t *testing.T) (influxdb.SecretService, func()) { - s, closeBolt, err := NewTestInmemStore() + s, closeBolt, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -44,7 +45,7 @@ func initInmemSecretService(f influxdbtesting.SecretServiceFields, t *testing.T) } func initSecretService(s kv.Store, f influxdbtesting.SecretServiceFields, t *testing.T) (influxdb.SecretService, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) ctx := context.Background() if err := svc.Initialize(ctx); err != nil { t.Fatalf("error initializing secret service: %v", err) diff --git a/kv/service.go b/kv/service.go index 3fedfb6437..57028a9c9d 100644 --- a/kv/service.go +++ b/kv/service.go @@ -21,7 +21,7 @@ const OpPrefix = "kv/" // Service is the struct that influxdb services are implemented on. type Service struct { kv Store - Logger *zap.Logger + log *zap.Logger Config ServiceConfig IDGenerator influxdb.IDGenerator @@ -38,9 +38,9 @@ type Service struct { } // NewService returns an instance of a Service. -func NewService(kv Store, configs ...ServiceConfig) *Service { +func NewService(log *zap.Logger, kv Store, configs ...ServiceConfig) *Service { s := &Service{ - Logger: zap.NewNop(), + log: log, IDGenerator: snowflake.NewIDGenerator(), // Seed the random number generator with the current time OrgBucketIDs: rand.NewOrgBucketID(time.Now().UnixNano()), diff --git a/kv/service_test.go b/kv/service_test.go index 469dc794a1..50dc017613 100644 --- a/kv/service_test.go +++ b/kv/service_test.go @@ -7,6 +7,7 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" + "go.uber.org/zap/zaptest" ) type mockStore struct { @@ -21,7 +22,7 @@ func (s mockStore) Update(context.Context, func(kv.Tx) error) error { } func TestNewService(t *testing.T) { - s := kv.NewService(mockStore{}) + s := kv.NewService(zaptest.NewLogger(t), mockStore{}) if s.Config.SessionLength != influxdb.DefaultSessionLength { t.Errorf("Service session length should use default length when not set") @@ -31,7 +32,7 @@ func TestNewService(t *testing.T) { SessionLength: time.Duration(time.Hour * 4), } - s = kv.NewService(mockStore{}, config) + s = kv.NewService(zaptest.NewLogger(t), mockStore{}, config) if s.Config != config { t.Errorf("Service config not set by constructor") diff --git a/kv/session_test.go b/kv/session_test.go index 9f9993ae14..79434383fd 100644 --- a/kv/session_test.go +++ b/kv/session_test.go @@ -7,6 +7,7 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltSessionService(t *testing.T) { @@ -18,7 +19,7 @@ func TestInmemSessionService(t *testing.T) { } func initBoltSessionService(f influxdbtesting.SessionFields, t *testing.T) (influxdb.SessionService, string, func()) { - s, closeBolt, err := NewTestBoltStore() + s, closeBolt, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -31,7 +32,7 @@ func initBoltSessionService(f influxdbtesting.SessionFields, t *testing.T) (infl } func initInmemSessionService(f influxdbtesting.SessionFields, t *testing.T) (influxdb.SessionService, string, func()) { - s, closeBolt, err := NewTestInmemStore() + s, closeBolt, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -44,7 +45,7 @@ func initInmemSessionService(f influxdbtesting.SessionFields, t *testing.T) (inf } func initSessionService(s kv.Store, f influxdbtesting.SessionFields, t *testing.T) (influxdb.SessionService, string, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) svc.IDGenerator = f.IDGenerator svc.TokenGenerator = f.TokenGenerator diff --git a/kv/source_test.go b/kv/source_test.go index 20ec4ad27c..d730609f18 100644 --- a/kv/source_test.go +++ b/kv/source_test.go @@ -7,6 +7,7 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltSourceService(t *testing.T) { @@ -24,7 +25,7 @@ func TestInmemSourceService(t *testing.T) { } func initBoltSourceService(f influxdbtesting.SourceFields, t *testing.T) (influxdb.SourceService, string, func()) { - s, closeBolt, err := NewTestBoltStore() + s, closeBolt, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -37,7 +38,7 @@ func initBoltSourceService(f influxdbtesting.SourceFields, t *testing.T) (influx } func initInmemSourceService(f influxdbtesting.SourceFields, t *testing.T) (influxdb.SourceService, string, func()) { - s, closeBolt, err := NewTestInmemStore() + s, closeBolt, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -50,7 +51,7 @@ func initInmemSourceService(f influxdbtesting.SourceFields, t *testing.T) (influ } func initSourceService(s kv.Store, f influxdbtesting.SourceFields, t *testing.T) (influxdb.SourceService, string, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) svc.IDGenerator = f.IDGenerator ctx := context.Background() diff --git a/kv/task.go b/kv/task.go index c5cb46dc93..eb6cf51570 100644 --- a/kv/task.go +++ b/kv/task.go @@ -642,7 +642,7 @@ func (s *Service) createTask(ctx context.Context, tx Tx, tc influxdb.TaskCreate) } if err := s.createTaskURM(ctx, tx, task); err != nil { - s.Logger.Info("error creating user resource mapping for task", zap.Stringer("taskID", task.ID), zap.Error(err)) + s.log.Info("Error creating user resource mapping for task", zap.Stringer("taskID", task.ID), zap.Error(err)) } // populate permissions so the task can be used immediately @@ -872,7 +872,7 @@ func (s *Service) deleteTask(ctx context.Context, tx Tx, id influxdb.ID) error { if err := s.deleteUserResourceMapping(ctx, tx, influxdb.UserResourceMappingFilter{ ResourceID: task.ID, }); err != nil { - s.Logger.Info("error deleting user resource mapping for task", zap.Stringer("taskID", task.ID), zap.Error(err)) + s.log.Info("Error deleting user resource mapping for task", zap.Stringer("taskID", task.ID), zap.Error(err)) } return nil diff --git a/kv/task_test.go b/kv/task_test.go index 1215740537..6d491041e7 100644 --- a/kv/task_test.go +++ b/kv/task_test.go @@ -13,18 +13,19 @@ import ( _ "github.com/influxdata/influxdb/query/builtin" "github.com/influxdata/influxdb/task/backend" "github.com/influxdata/influxdb/task/servicetest" + "go.uber.org/zap/zaptest" ) func TestInmemTaskService(t *testing.T) { servicetest.TestTaskService( t, func(t *testing.T) (*servicetest.System, context.CancelFunc) { - store, close, err := NewTestInmemStore() + store, close, err := NewTestInmemStore(t) if err != nil { t.Fatal(err) } - service := kv.NewService(store) + service := kv.NewService(zaptest.NewLogger(t), store) ctx, cancelFunc := context.WithCancel(context.Background()) if err := service.Initialize(ctx); err != nil { @@ -51,12 +52,12 @@ func TestBoltTaskService(t *testing.T) { servicetest.TestTaskService( t, func(t *testing.T) (*servicetest.System, context.CancelFunc) { - store, close, err := NewTestBoltStore() + store, close, err := NewTestBoltStore(t) if err != nil { t.Fatal(err) } - service := kv.NewService(store) + service := kv.NewService(zaptest.NewLogger(t), store) ctx, cancelFunc := context.WithCancel(context.Background()) if err := service.Initialize(ctx); err != nil { t.Fatalf("error initializing urm service: %v", err) @@ -79,13 +80,13 @@ func TestBoltTaskService(t *testing.T) { } func TestNextRunDue(t *testing.T) { - store, close, err := NewTestBoltStore() + store, close, err := NewTestBoltStore(t) if err != nil { t.Fatal(err) } defer close() - service := kv.NewService(store) + service := kv.NewService(zaptest.NewLogger(t), store) ctx, cancelFunc := context.WithCancel(context.Background()) if err := service.Initialize(ctx); err != nil { t.Fatalf("error initializing urm service: %v", err) @@ -179,13 +180,13 @@ func TestNextRunDue(t *testing.T) { } func TestRetrieveTaskWithBadAuth(t *testing.T) { - store, close, err := NewTestInmemStore() + store, close, err := NewTestInmemStore(t) if err != nil { t.Fatal(err) } defer close() - service := kv.NewService(store) + service := kv.NewService(zaptest.NewLogger(t), store) ctx, cancelFunc := context.WithCancel(context.Background()) if err := service.Initialize(ctx); err != nil { t.Fatalf("error initializing urm service: %v", err) diff --git a/kv/telegraf_test.go b/kv/telegraf_test.go index bb4b5292c1..fdfb3922a6 100644 --- a/kv/telegraf_test.go +++ b/kv/telegraf_test.go @@ -7,6 +7,7 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltTelegrafService(t *testing.T) { @@ -18,7 +19,7 @@ func TestInmemTelegrafService(t *testing.T) { } func initBoltTelegrafService(f influxdbtesting.TelegrafConfigFields, t *testing.T) (influxdb.TelegrafConfigStore, func()) { - s, closeBolt, err := NewTestBoltStore() + s, closeBolt, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -31,7 +32,7 @@ func initBoltTelegrafService(f influxdbtesting.TelegrafConfigFields, t *testing. } func initInmemTelegrafService(f influxdbtesting.TelegrafConfigFields, t *testing.T) (influxdb.TelegrafConfigStore, func()) { - s, closeBolt, err := NewTestInmemStore() + s, closeBolt, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -44,7 +45,7 @@ func initInmemTelegrafService(f influxdbtesting.TelegrafConfigFields, t *testing } func initTelegrafService(s kv.Store, f influxdbtesting.TelegrafConfigFields, t *testing.T) (influxdb.TelegrafConfigStore, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) svc.IDGenerator = f.IDGenerator ctx := context.Background() diff --git a/kv/urm.go b/kv/urm.go index 972ff2a847..8c6ff087bd 100644 --- a/kv/urm.go +++ b/kv/urm.go @@ -391,7 +391,7 @@ func (s *Service) deleteOrgDependentMappings(ctx context.Context, tx Tx, m *infl UserID: m.UserID, }); err != nil { if influxdb.ErrorCode(err) == influxdb.ENotFound { - s.Logger.Info("URM bucket is missing", zap.Stringer("orgID", m.ResourceID)) + s.log.Info("URM bucket is missing", zap.Stringer("orgID", m.ResourceID)) continue } return err diff --git a/kv/urm_test.go b/kv/urm_test.go index 8266cb243f..a051f1274e 100644 --- a/kv/urm_test.go +++ b/kv/urm_test.go @@ -7,6 +7,7 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltUserResourceMappingService(t *testing.T) { @@ -18,7 +19,7 @@ func TestInmemUserResourceMappingService(t *testing.T) { } func initBoltUserResourceMappingService(f influxdbtesting.UserResourceFields, t *testing.T) (influxdb.UserResourceMappingService, func()) { - s, closeBolt, err := NewTestBoltStore() + s, closeBolt, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -31,7 +32,7 @@ func initBoltUserResourceMappingService(f influxdbtesting.UserResourceFields, t } func initInmemUserResourceMappingService(f influxdbtesting.UserResourceFields, t *testing.T) (influxdb.UserResourceMappingService, func()) { - s, closeBolt, err := NewTestInmemStore() + s, closeBolt, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -44,7 +45,7 @@ func initInmemUserResourceMappingService(f influxdbtesting.UserResourceFields, t } func initUserResourceMappingService(s kv.Store, f influxdbtesting.UserResourceFields, t *testing.T) (influxdb.UserResourceMappingService, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) ctx := context.Background() if err := svc.Initialize(ctx); err != nil { diff --git a/kv/user_test.go b/kv/user_test.go index c9a0c5a1ca..fcf76d0320 100644 --- a/kv/user_test.go +++ b/kv/user_test.go @@ -7,6 +7,7 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" + "go.uber.org/zap/zaptest" ) func TestBoltUserService(t *testing.T) { @@ -18,7 +19,7 @@ func TestInmemUserService(t *testing.T) { } func initBoltUserService(f influxdbtesting.UserFields, t *testing.T) (influxdb.UserService, string, func()) { - s, closeBolt, err := NewTestBoltStore() + s, closeBolt, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -31,7 +32,7 @@ func initBoltUserService(f influxdbtesting.UserFields, t *testing.T) (influxdb.U } func initInmemUserService(f influxdbtesting.UserFields, t *testing.T) (influxdb.UserService, string, func()) { - s, closeBolt, err := NewTestInmemStore() + s, closeBolt, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -44,7 +45,7 @@ func initInmemUserService(f influxdbtesting.UserFields, t *testing.T) (influxdb. } func initUserService(s kv.Store, f influxdbtesting.UserFields, t *testing.T) (influxdb.UserService, string, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) svc.IDGenerator = f.IDGenerator ctx := context.Background() diff --git a/kv/variable_test.go b/kv/variable_test.go index 25b1672769..3df03e792c 100644 --- a/kv/variable_test.go +++ b/kv/variable_test.go @@ -2,10 +2,12 @@ package kv_test import ( "context" + "testing" + "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" influxdbtesting "github.com/influxdata/influxdb/testing" - "testing" + "go.uber.org/zap/zaptest" ) func TestBoltVariableService(t *testing.T) { @@ -17,7 +19,7 @@ func TestInmemVariableService(t *testing.T) { } func initBoltVariableService(f influxdbtesting.VariableFields, t *testing.T) (influxdb.VariableService, string, func()) { - s, closeBolt, err := NewTestBoltStore() + s, closeBolt, err := NewTestBoltStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -30,7 +32,7 @@ func initBoltVariableService(f influxdbtesting.VariableFields, t *testing.T) (in } func initInmemVariableService(f influxdbtesting.VariableFields, t *testing.T) (influxdb.VariableService, string, func()) { - s, closeBolt, err := NewTestInmemStore() + s, closeBolt, err := NewTestInmemStore(t) if err != nil { t.Fatalf("failed to create new kv store: %v", err) } @@ -43,7 +45,7 @@ func initInmemVariableService(f influxdbtesting.VariableFields, t *testing.T) (i } func initVariableService(s kv.Store, f influxdbtesting.VariableFields, t *testing.T) (influxdb.VariableService, string, func()) { - svc := kv.NewService(s) + svc := kv.NewService(zaptest.NewLogger(t), s) svc.IDGenerator = f.IDGenerator svc.TimeGenerator = f.TimeGenerator diff --git a/mock/auth_service.go b/mock/auth_service.go index aaffa66623..f677460976 100644 --- a/mock/auth_service.go +++ b/mock/auth_service.go @@ -4,16 +4,14 @@ import ( "context" platform "github.com/influxdata/influxdb" - "go.uber.org/zap" ) // AuthorizationService is a mock implementation of a retention.AuthorizationService, which // also makes it a suitable mock to use wherever an platform.AuthorizationService is required. type AuthorizationService struct { // Methods for a retention.AuthorizationService - OpenFn func() error - CloseFn func() error - WithLoggerFn func(l *zap.Logger) + OpenFn func() error + CloseFn func() error // Methods for an platform.AuthorizationService FindAuthorizationByIDFn func(context.Context, platform.ID) (*platform.Authorization, error) diff --git a/mock/bucket_service.go b/mock/bucket_service.go index 3b390eef4c..fd71afd6d3 100644 --- a/mock/bucket_service.go +++ b/mock/bucket_service.go @@ -5,16 +5,14 @@ import ( "time" platform "github.com/influxdata/influxdb" - "go.uber.org/zap" ) // BucketService is a mock implementation of a retention.BucketService, which // also makes it a suitable mock to use wherever an platform.BucketService is required. type BucketService struct { // Methods for a retention.BucketService - OpenFn func() error - CloseFn func() error - WithLoggerFn func(l *zap.Logger) + OpenFn func() error + CloseFn func() error // Methods for an platform.BucketService FindBucketByIDFn func(context.Context, platform.ID) (*platform.Bucket, error) @@ -32,7 +30,6 @@ func NewBucketService() *BucketService { return &BucketService{ OpenFn: func() error { return nil }, CloseFn: func() error { return nil }, - WithLoggerFn: func(l *zap.Logger) {}, FindBucketByIDFn: func(context.Context, platform.ID) (*platform.Bucket, error) { return nil, nil }, FindBucketByNameFn: func(context.Context, platform.ID, string) (*platform.Bucket, error) { return &platform.Bucket{ @@ -59,9 +56,6 @@ func (s *BucketService) Open() error { return s.OpenFn() } // Close closes the BucketService. func (s *BucketService) Close() error { return s.CloseFn() } -// WithLogger sets the logger on the BucketService. -func (s *BucketService) WithLogger(l *zap.Logger) { s.WithLoggerFn(l) } - // FindBucketByID returns a single bucket by ID. func (s *BucketService) FindBucketByID(ctx context.Context, id platform.ID) (*platform.Bucket, error) { return s.FindBucketByIDFn(ctx, id) diff --git a/mock/retention_service.go b/mock/retention_service.go index 8528677988..149d907d87 100644 --- a/mock/retention_service.go +++ b/mock/retention_service.go @@ -2,11 +2,9 @@ package mock import ( "github.com/prometheus/client_golang/prometheus" - "go.uber.org/zap" ) type RetentionService struct { - WithLoggerFn func(l *zap.Logger) OpenFn func() error CloseFn func() error PrometheusCollectorsFn func() []prometheus.Collector @@ -14,17 +12,12 @@ type RetentionService struct { func NewRetentionService() *RetentionService { return &RetentionService{ - WithLoggerFn: func(_ *zap.Logger) {}, OpenFn: func() error { return nil }, CloseFn: func() error { return nil }, PrometheusCollectorsFn: func() []prometheus.Collector { return nil }, } } -func (s *RetentionService) WithLogger(log *zap.Logger) { - s.WithLoggerFn(log) -} - func (s *RetentionService) Open() error { return s.OpenFn() } diff --git a/nats/handler.go b/nats/handler.go index f75a9e752e..c6359f7712 100644 --- a/nats/handler.go +++ b/nats/handler.go @@ -8,10 +8,10 @@ type Handler interface { } type LogHandler struct { - Logger *zap.Logger + log *zap.Logger } func (lh *LogHandler) Process(s Subscription, m Message) { - lh.Logger.Info(string(m.Data())) + lh.log.Info(string(m.Data())) m.Ack() } diff --git a/nats/publisher.go b/nats/publisher.go index 945523e155..6c172c58c4 100644 --- a/nats/publisher.go +++ b/nats/publisher.go @@ -16,12 +16,16 @@ type Publisher interface { type AsyncPublisher struct { ClientID string Connection stan.Conn - Logger *zap.Logger + log *zap.Logger Addr string } -func NewAsyncPublisher(clientID string, addr string) *AsyncPublisher { - return &AsyncPublisher{ClientID: clientID, Addr: addr} +func NewAsyncPublisher(log *zap.Logger, clientID string, addr string) *AsyncPublisher { + return &AsyncPublisher{ + ClientID: clientID, + log: log, + Addr: addr, + } } // Open creates and maintains a connection to NATS server @@ -41,7 +45,7 @@ func (p *AsyncPublisher) Publish(subject string, r io.Reader) error { ah := func(guid string, err error) { if err != nil { - p.Logger.Info(err.Error()) + p.log.Info(err.Error()) } } diff --git a/pkger/service.go b/pkger/service.go index fd75260f35..fa67bad888 100644 --- a/pkger/service.go +++ b/pkger/service.go @@ -25,8 +25,6 @@ type SVC interface { } type serviceOpt struct { - logger *zap.Logger - labelSVC influxdb.LabelService bucketSVC influxdb.BucketService dashSVC influxdb.DashboardService @@ -37,13 +35,6 @@ type serviceOpt struct { // ServiceSetterFn is a means of setting dependencies on the Service type. type ServiceSetterFn func(opt *serviceOpt) -// WithLogger sets the service logger. -func WithLogger(logger *zap.Logger) ServiceSetterFn { - return func(opt *serviceOpt) { - opt.logger = logger - } -} - // WithBucketSVC sets the bucket service. func WithBucketSVC(bktSVC influxdb.BucketService) ServiceSetterFn { return func(opt *serviceOpt) { @@ -82,7 +73,7 @@ func WithVariableSVC(varSVC influxdb.VariableService) ServiceSetterFn { // Service provides the pkger business logic including all the dependencies to make // this resource sausage. type Service struct { - logger *zap.Logger + log *zap.Logger labelSVC influxdb.LabelService bucketSVC influxdb.BucketService @@ -92,16 +83,14 @@ type Service struct { } // NewService is a constructor for a pkger Service. -func NewService(opts ...ServiceSetterFn) *Service { - opt := &serviceOpt{ - logger: zap.NewNop(), - } +func NewService(log *zap.Logger, opts ...ServiceSetterFn) *Service { + opt := &serviceOpt{} for _, o := range opts { o(opt) } return &Service{ - logger: opt.logger, + log: log, bucketSVC: opt.bucketSVC, labelSVC: opt.labelSVC, dashSVC: opt.dashSVC, @@ -772,7 +761,7 @@ func (s *Service) Apply(ctx context.Context, orgID influxdb.ID, pkg *Pkg) (sum S } coordinator := new(rollbackCoordinator) - defer coordinator.rollback(s.logger, &e) + defer coordinator.rollback(s.log, &e) runners := [][]applier{ // each grouping here runs for its entirety, then returns an error that diff --git a/pkger/service_test.go b/pkger/service_test.go index 0feca716fb..534d8f8d93 100644 --- a/pkger/service_test.go +++ b/pkger/service_test.go @@ -11,10 +11,12 @@ import ( "github.com/influxdata/influxdb/mock" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) func TestService(t *testing.T) { - newTestService := func(opts ...ServiceSetterFn) *Service { + newTestService := func(log *zap.Logger, opts ...ServiceSetterFn) *Service { opt := serviceOpt{ bucketSVC: mock.NewBucketService(), dashSVC: mock.NewDashboardService(), @@ -27,6 +29,7 @@ func TestService(t *testing.T) { } return NewService( + log, WithBucketSVC(opt.bucketSVC), WithDashboardSVC(opt.dashSVC), WithLabelSVC(opt.labelSVC), @@ -49,7 +52,7 @@ func TestService(t *testing.T) { RetentionPeriod: 30 * time.Hour, }, nil } - svc := newTestService(WithBucketSVC(fakeBktSVC), WithLabelSVC(mock.NewLabelService())) + svc := newTestService(zaptest.NewLogger(t), WithBucketSVC(fakeBktSVC), WithLabelSVC(mock.NewLabelService())) _, diff, err := svc.DryRun(context.TODO(), influxdb.ID(100), pkg) require.NoError(t, err) @@ -78,7 +81,7 @@ func TestService(t *testing.T) { fakeBktSVC.FindBucketByNameFn = func(_ context.Context, orgID influxdb.ID, name string) (*influxdb.Bucket, error) { return nil, errors.New("not found") } - svc := newTestService(WithBucketSVC(fakeBktSVC), WithLabelSVC(mock.NewLabelService())) + svc := newTestService(zaptest.NewLogger(t), WithBucketSVC(fakeBktSVC), WithLabelSVC(mock.NewLabelService())) _, diff, err := svc.DryRun(context.TODO(), influxdb.ID(100), pkg) require.NoError(t, err) @@ -114,7 +117,7 @@ func TestService(t *testing.T) { }, }, nil } - svc := newTestService(WithLabelSVC(fakeLabelSVC)) + svc := newTestService(zaptest.NewLogger(t), WithLabelSVC(fakeLabelSVC)) _, diff, err := svc.DryRun(context.TODO(), influxdb.ID(100), pkg) require.NoError(t, err) @@ -148,7 +151,7 @@ func TestService(t *testing.T) { fakeLabelSVC.FindLabelsFn = func(_ context.Context, filter influxdb.LabelFilter) ([]*influxdb.Label, error) { return nil, errors.New("no labels found") } - svc := newTestService(WithLabelSVC(fakeLabelSVC)) + svc := newTestService(zaptest.NewLogger(t), WithLabelSVC(fakeLabelSVC)) _, diff, err := svc.DryRun(context.TODO(), influxdb.ID(100), pkg) require.NoError(t, err) @@ -186,6 +189,7 @@ func TestService(t *testing.T) { } fakeLabelSVC := mock.NewLabelService() // ignore mappings for now svc := newTestService( + zaptest.NewLogger(t), WithLabelSVC(fakeLabelSVC), WithVariableSVC(fakeVarSVC), ) @@ -244,7 +248,7 @@ func TestService(t *testing.T) { return &influxdb.Bucket{ID: id}, nil } - svc := newTestService(WithBucketSVC(fakeBktSVC)) + svc := newTestService(zaptest.NewLogger(t), WithBucketSVC(fakeBktSVC)) orgID := influxdb.ID(9000) @@ -288,7 +292,7 @@ func TestService(t *testing.T) { return &influxdb.Bucket{ID: id}, nil } - svc := newTestService(WithBucketSVC(fakeBktSVC)) + svc := newTestService(zaptest.NewLogger(t), WithBucketSVC(fakeBktSVC)) sum, err := svc.Apply(context.TODO(), orgID, pkg) require.NoError(t, err) @@ -329,7 +333,7 @@ func TestService(t *testing.T) { pkg.mBuckets["copybuck1"] = pkg.mBuckets["rucket_11"] pkg.mBuckets["copybuck2"] = pkg.mBuckets["rucket_11"] - svc := newTestService(WithBucketSVC(fakeBktSVC)) + svc := newTestService(zaptest.NewLogger(t), WithBucketSVC(fakeBktSVC)) orgID := influxdb.ID(9000) @@ -352,7 +356,7 @@ func TestService(t *testing.T) { return nil } - svc := newTestService(WithLabelSVC(fakeLabelSVC)) + svc := newTestService(zaptest.NewLogger(t), WithLabelSVC(fakeLabelSVC)) orgID := influxdb.ID(9000) @@ -397,7 +401,7 @@ func TestService(t *testing.T) { pkg.mLabels["copy1"] = pkg.mLabels["label_1"] pkg.mLabels["copy2"] = pkg.mLabels["label_2"] - svc := newTestService(WithLabelSVC(fakeLabelSVC)) + svc := newTestService(zaptest.NewLogger(t), WithLabelSVC(fakeLabelSVC)) orgID := influxdb.ID(9000) @@ -442,7 +446,7 @@ func TestService(t *testing.T) { return &influxdb.Label{ID: id}, nil } - svc := newTestService(WithLabelSVC(fakeLabelSVC)) + svc := newTestService(zaptest.NewLogger(t), WithLabelSVC(fakeLabelSVC)) sum, err := svc.Apply(context.TODO(), orgID, pkg) require.NoError(t, err) @@ -483,7 +487,7 @@ func TestService(t *testing.T) { return &influxdb.View{}, nil } - svc := newTestService(WithDashboardSVC(fakeDashSVC)) + svc := newTestService(zaptest.NewLogger(t), WithDashboardSVC(fakeDashSVC)) orgID := influxdb.ID(9000) @@ -520,7 +524,7 @@ func TestService(t *testing.T) { pkg.mDashboards = append(pkg.mDashboards, pkg.mDashboards[0]) - svc := newTestService(WithDashboardSVC(fakeDashSVC)) + svc := newTestService(zaptest.NewLogger(t), WithDashboardSVC(fakeDashSVC)) orgID := influxdb.ID(9000) @@ -561,6 +565,7 @@ func TestService(t *testing.T) { } fakeDashSVC := mock.NewDashboardService() svc := newTestService( + zaptest.NewLogger(t), WithBucketSVC(fakeBktSVC), WithLabelSVC(fakeLabelSVC), WithDashboardSVC(fakeDashSVC), @@ -587,7 +592,7 @@ func TestService(t *testing.T) { return nil } - svc := newTestService(WithTelegrafSVC(fakeTeleSVC)) + svc := newTestService(zaptest.NewLogger(t), WithTelegrafSVC(fakeTeleSVC)) sum, err := svc.Apply(context.TODO(), orgID, pkg) require.NoError(t, err) @@ -621,7 +626,7 @@ func TestService(t *testing.T) { pkg.mTelegrafs = append(pkg.mTelegrafs, pkg.mTelegrafs[0]) - svc := newTestService(WithTelegrafSVC(fakeTeleSVC)) + svc := newTestService(zaptest.NewLogger(t), WithTelegrafSVC(fakeTeleSVC)) orgID := influxdb.ID(9000) @@ -645,6 +650,7 @@ func TestService(t *testing.T) { } svc := newTestService( + zaptest.NewLogger(t), WithLabelSVC(mock.NewLabelService()), WithVariableSVC(fakeVarSVC), ) @@ -689,6 +695,7 @@ func TestService(t *testing.T) { } svc := newTestService( + zaptest.NewLogger(t), WithLabelSVC(mock.NewLabelService()), WithVariableSVC(fakeVarSVC), ) @@ -736,6 +743,7 @@ func TestService(t *testing.T) { } svc := newTestService( + zaptest.NewLogger(t), WithLabelSVC(mock.NewLabelService()), WithVariableSVC(fakeVarSVC), ) @@ -756,7 +764,7 @@ func TestService(t *testing.T) { t.Run("CreatePkg", func(t *testing.T) { t.Run("with metadata sets the new pkgs metadata", func(t *testing.T) { - svc := newTestService() + svc := newTestService(zaptest.NewLogger(t)) expectedMeta := Metadata{ Description: "desc", @@ -803,7 +811,7 @@ func TestService(t *testing.T) { return expected, nil } - svc := newTestService(WithBucketSVC(bktSVC), WithLabelSVC(mock.NewLabelService())) + svc := newTestService(zaptest.NewLogger(t), WithBucketSVC(bktSVC), WithLabelSVC(mock.NewLabelService())) resToClone := ResourceToClone{ Kind: KindBucket, @@ -1100,7 +1108,7 @@ func TestService(t *testing.T) { return nil, errors.New("wrongo ids") } - svc := newTestService(WithDashboardSVC(dashSVC), WithLabelSVC(mock.NewLabelService())) + svc := newTestService(zaptest.NewLogger(t), WithDashboardSVC(dashSVC), WithLabelSVC(mock.NewLabelService())) resToClone := ResourceToClone{ Kind: KindDashboard, @@ -1166,7 +1174,7 @@ func TestService(t *testing.T) { return expectedLabel, nil } - svc := newTestService(WithLabelSVC(labelSVC)) + svc := newTestService(zaptest.NewLogger(t), WithLabelSVC(labelSVC)) resToClone := ResourceToClone{ Kind: KindLabel, @@ -1258,7 +1266,7 @@ func TestService(t *testing.T) { return &tt.expectedVar, nil } - svc := newTestService(WithVariableSVC(varSVC), WithLabelSVC(mock.NewLabelService())) + svc := newTestService(zaptest.NewLogger(t), WithVariableSVC(varSVC), WithLabelSVC(mock.NewLabelService())) resToClone := ResourceToClone{ Kind: KindVariable, @@ -1311,7 +1319,7 @@ func TestService(t *testing.T) { }, nil } - svc := newTestService(WithBucketSVC(bktSVC), WithLabelSVC(labelSVC)) + svc := newTestService(zaptest.NewLogger(t), WithBucketSVC(bktSVC), WithLabelSVC(labelSVC)) resToClone := ResourceToClone{ Kind: KindBucket, @@ -1350,7 +1358,7 @@ func TestService(t *testing.T) { }, nil } - svc := newTestService(WithBucketSVC(bktSVC), WithLabelSVC(labelSVC)) + svc := newTestService(zaptest.NewLogger(t), WithBucketSVC(bktSVC), WithLabelSVC(labelSVC)) resourcesToClone := []ResourceToClone{ { @@ -1390,7 +1398,7 @@ func TestService(t *testing.T) { return nil, errors.New("should not get here") } - svc := newTestService(WithLabelSVC(labelSVC)) + svc := newTestService(zaptest.NewLogger(t), WithLabelSVC(labelSVC)) resToClone := ResourceToClone{ Kind: KindLabel, @@ -1474,6 +1482,7 @@ func TestService(t *testing.T) { } svc := newTestService( + zaptest.NewLogger(t), WithBucketSVC(bktSVC), WithDashboardSVC(dashSVC), WithLabelSVC(labelSVC), diff --git a/prometheus/auth_service_test.go b/prometheus/auth_service_test.go index b1ef540782..20eaca1432 100644 --- a/prometheus/auth_service_test.go +++ b/prometheus/auth_service_test.go @@ -9,6 +9,7 @@ import ( "github.com/influxdata/influxdb/kit/prom" "github.com/influxdata/influxdb/kit/prom/promtest" "github.com/influxdata/influxdb/prometheus" + "go.uber.org/zap" ) // authzSvc is a test helper that returns its Err from every method on the AuthorizationService interface. @@ -47,7 +48,7 @@ func TestAuthorizationService_Metrics(t *testing.T) { svc := prometheus.NewAuthorizationService() svc.AuthorizationService = a - reg := prom.NewRegistry() + reg := prom.NewRegistry(zap.NewNop()) reg.MustRegister(svc.PrometheusCollectors()...) ctx := context.Background() diff --git a/query/control/controller.go b/query/control/controller.go index 5dd97e34e4..bc23b31fc3 100644 --- a/query/control/controller.go +++ b/query/control/controller.go @@ -60,7 +60,7 @@ type Controller struct { metrics *controllerMetrics labelKeys []string - logger *zap.Logger + log *zap.Logger dependencies []flux.Dependency } @@ -177,7 +177,7 @@ func New(config Config) (*Controller, error) { done: make(chan struct{}), abort: make(chan struct{}), memory: mm, - logger: logger, + log: logger, metrics: newControllerMetrics(c.MetricLabelKeys), labelKeys: c.MetricLabelKeys, dependencies: c.ExecutorDependencies, @@ -320,7 +320,7 @@ func (c *Controller) compileQuery(q *Query, compiler flux.Compiler) (err error) if !ok { err = fmt.Errorf("panic: %v", e) } - if entry := c.logger.Check(zapcore.InfoLevel, "panic during compile"); entry != nil { + if entry := c.log.Check(zapcore.InfoLevel, "panic during compile"); entry != nil { entry.Stack = string(debug.Stack()) entry.Write(zap.Error(err)) } @@ -344,7 +344,7 @@ func (c *Controller) compileQuery(q *Query, compiler flux.Compiler) (err error) } if p, ok := prog.(lang.LoggingProgram); ok { - p.SetLogger(c.logger) + p.SetLogger(c.log) } q.program = prog @@ -393,7 +393,7 @@ func (c *Controller) executeQuery(q *Query) { err = fmt.Errorf("panic: %v", e) } q.setErr(err) - if entry := c.logger.Check(zapcore.InfoLevel, "panic during program start"); entry != nil { + if entry := c.log.Check(zapcore.InfoLevel, "panic during program start"); entry != nil { entry.Stack = string(debug.Stack()) entry.Write(zap.Error(err)) } diff --git a/query/logging.go b/query/logging.go index 2b52df38ea..5f3758e1c4 100644 --- a/query/logging.go +++ b/query/logging.go @@ -17,10 +17,23 @@ import ( // LoggingProxyQueryService wraps a ProxyQueryService and logs the queries. type LoggingProxyQueryService struct { - ProxyQueryService ProxyQueryService - QueryLogger Logger - NowFunction func() time.Time - Logger *zap.Logger + proxyQueryService ProxyQueryService + queryLogger Logger + nowFunction func() time.Time + log *zap.Logger +} + +func NewLoggingProxyQueryService(log *zap.Logger, queryLogger Logger, proxyQueryService ProxyQueryService) *LoggingProxyQueryService { + return &LoggingProxyQueryService{ + proxyQueryService: proxyQueryService, + queryLogger: queryLogger, + nowFunction: time.Now, + log: log, + } +} + +func (s *LoggingProxyQueryService) SetNowFunctionForTesting(nowFunction func() time.Time) { + s.nowFunction = nowFunction } // Query executes and logs the query. @@ -32,30 +45,24 @@ func (s *LoggingProxyQueryService) Query(ctx context.Context, w io.Writer, req * defer func() { if r := recover(); r != nil { err = fmt.Errorf("panic: %v", r) - if entry := s.Logger.Check(zapcore.InfoLevel, "QueryLogging panic"); entry != nil { + if entry := s.log.Check(zapcore.InfoLevel, "QueryLogging panic"); entry != nil { entry.Stack = string(debug.Stack()) entry.Write(zap.Error(err)) } } - var now time.Time - if s.NowFunction != nil { - now = s.NowFunction() - } else { - now = time.Now() - } log := Log{ OrganizationID: req.Request.OrganizationID, ProxyRequest: req, ResponseSize: n, - Time: now, + Time: s.nowFunction(), Statistics: stats, Error: err, } - s.QueryLogger.Log(log) + s.queryLogger.Log(log) }() wc := &iocounter.Writer{Writer: w} - stats, err = s.ProxyQueryService.Query(ctx, wc, req) + stats, err = s.proxyQueryService.Query(ctx, wc, req) if err != nil { return stats, tracing.LogError(span, err) } @@ -64,5 +71,5 @@ func (s *LoggingProxyQueryService) Query(ctx context.Context, w io.Writer, req * } func (s *LoggingProxyQueryService) Check(ctx context.Context) check.Response { - return s.ProxyQueryService.Check(ctx) + return s.proxyQueryService.Check(ctx) } diff --git a/query/logging_test.go b/query/logging_test.go index a892c62dfe..2f9a3f74e2 100644 --- a/query/logging_test.go +++ b/query/logging_test.go @@ -13,6 +13,7 @@ import ( platform "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/query" "github.com/influxdata/influxdb/query/mock" + "go.uber.org/zap" ) var orgID = MustIDBase16("ba55ba55ba55ba55") @@ -58,13 +59,10 @@ func TestLoggingProxyQueryService(t *testing.T) { } wantTime := time.Now() - lpqs := query.LoggingProxyQueryService{ - ProxyQueryService: pqs, - QueryLogger: logger, - NowFunction: func() time.Time { - return wantTime - }, - } + lpqs := query.NewLoggingProxyQueryService(zap.NewNop(), logger, pqs) + lpqs.SetNowFunctionForTesting(func() time.Time { + return wantTime + }) var buf bytes.Buffer req := &query.ProxyRequest{ diff --git a/task/backend/analytical_storage.go b/task/backend/analytical_storage.go index 644cd7f4f9..e3501b4ae0 100644 --- a/task/backend/analytical_storage.go +++ b/task/backend/analytical_storage.go @@ -34,9 +34,9 @@ type RunRecorder interface { } // NewAnalyticalRunStorage creates a new analytical store with access to the necessary systems for storing data and to act as a middleware -func NewAnalyticalRunStorage(logger *zap.Logger, ts influxdb.TaskService, bs influxdb.BucketService, tcs TaskControlService, rr RunRecorder, qs query.QueryService) *AnalyticalStorage { +func NewAnalyticalRunStorage(log *zap.Logger, ts influxdb.TaskService, bs influxdb.BucketService, tcs TaskControlService, rr RunRecorder, qs query.QueryService) *AnalyticalStorage { return &AnalyticalStorage{ - logger: logger, + log: log, TaskService: ts, BucketService: bs, TaskControlService: tcs, @@ -46,13 +46,13 @@ func NewAnalyticalRunStorage(logger *zap.Logger, ts influxdb.TaskService, bs inf } // NewAnalyticalStorage creates a new analytical store with access to the necessary systems for storing data and to act as a middleware (deprecated) -func NewAnalyticalStorage(logger *zap.Logger, ts influxdb.TaskService, bs influxdb.BucketService, tcs TaskControlService, pw storage.PointsWriter, qs query.QueryService) *AnalyticalStorage { +func NewAnalyticalStorage(log *zap.Logger, ts influxdb.TaskService, bs influxdb.BucketService, tcs TaskControlService, pw storage.PointsWriter, qs query.QueryService) *AnalyticalStorage { return &AnalyticalStorage{ - logger: logger, + log: log, TaskService: ts, BucketService: bs, TaskControlService: tcs, - rr: NewStoragePointsWriterRecorder(pw, logger), + rr: NewStoragePointsWriterRecorder(log, pw), qs: qs, } } @@ -62,9 +62,9 @@ type AnalyticalStorage struct { influxdb.BucketService TaskControlService - rr RunRecorder - qs query.QueryService - logger *zap.Logger + rr RunRecorder + qs query.QueryService + log *zap.Logger } func (as *AnalyticalStorage) FinishRun(ctx context.Context, taskID, runID influxdb.ID) (*influxdb.Run, error) { @@ -191,7 +191,7 @@ func (as *AnalyticalStorage) FindRuns(ctx context.Context, filter influxdb.RunFi } defer ittr.Release() - re := &runReader{logger: as.logger.With(zap.String("component", "run-reader"), zap.String("taskID", filter.Task.String()))} + re := &runReader{log: as.log.With(zap.String("component", "run-reader"), zap.String("taskID", filter.Task.String()))} for ittr.More() { err := ittr.Next().Tables().Do(re.readTable) if err != nil { @@ -338,8 +338,8 @@ func (as *AnalyticalStorage) RetryRun(ctx context.Context, taskID, runID influxd } type runReader struct { - runs []*influxdb.Run - logger *zap.Logger + runs []*influxdb.Run + log *zap.Logger } func (re *runReader) readTable(tbl flux.Table) error { @@ -355,7 +355,7 @@ func (re *runReader) readRuns(cr flux.ColReader) error { if cr.Strings(j).ValueString(i) != "" { id, err := influxdb.IDFromString(cr.Strings(j).ValueString(i)) if err != nil { - re.logger.Info("failed to parse runID", zap.Error(err)) + re.log.Info("Failed to parse runID", zap.Error(err)) continue } r.ID = *id @@ -364,7 +364,7 @@ func (re *runReader) readRuns(cr flux.ColReader) error { if cr.Strings(j).ValueString(i) != "" { id, err := influxdb.IDFromString(cr.Strings(j).ValueString(i)) if err != nil { - re.logger.Info("failed to parse taskID", zap.Error(err)) + re.log.Info("Failed to parse taskID", zap.Error(err)) continue } r.TaskID = *id @@ -372,21 +372,21 @@ func (re *runReader) readRuns(cr flux.ColReader) error { case startedAtField: started, err := time.Parse(time.RFC3339Nano, cr.Strings(j).ValueString(i)) if err != nil { - re.logger.Info("failed to parse startedAt time", zap.Error(err)) + re.log.Info("Failed to parse startedAt time", zap.Error(err)) continue } r.StartedAt = started.UTC() case requestedAtField: requested, err := time.Parse(time.RFC3339Nano, cr.Strings(j).ValueString(i)) if err != nil { - re.logger.Info("failed to parse requestedAt time", zap.Error(err)) + re.log.Info("Failed to parse requestedAt time", zap.Error(err)) continue } r.RequestedAt = requested.UTC() case scheduledForField: scheduled, err := time.Parse(time.RFC3339, cr.Strings(j).ValueString(i)) if err != nil { - re.logger.Info("failed to parse scheduledAt time", zap.Error(err)) + re.log.Info("Failed to parse scheduledAt time", zap.Error(err)) continue } r.ScheduledFor = scheduled.UTC() @@ -395,7 +395,7 @@ func (re *runReader) readRuns(cr flux.ColReader) error { case finishedAtField: finished, err := time.Parse(time.RFC3339Nano, cr.Strings(j).ValueString(i)) if err != nil { - re.logger.Info("failed to parse finishedAt time", zap.Error(err)) + re.log.Info("Failed to parse finishedAt time", zap.Error(err)) continue } r.FinishedAt = finished.UTC() @@ -404,7 +404,7 @@ func (re *runReader) readRuns(cr flux.ColReader) error { if len(logBytes) != 0 { err := json.Unmarshal(logBytes, &r.Log) if err != nil { - re.logger.Info("failed to parse log data", zap.Error(err), zap.ByteString("log_bytes", logBytes)) + re.log.Info("Failed to parse log data", zap.Error(err), zap.ByteString("log_bytes", logBytes)) } } } diff --git a/task/backend/analytical_storage_test.go b/task/backend/analytical_storage_test.go index fbcd8e5d83..c6ac1f902c 100644 --- a/task/backend/analytical_storage_test.go +++ b/task/backend/analytical_storage_test.go @@ -31,7 +31,7 @@ func TestAnalyticalStore(t *testing.T) { t, func(t *testing.T) (*servicetest.System, context.CancelFunc) { ctx, cancelFunc := context.WithCancel(context.Background()) - svc := kv.NewService(inmem.NewKVStore()) + svc := kv.NewService(zaptest.NewLogger(t), inmem.NewKVStore()) if err := svc.Initialize(ctx); err != nil { t.Fatalf("error initializing urm service: %v", err) } @@ -39,7 +39,7 @@ func TestAnalyticalStore(t *testing.T) { var ( ab = newAnalyticalBackend(t, svc, svc) logger = zaptest.NewLogger(t) - rr = backend.NewStoragePointsWriterRecorder(ab.PointsWriter(), logger) + rr = backend.NewStoragePointsWriterRecorder(logger, ab.PointsWriter()) svcStack = backend.NewAnalyticalRunStorage(logger, svc, svc, svc, rr, ab.QueryService()) ) @@ -63,7 +63,7 @@ func TestAnalyticalStore(t *testing.T) { } func TestDeduplicateRuns(t *testing.T) { - svc := kv.NewService(inmem.NewKVStore()) + svc := kv.NewService(zaptest.NewLogger(t), inmem.NewKVStore()) if err := svc.Initialize(context.Background()); err != nil { t.Fatalf("error initializing kv service: %v", err) } diff --git a/task/backend/coordinator.go b/task/backend/coordinator.go index e7a01e396c..fc006d9efe 100644 --- a/task/backend/coordinator.go +++ b/task/backend/coordinator.go @@ -26,7 +26,7 @@ type Coordinator interface { // NotifyCoordinatorOfExisting lists all tasks by the provided task service and for // each task it calls the provided coordinators task created method -func NotifyCoordinatorOfExisting(ctx context.Context, ts TaskService, coord Coordinator, logger *zap.Logger) error { +func NotifyCoordinatorOfExisting(ctx context.Context, log *zap.Logger, ts TaskService, coord Coordinator) error { // If we missed a Create Action tasks, _, err := ts.FindTasks(ctx, influxdb.TaskFilter{}) if err != nil { @@ -44,7 +44,7 @@ func NotifyCoordinatorOfExisting(ctx context.Context, ts TaskService, coord Coor LatestCompleted: &latestCompleted, }) if err != nil { - logger.Error("failed to set latestCompleted", zap.Error(err)) + log.Error("Failed to set latestCompleted", zap.Error(err)) continue } @@ -67,7 +67,7 @@ type TaskResumer func(ctx context.Context, id influxdb.ID, runID influxdb.ID) er // TaskNotifyCoordinatorOfExisting lists all tasks by the provided task service and for // each task it calls the provided coordinators task created method // TODO(docmerlin): this is temporary untill the executor queue is persistent -func TaskNotifyCoordinatorOfExisting(ctx context.Context, ts TaskService, tcs TaskControlService, coord Coordinator, exec TaskResumer, logger *zap.Logger) error { +func TaskNotifyCoordinatorOfExisting(ctx context.Context, ts TaskService, tcs TaskControlService, coord Coordinator, exec TaskResumer, log *zap.Logger) error { // If we missed a Create Action tasks, _, err := ts.FindTasks(ctx, influxdb.TaskFilter{}) if err != nil { @@ -85,7 +85,7 @@ func TaskNotifyCoordinatorOfExisting(ctx context.Context, ts TaskService, tcs Ta LatestCompleted: &latestCompleted, }) if err != nil { - logger.Error("failed to set latestCompleted", zap.Error(err)) + log.Error("Failed to set latestCompleted", zap.Error(err)) continue } diff --git a/task/backend/coordinator/coordinator.go b/task/backend/coordinator/coordinator.go index 688f54f096..dbe8707380 100644 --- a/task/backend/coordinator/coordinator.go +++ b/task/backend/coordinator/coordinator.go @@ -12,8 +12,8 @@ import ( var _ middleware.Coordinator = (*Coordinator)(nil) type Coordinator struct { - logger *zap.Logger - sch backend.Scheduler + log *zap.Logger + sch backend.Scheduler limit int } @@ -26,11 +26,11 @@ func WithLimit(i int) Option { } } -func New(logger *zap.Logger, scheduler backend.Scheduler, opts ...Option) *Coordinator { +func New(log *zap.Logger, scheduler backend.Scheduler, opts ...Option) *Coordinator { c := &Coordinator{ - logger: logger, - sch: scheduler, - limit: 1000, + log: log, + sch: scheduler, + limit: 1000, } for _, opt := range opts { diff --git a/task/backend/coordinator/coordinator_test.go b/task/backend/coordinator/coordinator_test.go index 402bbf72b9..9e1dd5489e 100644 --- a/task/backend/coordinator/coordinator_test.go +++ b/task/backend/coordinator/coordinator_test.go @@ -7,7 +7,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/task/backend/scheduler" - "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) var ( @@ -184,7 +184,7 @@ func Test_Coordinator(t *testing.T) { updateErr: test.updateErr, releaseErr: test.releaseErr, } - coord = New(zap.NewNop(), scheduler) + coord = New(zaptest.NewLogger(t), scheduler) ) test.call(t, coord) diff --git a/task/backend/coordinator/task_coordinator.go b/task/backend/coordinator/task_coordinator.go index 83217cfe74..dd0d3fdb17 100644 --- a/task/backend/coordinator/task_coordinator.go +++ b/task/backend/coordinator/task_coordinator.go @@ -27,9 +27,9 @@ type Executor interface { // TaskCoordinator (temporary name) is the intermediary between the scheduling/executing system and the rest of the task system type TaskCoordinator struct { - logger *zap.Logger - sch scheduler.Scheduler - ex Executor + log *zap.Logger + sch scheduler.Scheduler + ex Executor limit int } @@ -90,12 +90,12 @@ func NewSchedulableTask(task *influxdb.Task) (SchedulableTask, error) { return t, nil } -func NewCoordinator(logger *zap.Logger, scheduler scheduler.Scheduler, executor Executor, opts ...CoordinatorOption) *TaskCoordinator { +func NewCoordinator(log *zap.Logger, scheduler scheduler.Scheduler, executor Executor, opts ...CoordinatorOption) *TaskCoordinator { c := &TaskCoordinator{ - logger: logger, - sch: scheduler, - ex: executor, - limit: DefaultLimit, + log: log, + sch: scheduler, + ex: executor, + limit: DefaultLimit, } for _, opt := range opts { diff --git a/task/backend/coordinator/task_coordinator_test.go b/task/backend/coordinator/task_coordinator_test.go index a4d219572e..c24c0e5ccb 100644 --- a/task/backend/coordinator/task_coordinator_test.go +++ b/task/backend/coordinator/task_coordinator_test.go @@ -5,12 +5,11 @@ import ( "testing" "time" - "github.com/google/go-cmp/cmp/cmpopts" - "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/task/backend/scheduler" - "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) func Test_Coordinator_Executor_Methods(t *testing.T) { @@ -79,7 +78,7 @@ func Test_Coordinator_Executor_Methods(t *testing.T) { var ( executor = &executorE{} scheduler = &schedulerC{} - coord = NewCoordinator(zap.NewNop(), scheduler, executor) + coord = NewCoordinator(zaptest.NewLogger(t), scheduler, executor) ) test.call(t, coord) @@ -219,7 +218,7 @@ func Test_Coordinator_Scheduler_Methods(t *testing.T) { var ( executor = &executorE{} sch = &schedulerC{} - coord = NewCoordinator(zap.NewNop(), sch, executor) + coord = NewCoordinator(zaptest.NewLogger(t), sch, executor) ) test.call(t, coord) diff --git a/task/backend/coordinator_test.go b/task/backend/coordinator_test.go index b564c7dea9..e0171e82a4 100644 --- a/task/backend/coordinator_test.go +++ b/task/backend/coordinator_test.go @@ -7,7 +7,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/influxdata/influxdb" - "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) var ( @@ -50,7 +50,7 @@ func Test_NotifyCoordinatorOfCreated(t *testing.T) { now = func() time.Time { return aTime } - if err := NotifyCoordinatorOfExisting(context.Background(), tasks, coordinator, zap.NewNop()); err != nil { + if err := NotifyCoordinatorOfExisting(context.Background(), zaptest.NewLogger(t), tasks, coordinator); err != nil { t.Errorf("expected nil, found %q", err) } diff --git a/task/backend/executor/executor.go b/task/backend/executor/executor.go index 4f1858e947..62be57a8c9 100644 --- a/task/backend/executor/executor.go +++ b/task/backend/executor/executor.go @@ -20,11 +20,11 @@ import ( // queryServiceExecutor is an implementation of backend.Executor that depends on a QueryService. type queryServiceExecutor struct { - qs query.QueryService - as influxdb.AuthorizationService - ts influxdb.TaskService - logger *zap.Logger - wg sync.WaitGroup + qs query.QueryService + as influxdb.AuthorizationService + ts influxdb.TaskService + log *zap.Logger + wg sync.WaitGroup } var _ backend.Executor = (*queryServiceExecutor)(nil) @@ -32,8 +32,8 @@ var _ backend.Executor = (*queryServiceExecutor)(nil) // NewQueryServiceExecutor returns a new executor based on the given QueryService. // In general, you should prefer NewAsyncQueryServiceExecutor, as that code is smaller and simpler, // because asynchronous queries are more in line with the Executor interface. -func NewQueryServiceExecutor(logger *zap.Logger, qs query.QueryService, as influxdb.AuthorizationService, ts influxdb.TaskService) *queryServiceExecutor { - return &queryServiceExecutor{logger: logger, qs: qs, as: as, ts: ts} +func NewQueryServiceExecutor(log *zap.Logger, qs query.QueryService, as influxdb.AuthorizationService, ts influxdb.TaskService) *queryServiceExecutor { + return &queryServiceExecutor{log: log, qs: qs, as: as, ts: ts} } // AddTaskService is a temporary solution to a chicken and egg problem. It takes a executor and sets the task service. @@ -72,7 +72,7 @@ type syncRunPromise struct { t *influxdb.Task ctx context.Context cancel context.CancelFunc - logger *zap.Logger + log *zap.Logger logEnd func() // Called to log the end of the run operation. finishOnce sync.Once // Ensure we set the values only once. @@ -85,14 +85,14 @@ var _ backend.RunPromise = (*syncRunPromise)(nil) func newSyncRunPromise(ctx context.Context, auth *influxdb.Authorization, qr backend.QueuedRun, e *queryServiceExecutor, t *influxdb.Task) *syncRunPromise { ctx, cancel := context.WithCancel(ctx) - opLogger := e.logger.With(zap.Stringer("task_id", qr.TaskID), zap.Stringer("run_id", qr.RunID)) + opLogger := e.log.With(zap.Stringer("task_id", qr.TaskID), zap.Stringer("run_id", qr.RunID)) log, logEnd := logger.NewOperation(ctx, opLogger, "Executing task", "execute") rp := &syncRunPromise{ qr: qr, auth: auth, qs: e.qs, t: t, - logger: log, + log: log, logEnd: logEnd, ctx: ctx, cancel: cancel, @@ -137,11 +137,11 @@ func (p *syncRunPromise) finish(res *runResult, err error) { close(p.ready) if err != nil { - p.logger.Debug("Execution failed to get result", zap.Error(err)) + p.log.Debug("Execution failed to get result", zap.Error(err)) } else if res.err != nil { - p.logger.Debug("Got result with error", zap.Error(res.err)) + p.log.Debug("Got result with error", zap.Error(res.err)) } else { - p.logger.Debug("Completed successfully") + p.log.Debug("Completed successfully") } }) } @@ -176,7 +176,7 @@ func (p *syncRunPromise) doQuery(wg *sync.WaitGroup) { // Consume the full iterator so that we don't leak outstanding iterators. res := it.Next() if err = exhaustResultIterators(res); err != nil { - p.logger.Info("Error exhausting result iterator", zap.Error(err), zap.String("name", res.Name())) + p.log.Info("Error exhausting result iterator", zap.Error(err), zap.String("name", res.Name())) } } @@ -208,18 +208,18 @@ func (p *syncRunPromise) cancelOnContextDone(wg *sync.WaitGroup) { // asyncQueryServiceExecutor is an implementation of backend.Executor that depends on an AsyncQueryService. type asyncQueryServiceExecutor struct { - qs query.AsyncQueryService - as influxdb.AuthorizationService - ts influxdb.TaskService - logger *zap.Logger - wg sync.WaitGroup + qs query.AsyncQueryService + as influxdb.AuthorizationService + ts influxdb.TaskService + log *zap.Logger + wg sync.WaitGroup } var _ backend.Executor = (*asyncQueryServiceExecutor)(nil) // NewAsyncQueryServiceExecutor returns a new executor based on the given AsyncQueryService. -func NewAsyncQueryServiceExecutor(logger *zap.Logger, qs query.AsyncQueryService, as influxdb.AuthorizationService, ts influxdb.TaskService) backend.Executor { - return &asyncQueryServiceExecutor{logger: logger, qs: qs, as: as, ts: ts} +func NewAsyncQueryServiceExecutor(log *zap.Logger, qs query.AsyncQueryService, as influxdb.AuthorizationService, ts influxdb.TaskService) backend.Executor { + return &asyncQueryServiceExecutor{log: log, qs: qs, as: as, ts: ts} } func (e *asyncQueryServiceExecutor) Execute(ctx context.Context, run backend.QueuedRun) (backend.RunPromise, error) { @@ -243,7 +243,7 @@ type asyncRunPromise struct { t *influxdb.Task ctx context.Context - logger *zap.Logger + log *zap.Logger logEnd func() // Called to log the end of the run operation. finishOnce sync.Once // Ensure we set the values only once. @@ -258,7 +258,7 @@ func newAsyncRunPromise(ctx context.Context, auth *influxdb.Authorization, qr ba span, ctx := tracing.StartSpanFromContext(ctx) defer span.Finish() - opLogger := e.logger.With(zap.Stringer("task_id", qr.TaskID), zap.Stringer("run_id", qr.RunID)) + opLogger := e.log.With(zap.Stringer("task_id", qr.TaskID), zap.Stringer("run_id", qr.RunID)) log, logEnd := logger.NewOperation(ctx, opLogger, "Executing task", "execute") p := &asyncRunPromise{ @@ -266,7 +266,7 @@ func newAsyncRunPromise(ctx context.Context, auth *influxdb.Authorization, qr ba auth: auth, qs: e.qs, t: t, - logger: log, + log: log, logEnd: logEnd, ctx: ctx, ready: make(chan struct{}), @@ -342,7 +342,7 @@ SelectLoop: go func() { defer rwg.Done() if err := exhaustResultIterators(r); err != nil { - p.logger.Info("Error exhausting result iterator", zap.Error(err), zap.String("name", r.Name())) + p.log.Info("Error exhausting result iterator", zap.Error(err), zap.String("name", r.Name())) } }() } @@ -371,11 +371,11 @@ func (p *asyncRunPromise) finish(res *runResult, err error) { close(p.ready) if err != nil { - p.logger.Info("Execution failed to get result", zap.Error(err)) + p.log.Info("Execution failed to get result", zap.Error(err)) } else if res.err != nil { - p.logger.Info("Got result with error", zap.Error(res.err)) + p.log.Info("Got result with error", zap.Error(res.err)) } else { - p.logger.Debug("Completed successfully") + p.log.Debug("Completed successfully") } }) } diff --git a/task/backend/executor/executor_test.go b/task/backend/executor/executor_test.go index 8b07234549..5443d705ce 100644 --- a/task/backend/executor/executor_test.go +++ b/task/backend/executor/executor_test.go @@ -23,7 +23,7 @@ import ( "github.com/influxdata/influxdb/query" _ "github.com/influxdata/influxdb/query/builtin" "github.com/influxdata/influxdb/task/backend" - "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) type fakeQueryService struct { @@ -266,12 +266,12 @@ type system struct { store *inmem.KVStore } -type createSysFn func() *system +type createSysFn func(*testing.T) *system -func createAsyncSystem() *system { +func createAsyncSystem(t *testing.T) *system { svc := newFakeQueryService() store := inmem.NewKVStore() - i := kv.NewService(store) + i := kv.NewService(zaptest.NewLogger(t), store) if err := i.Initialize(context.Background()); err != nil { panic(err) } @@ -280,15 +280,15 @@ func createAsyncSystem() *system { name: "AsyncExecutor", svc: svc, ts: i, - ex: NewAsyncQueryServiceExecutor(zap.NewNop(), svc, i, i), + ex: NewAsyncQueryServiceExecutor(zaptest.NewLogger(t), svc, i, i), i: i, store: store, } } -func createSyncSystem() *system { +func createSyncSystem(t *testing.T) *system { svc := newFakeQueryService() - i := kv.NewService(inmem.NewKVStore()) + i := kv.NewService(zaptest.NewLogger(t), inmem.NewKVStore()) if err := i.Initialize(context.Background()); err != nil { panic(err) } @@ -298,7 +298,7 @@ func createSyncSystem() *system { svc: svc, ts: i, ex: NewQueryServiceExecutor( - zap.NewNop(), + zaptest.NewLogger(t), query.QueryServiceBridge{ AsyncQueryService: svc, }, @@ -331,7 +331,7 @@ option task = { from(bucket: "one") |> to(bucket: "two", orgID: "0000000000000000")` func testExecutorQuerySuccess(t *testing.T, fn createSysFn) { - sys := fn() + sys := fn(t) tc := createCreds(t, sys.i) t.Run(sys.name+"/QuerySuccess", func(t *testing.T) { t.Parallel() @@ -386,7 +386,7 @@ func testExecutorQuerySuccess(t *testing.T, fn createSysFn) { } func testExecutorQueryFailure(t *testing.T, fn createSysFn) { - sys := fn() + sys := fn(t) tc := createCreds(t, sys.i) t.Run(sys.name+"/QueryFail", func(t *testing.T) { t.Parallel() @@ -433,7 +433,7 @@ func errTr(x error) string { } func testExecutorExecuteErrors(t *testing.T, fn createSysFn) { - sys := fn() + sys := fn(t) t.Run(sys.name+"/Execute", func(t *testing.T) { t.Run("no task", func(t *testing.T) { t.Parallel() @@ -447,7 +447,7 @@ func testExecutorExecuteErrors(t *testing.T, fn createSysFn) { } func testExecutorPromiseCancel(t *testing.T, fn createSysFn) { - sys := fn() + sys := fn(t) tc := createCreds(t, sys.i) t.Run(sys.name+"/PromiseCancel", func(t *testing.T) { t.Parallel() @@ -476,7 +476,7 @@ func testExecutorPromiseCancel(t *testing.T, fn createSysFn) { } func testExecutorServiceError(t *testing.T, fn createSysFn) { - sys := fn() + sys := fn(t) tc := createCreds(t, sys.i) t.Run(sys.name+"/ServiceError", func(t *testing.T) { t.Parallel() @@ -521,10 +521,10 @@ func testExecutorWait(t *testing.T, createSys createSysFn) { // For this set of tests, we are testing Wait, which does not allow calling Execute concurrently, // so we make a new sys for each subtest. - t.Run(createSys().name+"/Wait", func(t *testing.T) { + t.Run(createSys(t).name+"/Wait", func(t *testing.T) { t.Run("with nothing running", func(t *testing.T) { t.Parallel() - sys := createSys() + sys := createSys(t) executorWaited := make(chan struct{}) go func() { @@ -542,7 +542,7 @@ func testExecutorWait(t *testing.T, createSys createSysFn) { t.Run("cancel execute context", func(t *testing.T) { t.Parallel() - sys := createSys() + sys := createSys(t) tc := createCreds(t, sys.i) ctx, ctxCancel := context.WithCancel(context.Background()) @@ -584,7 +584,7 @@ func testExecutorWait(t *testing.T, createSys createSysFn) { t.Run("cancel run promise", func(t *testing.T) { t.Parallel() - sys := createSys() + sys := createSys(t) tc := createCreds(t, sys.i) ctx := icontext.SetAuthorizer(context.Background(), tc.Auth) @@ -625,7 +625,7 @@ func testExecutorWait(t *testing.T, createSys createSysFn) { t.Run("run success", func(t *testing.T) { t.Parallel() - sys := createSys() + sys := createSys(t) tc := createCreds(t, sys.i) ctx := icontext.SetAuthorizer(context.Background(), tc.Auth) @@ -666,7 +666,7 @@ func testExecutorWait(t *testing.T, createSys createSysFn) { t.Run("run failure", func(t *testing.T) { t.Parallel() - sys := createSys() + sys := createSys(t) tc := createCreds(t, sys.i) script := fmt.Sprintf(fmtTestScript, t.Name()) diff --git a/task/backend/executor/task_executor.go b/task/backend/executor/task_executor.go index 87eb0e29c2..725e078317 100644 --- a/task/backend/executor/task_executor.go +++ b/task/backend/executor/task_executor.go @@ -43,13 +43,13 @@ func MultiLimit(limits ...LimitFunc) LimitFunc { type LimitFunc func(*influxdb.Task, *influxdb.Run) error // NewExecutor creates a new task executor -func NewExecutor(logger *zap.Logger, qs query.QueryService, as influxdb.AuthorizationService, ts influxdb.TaskService, tcs backend.TaskControlService) (*TaskExecutor, *ExecutorMetrics) { +func NewExecutor(log *zap.Logger, qs query.QueryService, as influxdb.AuthorizationService, ts influxdb.TaskService, tcs backend.TaskControlService) (*TaskExecutor, *ExecutorMetrics) { te := &TaskExecutor{ - logger: logger, - ts: ts, - tcs: tcs, - qs: qs, - as: as, + log: log, + ts: ts, + tcs: tcs, + qs: qs, + as: as, currentPromises: sync.Map{}, promiseQueue: make(chan *promise, 1000), //TODO(lh): make this configurable @@ -69,9 +69,9 @@ func NewExecutor(logger *zap.Logger, qs query.QueryService, as influxdb.Authoriz // TaskExecutor it a task specific executor that works with the new scheduler system. type TaskExecutor struct { - logger *zap.Logger - ts influxdb.TaskService - tcs backend.TaskControlService + log *zap.Logger + ts influxdb.TaskService + tcs backend.TaskControlService qs query.QueryService as influxdb.AuthorizationService @@ -332,7 +332,7 @@ func (w *worker) finish(p *promise, rs backend.RunStatus, err error) { // log error if err != nil { w.te.tcs.AddRunLog(p.ctx, p.task.ID, p.run.ID, time.Now().UTC(), err.Error()) - w.te.logger.Debug("execution failed", zap.Error(err), zap.String("taskID", p.task.ID.String())) + w.te.log.Debug("Execution failed", zap.Error(err), zap.String("taskID", p.task.ID.String())) w.te.metrics.LogError(p.task.Type, err) if backend.IsUnrecoverable(err) { @@ -349,11 +349,11 @@ func (w *worker) finish(p *promise, rs backend.RunStatus, err error) { p.err = err } else { - w.te.logger.Debug("Completed successfully", zap.String("taskID", p.task.ID.String())) + w.te.log.Debug("Completed successfully", zap.String("taskID", p.task.ID.String())) } if _, err := w.te.tcs.FinishRun(p.ctx, p.task.ID, p.run.ID); err != nil { - w.te.logger.Error("Failed to finish run", zap.String("taskID", p.task.ID.String()), zap.String("runID", p.run.ID.String()), zap.Error(err)) + w.te.log.Error("Failed to finish run", zap.String("taskID", p.task.ID.String()), zap.String("runID", p.run.ID.String()), zap.Error(err)) } } @@ -394,7 +394,7 @@ func (w *worker) executeQuery(p *promise) { // Consume the full iterator so that we don't leak outstanding iterators. res := it.Next() if runErr = w.exhaustResultIterators(res); runErr != nil { - w.te.logger.Info("Error exhausting result iterator", zap.Error(runErr), zap.String("name", res.Name())) + w.te.log.Info("Error exhausting result iterator", zap.Error(runErr), zap.String("name", res.Name())) } } diff --git a/task/backend/executor/task_executor_test.go b/task/backend/executor/task_executor_test.go index a1c4e1e34e..7b797924f3 100644 --- a/task/backend/executor/task_executor_test.go +++ b/task/backend/executor/task_executor_test.go @@ -36,7 +36,7 @@ func taskExecutorSystem(t *testing.T) tes { AsyncQueryService: aqs, } - i := kv.NewService(inmem.NewKVStore()) + i := kv.NewService(zaptest.NewLogger(t), inmem.NewKVStore()) ex, metrics := NewExecutor(zaptest.NewLogger(t), qs, i, i, taskControlService{i}) return tes{ @@ -301,7 +301,7 @@ func testMetrics(t *testing.T) { t.Parallel() tes := taskExecutorSystem(t) metrics := tes.metrics - reg := prom.NewRegistry() + reg := prom.NewRegistry(zaptest.NewLogger(t)) reg.MustRegister(metrics.PrometheusCollectors()...) mg := promtest.MustGather(t, reg) @@ -433,7 +433,7 @@ func testErrorHandling(t *testing.T) { tes := taskExecutorSystem(t) metrics := tes.metrics - reg := prom.NewRegistry() + reg := prom.NewRegistry(zaptest.NewLogger(t)) reg.MustRegister(metrics.PrometheusCollectors()...) script := fmt.Sprintf(fmtTestScript, t.Name()) diff --git a/task/backend/read_table_test.go b/task/backend/read_table_test.go index 5c9ee85593..f192373994 100644 --- a/task/backend/read_table_test.go +++ b/task/backend/read_table_test.go @@ -6,7 +6,7 @@ import ( "testing" "github.com/influxdata/flux/csv" - "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) func TestReadTable(t *testing.T) { @@ -24,7 +24,7 @@ func TestReadTable(t *testing.T) { } defer itr.Release() - re := &runReader{logger: zap.NewNop()} + re := &runReader{log: zaptest.NewLogger(t)} for itr.More() { err := itr.Next().Tables().Do(re.readTable) diff --git a/task/backend/run_recorder.go b/task/backend/run_recorder.go index eb0ae388c9..cb7337937b 100644 --- a/task/backend/run_recorder.go +++ b/task/backend/run_recorder.go @@ -18,12 +18,12 @@ import ( type StoragePointsWriterRecorder struct { pw storage.PointsWriter - logger *zap.Logger + log *zap.Logger } // NewStoragePointsWriterRecorder configures and returns a new *StoragePointsWriterRecorder -func NewStoragePointsWriterRecorder(pw storage.PointsWriter, logger *zap.Logger) *StoragePointsWriterRecorder { - return &StoragePointsWriterRecorder{pw, logger} +func NewStoragePointsWriterRecorder(log *zap.Logger, pw storage.PointsWriter) *StoragePointsWriterRecorder { + return &StoragePointsWriterRecorder{pw, log} } // Record formats the provided run as a models.Point and writes the resulting @@ -40,7 +40,7 @@ func (s *StoragePointsWriterRecorder) Record(ctx context.Context, orgID influxdb run.StartedAt.IsZero() || run.FinishedAt.IsZero() || run.Status == "" { - s.logger.Error("Run missing critical fields", zap.String("run", fmt.Sprintf("%+v", run)), zap.String("runID", run.ID.String())) + s.log.Error("Run missing critical fields", zap.String("run", fmt.Sprintf("%+v", run)), zap.String("runID", run.ID.String())) } fields := map[string]interface{}{} diff --git a/task/backend/scheduler.go b/task/backend/scheduler.go index c1165ef6d9..a250a365ad 100644 --- a/task/backend/scheduler.go +++ b/task/backend/scheduler.go @@ -158,22 +158,14 @@ func WithMaxConcurrency(ctx context.Context, d int) TickSchedulerOption { } } -// WithLogger sets the logger for the scheduler. -// If not set, the scheduler will use a no-op logger. -func WithLogger(logger *zap.Logger) TickSchedulerOption { - return func(s *TickScheduler) { - s.logger = logger.With(zap.String("svc", "taskd/scheduler")) - } -} - // NewScheduler returns a new scheduler with the given desired state and the given now UTC timestamp. -func NewScheduler(taskControlService TaskControlService, executor Executor, now int64, opts ...TickSchedulerOption) *TickScheduler { +func NewScheduler(log *zap.Logger, taskControlService TaskControlService, executor Executor, now int64, opts ...TickSchedulerOption) *TickScheduler { o := &TickScheduler{ taskControlService: taskControlService, executor: executor, now: now, taskSchedulers: make(map[platform.ID]*taskScheduler), - logger: zap.NewNop(), + log: log, wg: &sync.WaitGroup{}, metrics: newSchedulerMetrics(), maxConcurrency: 1, @@ -193,7 +185,7 @@ type TickScheduler struct { executor Executor maxConcurrency int - logger *zap.Logger + log *zap.Logger metrics *schedulerMetrics @@ -254,7 +246,7 @@ func (s *TickScheduler) Tick(now int64) { } } // TODO(mr): find a way to emit a more useful / less annoying tick message, maybe aggregated over the past 10s or 30s? - s.logger.Debug("Ticked", zap.Int64("now", now), zap.Int("tasks_affected", affected)) + s.log.Debug("Ticked", zap.Int64("now", now), zap.Int("tasks_affected", affected)) } func (s *TickScheduler) Start(ctx context.Context) { @@ -393,7 +385,7 @@ func (s *TickScheduler) UpdateTask(authCtx context.Context, task *platform.Task) if maxC > len(ts.runners) { delta := maxC - len(ts.runners) for i := 0; i < delta; i++ { - ts.runners = append(ts.runners, newRunner(s.ctx, authCtx, ts.wg, s.logger, task, s.taskControlService, s.executor, ts)) + ts.runners = append(ts.runners, newRunner(s.ctx, authCtx, ts.wg, s.log, task, s.taskControlService, s.executor, ts)) } } ts.runningMu.Unlock() @@ -451,7 +443,7 @@ type taskScheduler struct { running map[platform.ID]runCtx runningMu sync.Mutex - logger *zap.Logger + log *zap.Logger metrics *schedulerMetrics @@ -497,7 +489,7 @@ func newTaskScheduler( wg: wg, runners: make([]*runner, maxC), running: make(map[platform.ID]runCtx, maxC), - logger: s.logger.With(zap.String("task_id", task.ID.String())), + log: s.log.With(zap.String("task_id", task.ID.String())), metrics: s.metrics, nextDue: firstDue, nextDueSource: math.MinInt64, @@ -505,7 +497,7 @@ func newTaskScheduler( } for i := range ts.runners { - logger := ts.logger.With(zap.Int("run_slot", i)) + logger := ts.log.With(zap.Int("run_slot", i)) ts.runners[i] = newRunner(ctx, authCtx, wg, logger, task, s.taskControlService, s.executor, ts) } @@ -590,14 +582,14 @@ type runner struct { // Parent taskScheduler. ts *taskScheduler - logger *zap.Logger + log *zap.Logger } func newRunner( ctx context.Context, authCtx context.Context, wg *sync.WaitGroup, - logger *zap.Logger, + log *zap.Logger, task *platform.Task, taskControlService TaskControlService, executor Executor, @@ -612,7 +604,7 @@ func newRunner( taskControlService: taskControlService, executor: executor, ts: ts, - logger: logger, + log: log, } } @@ -652,7 +644,7 @@ func (r *runner) RestartRun(qr QueuedRun) bool { return false } // create a QueuedRun because we cant stm.CreateNextRun - runLogger := r.logger.With(zap.String("run_id", qr.RunID.String()), zap.Int64("now", qr.Now)) + runLogger := r.log.With(zap.String("run_id", qr.RunID.String()), zap.Int64("now", qr.Now)) r.wg.Add(1) r.ts.runningMu.Lock() rCtx, ok := r.ts.running[qr.RunID] @@ -683,7 +675,7 @@ func (r *runner) startFromWorking(now int64) { ctx, cancel := context.WithCancel(ctx) rc, err := r.taskControlService.CreateNextRun(ctx, r.task.ID, now) if err != nil { - r.logger.Info("Failed to create run", zap.Error(err)) + r.log.Info("Failed to create run", zap.Error(err)) atomic.StoreUint32(r.state, runnerIdle) cancel() // cancel to prevent context leak return @@ -697,7 +689,7 @@ func (r *runner) startFromWorking(now int64) { // Create a new child logger for the individual run. // We can't do r.logger = r.logger.With(zap.String("run_id", qr.RunID.String()) because zap doesn't deduplicate fields, // and we'll quickly end up with many run_ids associated with the log. - runLogger := r.logger.With(logger.TraceID(ctx), zap.String("run_id", qr.RunID.String()), zap.Int64("now", qr.Now)) + runLogger := r.log.With(logger.TraceID(ctx), zap.String("run_id", qr.RunID.String()), zap.Int64("now", qr.Now)) runLogger.Debug("Created run; beginning execution") r.wg.Add(1) @@ -713,17 +705,17 @@ func (r *runner) clearRunning(id platform.ID) { } // fail sets r's state to failed, and marks this runner as idle. -func (r *runner) fail(qr QueuedRun, runLogger *zap.Logger, stage string, reason error) { +func (r *runner) fail(qr QueuedRun, runLog *zap.Logger, stage string, reason error) { if err := r.taskControlService.AddRunLog(r.ts.authCtx, r.task.ID, qr.RunID, time.Now(), stage+": "+reason.Error()); err != nil { - runLogger.Info("Failed to update run log", zap.Error(err)) + runLog.Info("Failed to update run log", zap.Error(err)) } - r.updateRunState(qr, RunFail, runLogger, reason) + r.updateRunState(qr, RunFail, runLog, reason) atomic.StoreUint32(r.state, runnerIdle) } -func (r *runner) executeAndWait(ctx context.Context, qr QueuedRun, runLogger *zap.Logger) { - r.updateRunState(qr, RunStarted, runLogger, nil) +func (r *runner) executeAndWait(ctx context.Context, qr QueuedRun, runLog *zap.Logger) { + r.updateRunState(qr, RunStarted, runLog, nil) qr.startedAt = time.Now() defer r.wg.Done() errMsg := "Failed to finish run" @@ -731,7 +723,7 @@ func (r *runner) executeAndWait(ctx context.Context, qr QueuedRun, runLogger *za if _, err := r.taskControlService.FinishRun(r.authCtx, qr.TaskID, qr.RunID); err != nil { // TODO(mr): Need to figure out how to reconcile this error, on the next run, if it happens. - runLogger.Error(errMsg, zap.Error(err)) + runLog.Error(errMsg, zap.Error(err)) atomic.StoreUint32(r.state, runnerIdle) } @@ -742,11 +734,11 @@ func (r *runner) executeAndWait(ctx context.Context, qr QueuedRun, runLogger *za rp, err := r.executor.Execute(spCtx, qr) if err != nil { - runLogger.Info("Failed to begin run execution", zap.Error(err)) + runLog.Info("Failed to begin run execution", zap.Error(err)) errMsg = "Beginning run execution failed, " + errMsg // TODO(mr): retry? - r.fail(qr, runLogger, "Run failed to begin execution", influxdb.ErrRunExecutionError(err)) + r.fail(qr, runLog, "Run failed to begin execution", influxdb.ErrRunExecutionError(err)) return } @@ -772,25 +764,25 @@ func (r *runner) executeAndWait(ctx context.Context, qr QueuedRun, runLogger *za close(ready) if err != nil { if err == platform.ErrRunCanceled { - r.updateRunState(qr, RunCanceled, runLogger, err) + r.updateRunState(qr, RunCanceled, runLog, err) errMsg = "Waiting for execution result failed, " + errMsg // Move on to the next execution, for a canceled run. r.startFromWorking(atomic.LoadInt64(r.ts.now)) return } - runLogger.Info("Failed to wait for execution result", zap.Error(err)) + runLog.Info("Failed to wait for execution result", zap.Error(err)) // TODO(mr): retry? - r.fail(qr, runLogger, "Waiting for execution result", influxdb.ErrRunExecutionError(err)) + r.fail(qr, runLog, "Waiting for execution result", influxdb.ErrRunExecutionError(err)) return } if err := rr.Err(); err != nil { - runLogger.Info("Run failed to execute", zap.Error(err)) + runLog.Info("Run failed to execute", zap.Error(err)) errMsg = "Run failed to execute, " + errMsg // TODO(mr): retry? - r.fail(qr, runLogger, "Run failed to execute", influxdb.ErrRunExecutionError(err)) + r.fail(qr, runLog, "Run failed to execute", influxdb.ErrRunExecutionError(err)) return } @@ -806,14 +798,14 @@ func (r *runner) executeAndWait(ctx context.Context, qr QueuedRun, runLogger *za r.ts.nextDueMu.RUnlock() r.taskControlService.AddRunLog(authCtx, r.task.ID, qr.RunID, time.Now(), string(b)) } - r.updateRunState(qr, RunSuccess, runLogger, err) - runLogger.Debug("Execution succeeded") + r.updateRunState(qr, RunSuccess, runLog, err) + runLog.Debug("Execution succeeded") // Check again if there is a new run available, without returning to idle state. r.startFromWorking(atomic.LoadInt64(r.ts.now)) } -func (r *runner) updateRunState(qr QueuedRun, s RunStatus, runLogger *zap.Logger, err error) { +func (r *runner) updateRunState(qr QueuedRun, s RunStatus, runLog *zap.Logger, err error) { switch s { case RunStarted: dueAt := time.Unix(qr.DueAt, 0) @@ -830,13 +822,13 @@ func (r *runner) updateRunState(qr QueuedRun, s RunStatus, runLogger *zap.Logger r.taskControlService.AddRunLog(r.ts.authCtx, r.task.ID, qr.RunID, time.Now(), "Canceled") default: // We are deliberately not handling RunQueued yet. // There is not really a notion of being queued in this runner architecture. - runLogger.Warn("Unhandled run state", zap.Stringer("state", s)) + runLog.Warn("Unhandled run state", zap.Stringer("state", s)) } if err != nil { r.ts.metrics.LogError(err) } if err := r.taskControlService.UpdateRunState(r.ctx, r.task.ID, qr.RunID, time.Now(), s); err != nil { - runLogger.Info("Error updating run state", zap.Stringer("state", s), zap.Error(err)) + runLog.Info("Error updating run state", zap.Stringer("state", s), zap.Error(err)) } } diff --git a/task/backend/scheduler_test.go b/task/backend/scheduler_test.go index 7b432a507a..67a73ec061 100644 --- a/task/backend/scheduler_test.go +++ b/task/backend/scheduler_test.go @@ -29,7 +29,7 @@ func TestScheduler_Cancelation(t *testing.T) { e := mock.NewExecutor() e.WithHanging(100 * time.Millisecond) - o := backend.NewScheduler(tcs, e, 5, backend.WithLogger(zaptest.NewLogger(t))) + o := backend.NewScheduler(zaptest.NewLogger(t), tcs, e, 5) o.Start(context.Background()) defer o.Stop() @@ -76,7 +76,7 @@ func TestScheduler_StartScriptOnClaim(t *testing.T) { tcs := mock.NewTaskControlService() e := mock.NewExecutor() - o := backend.NewScheduler(tcs, e, 5, backend.WithLogger(zaptest.NewLogger(t))) + o := backend.NewScheduler(zaptest.NewLogger(t), tcs, e, 5) o.Start(context.Background()) defer o.Stop() @@ -145,7 +145,7 @@ func TestScheduler_DontRunInactiveTasks(t *testing.T) { tcs := mock.NewTaskControlService() e := mock.NewExecutor() - o := backend.NewScheduler(tcs, e, 5) + o := backend.NewScheduler(zaptest.NewLogger(t), tcs, e, 5) o.Start(context.Background()) defer o.Stop() latestCompleted, _ := time.Parse(time.RFC3339, "1970-01-01T00:00:05Z") @@ -178,7 +178,7 @@ func TestScheduler_CreateNextRunOnTick(t *testing.T) { tcs := mock.NewTaskControlService() e := mock.NewExecutor() - o := backend.NewScheduler(tcs, e, 5) + o := backend.NewScheduler(zaptest.NewLogger(t), tcs, e, 5) o.Start(context.Background()) defer o.Stop() latestCompleted, _ := time.Parse(time.RFC3339, "1970-01-01T00:00:05Z") @@ -251,7 +251,7 @@ func TestScheduler_LogStatisticsOnSuccess(t *testing.T) { tcs := mock.NewTaskControlService() e := mock.NewExecutor() - o := backend.NewScheduler(tcs, e, 5, backend.WithLogger(zaptest.NewLogger(t))) + o := backend.NewScheduler(zaptest.NewLogger(t), tcs, e, 5) o.Start(context.Background()) defer o.Stop() @@ -318,7 +318,7 @@ func TestScheduler_Release(t *testing.T) { tcs := mock.NewTaskControlService() e := mock.NewExecutor() - o := backend.NewScheduler(tcs, e, 5) + o := backend.NewScheduler(zaptest.NewLogger(t), tcs, e, 5) o.Start(context.Background()) defer o.Stop() latestCompleted, _ := time.Parse(time.RFC3339, "1970-01-01T00:00:05Z") @@ -355,7 +355,7 @@ func TestScheduler_UpdateTask(t *testing.T) { tcs := mock.NewTaskControlService() e := mock.NewExecutor() - s := backend.NewScheduler(tcs, e, 3059, backend.WithLogger(zaptest.NewLogger(t))) + s := backend.NewScheduler(zaptest.NewLogger(t), tcs, e, 3059) s.Start(context.Background()) defer s.Stop() latestCompleted, _ := time.Parse(time.RFC3339, "1970-01-01T00:50:00Z") @@ -407,7 +407,7 @@ func TestScheduler_Queue(t *testing.T) { tcs := mock.NewTaskControlService() e := mock.NewExecutor() - o := backend.NewScheduler(tcs, e, 3059, backend.WithLogger(zaptest.NewLogger(t))) + o := backend.NewScheduler(zaptest.NewLogger(t), tcs, e, 3059) o.Start(context.Background()) defer o.Stop() latestCompleted, _ := time.Parse(time.RFC3339, "1970-01-01T00:50:00Z") @@ -645,7 +645,7 @@ func TestScheduler_RunStatus(t *testing.T) { tcs := mock.NewTaskControlService() e := mock.NewExecutor() rl := newRunListener(tcs) - s := backend.NewScheduler(rl, e, 5, backend.WithLogger(zaptest.NewLogger(t))) + s := backend.NewScheduler(zaptest.NewLogger(t), rl, e, 5) s.Start(context.Background()) defer s.Stop() latestCompleted, _ := time.Parse(time.RFC3339, "1970-01-01T00:00:05Z") @@ -746,7 +746,7 @@ func TestScheduler_RunFailureCleanup(t *testing.T) { tcs := mock.NewTaskControlService() e := mock.NewExecutor() ll := newLogListener(tcs) - s := backend.NewScheduler(ll, e, 5, backend.WithLogger(zaptest.NewLogger(t))) + s := backend.NewScheduler(zaptest.NewLogger(t), ll, e, 5) s.Start(context.Background()) defer s.Stop() latestCompleted, _ := time.Parse(time.RFC3339, "1970-01-01T00:00:05Z") @@ -830,11 +830,11 @@ func TestScheduler_Metrics(t *testing.T) { tcs := mock.NewTaskControlService() e := mock.NewExecutor() - s := backend.NewScheduler(tcs, e, 5) + s := backend.NewScheduler(zaptest.NewLogger(t), tcs, e, 5) s.Start(context.Background()) defer s.Stop() - reg := prom.NewRegistry() + reg := prom.NewRegistry(zaptest.NewLogger(t)) // PrometheusCollector isn't part of the Scheduler interface. Yet. // Still thinking about whether it should be. reg.MustRegister(s.PrometheusCollectors()...) @@ -981,7 +981,7 @@ func TestScheduler_Stop(t *testing.T) { t.Parallel() e := &fakeWaitExecutor{wait: make(chan struct{})} - o := backend.NewScheduler(mock.NewTaskControlService(), e, 4, backend.WithLogger(zaptest.NewLogger(t))) + o := backend.NewScheduler(zaptest.NewLogger(t), mock.NewTaskControlService(), e, 4) o.Start(context.Background()) stopped := make(chan struct{}) @@ -1016,7 +1016,7 @@ func TestScheduler_WithTicker(t *testing.T) { tickFreq := 100 * time.Millisecond tcs := mock.NewTaskControlService() e := mock.NewExecutor() - o := backend.NewScheduler(tcs, e, 5, backend.WithLogger(zaptest.NewLogger(t)), backend.WithTicker(ctx, tickFreq)) + o := backend.NewScheduler(zaptest.NewLogger(t), tcs, e, 5, backend.WithTicker(ctx, tickFreq)) o.Start(ctx) defer o.Stop() diff --git a/task/mock/scheduler.go b/task/mock/scheduler.go index f7529defd0..7c94151a65 100644 --- a/task/mock/scheduler.go +++ b/task/mock/scheduler.go @@ -10,7 +10,6 @@ import ( "github.com/influxdata/flux" platform "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/task/backend" - "go.uber.org/zap" ) // Scheduler is a mock implementation of a task scheduler. @@ -42,8 +41,6 @@ func (s *Scheduler) Tick(now int64) { s.lastTick = now } -func (s *Scheduler) WithLogger(l *zap.Logger) {} - func (s *Scheduler) Start(context.Context) {} func (s *Scheduler) Stop() {} diff --git a/telemetry/handler.go b/telemetry/handler.go index 851e739a32..22986cc13e 100644 --- a/telemetry/handler.go +++ b/telemetry/handler.go @@ -32,7 +32,7 @@ var ( type PushGateway struct { Timeout time.Duration // handler returns after this duration with an error; defaults to 5 seconds MaxBytes int64 // maximum number of bytes to read from the body; defaults to 1024000 - Logger *zap.Logger + log *zap.Logger Store Store Transformers []prometheus.Transformer @@ -41,14 +41,14 @@ type PushGateway struct { } // NewPushGateway constructs the PushGateway. -func NewPushGateway(logger *zap.Logger, store Store, xforms ...prometheus.Transformer) *PushGateway { +func NewPushGateway(log *zap.Logger, store Store, xforms ...prometheus.Transformer) *PushGateway { if len(xforms) == 0 { xforms = append(xforms, &AddTimestamps{}) } return &PushGateway{ Store: store, Transformers: xforms, - Logger: logger, + log: log, Timeout: DefaultTimeout, MaxBytes: DefaultMaxBytes, } @@ -98,20 +98,20 @@ func (p *PushGateway) Handler(w http.ResponseWriter, r *http.Request) { format, err := metricsFormat(r.Header) if err != nil { - p.Logger.Error("metrics format not support", zap.Error(err)) + p.log.Error("Metrics format not support", zap.Error(err)) http.Error(w, err.Error(), http.StatusBadRequest) return } mfs, err := decodePostMetricsRequest(r.Body, format, p.MaxBytes) if err != nil { - p.Logger.Error("unable to decode metrics", zap.Error(err)) + p.log.Error("Unable to decode metrics", zap.Error(err)) http.Error(w, err.Error(), http.StatusBadRequest) return } if err := valid(mfs); err != nil { - p.Logger.Error("invalid metrics", zap.Error(err)) + p.log.Error("Invalid metrics", zap.Error(err)) http.Error(w, err.Error(), http.StatusBadRequest) return } @@ -122,13 +122,13 @@ func (p *PushGateway) Handler(w http.ResponseWriter, r *http.Request) { data, err := p.Encoder.Encode(mfs) if err != nil { - p.Logger.Error("unable to encode metric families", zap.Error(err)) + p.log.Error("Unable to encode metric families", zap.Error(err)) http.Error(w, err.Error(), http.StatusInternalServerError) return } if err := p.Store.WriteMessage(ctx, data); err != nil { - p.Logger.Error("unable to write to store", zap.Error(err)) + p.log.Error("Unable to write to store", zap.Error(err)) http.Error(w, err.Error(), http.StatusInternalServerError) return } diff --git a/telemetry/reporter.go b/telemetry/reporter.go index 75901d59c9..ec1ba7accd 100644 --- a/telemetry/reporter.go +++ b/telemetry/reporter.go @@ -13,29 +13,29 @@ import ( // gateway every interval. type Reporter struct { Pusher *Pusher - Logger *zap.Logger + log *zap.Logger Interval time.Duration } // NewReporter reports telemetry every 24 hours. -func NewReporter(g prometheus.Gatherer) *Reporter { +func NewReporter(log *zap.Logger, g prometheus.Gatherer) *Reporter { return &Reporter{ Pusher: NewPusher(g), - Logger: zap.NewNop(), + log: log, Interval: 24 * time.Hour, } } // Report starts periodic telemetry reporting each interval. func (r *Reporter) Report(ctx context.Context) { - logger := r.Logger.With( + logger := r.log.With( zap.String("service", "telemetry"), influxlogger.DurationLiteral("interval", r.Interval), ) logger.Info("Starting") if err := r.Pusher.Push(ctx); err != nil { - logger.Debug("failure reporting telemetry metrics", zap.Error(err)) + logger.Debug("Failure reporting telemetry metrics", zap.Error(err)) } ticker := time.NewTicker(r.Interval) @@ -45,7 +45,7 @@ func (r *Reporter) Report(ctx context.Context) { case <-ticker.C: logger.Debug("Reporting") if err := r.Pusher.Push(ctx); err != nil { - logger.Debug("failure reporting telemetry metrics", zap.Error(err)) + logger.Debug("Failure reporting telemetry metrics", zap.Error(err)) } case <-ctx.Done(): logger.Info("Stopping") diff --git a/telemetry/reporter_test.go b/telemetry/reporter_test.go index 66d8268832..ead60516e2 100644 --- a/telemetry/reporter_test.go +++ b/telemetry/reporter_test.go @@ -37,14 +37,9 @@ func TestReport(t *testing.T) { return mfs, nil }) - pusher := NewPusher(gatherer) - pusher.URL = ts.URL - - reporter := &Reporter{ - Pusher: pusher, - Logger: logger, - Interval: 30 * time.Second, - } + reporter := NewReporter(logger, gatherer) + reporter.Pusher.URL = ts.URL + reporter.Interval = 30 * time.Second var wg sync.WaitGroup wg.Add(1) diff --git a/telemetry/store.go b/telemetry/store.go index efe3b8cfa6..6d6ad3165c 100644 --- a/telemetry/store.go +++ b/telemetry/store.go @@ -16,11 +16,17 @@ var _ Store = (*LogStore)(nil) // LogStore logs data written to the store. type LogStore struct { - Logger *zap.Logger + log *zap.Logger +} + +func NewLogStore(log *zap.Logger) *LogStore { + return &LogStore{ + log: log, + } } // WriteMessage logs data at Info level. func (s *LogStore) WriteMessage(ctx context.Context, data []byte) error { - s.Logger.Info("write", zap.String("data", string(data))) + s.log.Info("Write", zap.String("data", string(data))) return nil } diff --git a/testing/document.go b/testing/document.go index 29ff3190d7..80fe52961b 100644 --- a/testing/document.go +++ b/testing/document.go @@ -12,13 +12,14 @@ import ( "github.com/influxdata/influxdb" "github.com/influxdata/influxdb/kv" "github.com/influxdata/influxdb/mock" + "go.uber.org/zap" ) // NewDocumentIntegrationTest will test the documents related funcs. func NewDocumentIntegrationTest(store kv.Store) func(t *testing.T) { return func(t *testing.T) { ctx := context.Background() - svc := kv.NewService(store) + svc := kv.NewService(zap.NewNop(), store) mockTimeGen := new(mock.TimeGenerator) if err := svc.Initialize(ctx); err != nil { t.Fatalf("failed to initialize service: %v", err) diff --git a/tsdb/series_partition.go b/tsdb/series_partition.go index 8739aa644e..2c1e3e3c77 100644 --- a/tsdb/series_partition.go +++ b/tsdb/series_partition.go @@ -321,7 +321,7 @@ func (p *SeriesPartition) CreateSeriesListIfNotExists(collection *SeriesCollecti duration, err := compactor.Compact(p) if err != nil { p.tracker.IncCompactionErr() - log.Error("series partition compaction failed", zap.Error(err)) + log.Error("Series partition compaction failed", zap.Error(err)) } else { p.tracker.IncCompactionOK(duration) } diff --git a/tsdb/tsm1/engine.go b/tsdb/tsm1/engine.go index 694a06e755..bd733a817e 100644 --- a/tsdb/tsm1/engine.go +++ b/tsdb/tsm1/engine.go @@ -1164,7 +1164,7 @@ func (e *Engine) compactFull(ctx context.Context, grp CompactionGroup, wg *sync. func (e *Engine) keepLeaseAlive(ctx context.Context, lease influxdb.Lease) { ttl, err := lease.TTL(ctx) if err != nil { - e.logger.Warn("unable to get TTL for lease on semaphore", zap.Error(err)) + e.logger.Warn("Unable to get TTL for lease on semaphore", zap.Error(err)) ttl = influxdb.DefaultLeaseTTL // This is probably a reasonable fallback. } diff --git a/tsdb/tsm1/engine_cursor_test.go b/tsdb/tsm1/engine_cursor_test.go index 6b2652a99b..a6b89457c2 100644 --- a/tsdb/tsm1/engine_cursor_test.go +++ b/tsdb/tsm1/engine_cursor_test.go @@ -11,7 +11,7 @@ import ( ) func TestEngine_CursorIterator_Stats(t *testing.T) { - e := MustOpenEngine() + e := MustOpenEngine(t) defer e.Close() points := []models.Point{ diff --git a/tsdb/tsm1/engine_delete_prefix_test.go b/tsdb/tsm1/engine_delete_prefix_test.go index e8d22491c9..b017cf21e5 100644 --- a/tsdb/tsm1/engine_delete_prefix_test.go +++ b/tsdb/tsm1/engine_delete_prefix_test.go @@ -21,7 +21,7 @@ func TestEngine_DeletePrefix(t *testing.T) { p7 := MustParsePointString("mem,host=C value=1.3 1", "mm1") p8 := MustParsePointString("disk,host=C value=1.3 1", "mm2") - e, err := NewEngine(tsm1.NewConfig()) + e, err := NewEngine(tsm1.NewConfig(), t) if err != nil { t.Fatal(err) } diff --git a/tsdb/tsm1/engine_schema_test.go b/tsdb/tsm1/engine_schema_test.go index 5b7bf8ede5..df3fa0da3e 100644 --- a/tsdb/tsm1/engine_schema_test.go +++ b/tsdb/tsm1/engine_schema_test.go @@ -15,7 +15,7 @@ import ( ) func TestEngine_CancelContext(t *testing.T) { - e, err := NewEngine(tsm1.NewConfig()) + e, err := NewEngine(tsm1.NewConfig(), t) if err != nil { t.Fatal(err) } @@ -123,7 +123,7 @@ memB,host=EB,os=macOS value=1.3 201`) } func TestEngine_TagValues(t *testing.T) { - e, err := NewEngine(tsm1.NewConfig()) + e, err := NewEngine(tsm1.NewConfig(), t) if err != nil { t.Fatal(err) } @@ -390,7 +390,7 @@ memB,host=EB,os=macOS value=1.3 201`) } func TestEngine_TagKeys(t *testing.T) { - e, err := NewEngine(tsm1.NewConfig()) + e, err := NewEngine(tsm1.NewConfig(), t) if err != nil { t.Fatal(err) } diff --git a/tsdb/tsm1/engine_test.go b/tsdb/tsm1/engine_test.go index ce82ff88e7..3a929afd78 100644 --- a/tsdb/tsm1/engine_test.go +++ b/tsdb/tsm1/engine_test.go @@ -21,12 +21,12 @@ import ( "github.com/influxdata/influxdb/tsdb/tsi1" "github.com/influxdata/influxdb/tsdb/tsm1" "github.com/influxdata/influxql" - "go.uber.org/zap" + "go.uber.org/zap/zaptest" ) // Test that series id set gets updated and returned appropriately. func TestIndex_SeriesIDSet(t *testing.T) { - engine := MustOpenEngine() + engine := MustOpenEngine(t) defer engine.Close() // Add some series. @@ -134,7 +134,7 @@ func TestEngine_SnapshotsDisabled(t *testing.T) { func TestEngine_ShouldCompactCache(t *testing.T) { nowTime := time.Now() - e, err := NewEngine(tsm1.NewConfig()) + e, err := NewEngine(tsm1.NewConfig(), t) if err != nil { t.Fatal(err) } @@ -204,7 +204,7 @@ func BenchmarkBlockTypeToInfluxQLDataType(b *testing.B) { // This test ensures that "sync: WaitGroup is reused before previous Wait has returned" is // is not raised. func TestEngine_DisableEnableCompactions_Concurrent(t *testing.T) { - e := MustOpenEngine() + e := MustOpenEngine(t) defer e.Close() var wg sync.WaitGroup @@ -243,7 +243,7 @@ func TestEngine_DisableEnableCompactions_Concurrent(t *testing.T) { func BenchmarkEngine_WritePoints(b *testing.B) { batchSizes := []int{10, 100, 1000, 5000, 10000} for _, sz := range batchSizes { - e := MustOpenEngine() + e := MustOpenEngine(b) pp := make([]models.Point, 0, sz) for i := 0; i < sz; i++ { p := MustParsePointString(fmt.Sprintf("cpu,host=%d value=1.2", i), "mm") @@ -266,7 +266,7 @@ func BenchmarkEngine_WritePoints(b *testing.B) { func BenchmarkEngine_WritePoints_Parallel(b *testing.B) { batchSizes := []int{1000, 5000, 10000, 25000, 50000, 75000, 100000, 200000} for _, sz := range batchSizes { - e := MustOpenEngine() + e := MustOpenEngine(b) cpus := runtime.GOMAXPROCS(0) pp := make([]models.Point, 0, sz*cpus) @@ -312,7 +312,7 @@ func BenchmarkEngine_WritePoints_Parallel(b *testing.B) { func BenchmarkEngine_DeletePrefixRange_Cache(b *testing.B) { config := tsm1.NewConfig() config.Cache.SnapshotMemorySize = toml.Size(256 * 1024 * 1024) - e, err := NewEngine(config) + e, err := NewEngine(config, b) if err != nil { b.Fatal(err) } @@ -369,7 +369,7 @@ type Engine struct { } // NewEngine returns a new instance of Engine at a temporary location. -func NewEngine(config tsm1.Config) (*Engine, error) { +func NewEngine(config tsm1.Config, tb testing.TB) (*Engine, error) { root, err := ioutil.TempDir("", "tsm1-") if err != nil { panic(err) @@ -377,7 +377,7 @@ func NewEngine(config tsm1.Config) (*Engine, error) { // Setup series file. sfile := tsdb.NewSeriesFile(filepath.Join(root, "_series")) - sfile.Logger = zap.NewNop() + sfile.Logger = zaptest.NewLogger(tb) if testing.Verbose() { sfile.Logger = logger.New(os.Stdout) } @@ -401,8 +401,8 @@ func NewEngine(config tsm1.Config) (*Engine, error) { } // MustOpenEngine returns a new, open instance of Engine. -func MustOpenEngine() *Engine { - e, err := NewEngine(tsm1.NewConfig()) +func MustOpenEngine(tb testing.TB) *Engine { + e, err := NewEngine(tsm1.NewConfig(), tb) if err != nil { panic(err) } diff --git a/tsdb/tsm1/metrics_test.go b/tsdb/tsm1/metrics_test.go index aaf9f0d44e..d0c1ea4e85 100644 --- a/tsdb/tsm1/metrics_test.go +++ b/tsdb/tsm1/metrics_test.go @@ -215,4 +215,4 @@ func TestMetrics_Compactions(t *testing.T) { } } } -} \ No newline at end of file +} diff --git a/tsdb/tsm1/reader_index.go b/tsdb/tsm1/reader_index.go index 2598997899..4969d118b8 100644 --- a/tsdb/tsm1/reader_index.go +++ b/tsdb/tsm1/reader_index.go @@ -190,7 +190,7 @@ func (d *indirectIndex) ReadEntries(key []byte, entries []IndexEntry) ([]IndexEn func (d *indirectIndex) Entry(key []byte, timestamp int64) *IndexEntry { entries, err := d.ReadEntries(key, nil) if err != nil { - d.logger.Error("error reading tsm index key", zap.String("key", fmt.Sprintf("%q", key))) + d.logger.Error("Error reading tsm index key", zap.String("key", fmt.Sprintf("%q", key))) return nil } for _, entry := range entries { @@ -674,7 +674,7 @@ func (d *indirectIndex) MaybeContainsValue(key []byte, timestamp int64) bool { entries, err := d.ReadEntries(key, nil) if err != nil { - d.logger.Error("error reading tsm index key", zap.String("key", fmt.Sprintf("%q", key))) + d.logger.Error("Error reading tsm index key", zap.String("key", fmt.Sprintf("%q", key))) return false } diff --git a/zap/auth_service.go b/zap/auth_service.go index 4b39475fd2..99cd5decec 100644 --- a/zap/auth_service.go +++ b/zap/auth_service.go @@ -11,7 +11,7 @@ var _ platform.AuthorizationService = (*AuthorizationService)(nil) // AuthorizationService manages authorizations. type AuthorizationService struct { - Logger *zap.Logger + log *zap.Logger AuthorizationService platform.AuthorizationService } @@ -19,7 +19,7 @@ type AuthorizationService struct { func (s *AuthorizationService) FindAuthorizationByID(ctx context.Context, id platform.ID) (a *platform.Authorization, err error) { defer func() { if err != nil { - s.Logger.Info("error finding authorization by id", zap.Error(err)) + s.log.Info("Error finding authorization by id", zap.Error(err)) } }() @@ -30,7 +30,7 @@ func (s *AuthorizationService) FindAuthorizationByID(ctx context.Context, id pla func (s *AuthorizationService) FindAuthorizationByToken(ctx context.Context, t string) (a *platform.Authorization, err error) { defer func() { if err != nil { - s.Logger.Info("error finding authorization by token", zap.Error(err)) + s.log.Info("Error finding authorization by token", zap.Error(err)) } }() @@ -41,7 +41,7 @@ func (s *AuthorizationService) FindAuthorizationByToken(ctx context.Context, t s func (s *AuthorizationService) FindAuthorizations(ctx context.Context, filter platform.AuthorizationFilter, opt ...platform.FindOptions) (as []*platform.Authorization, i int, err error) { defer func() { if err != nil { - s.Logger.Info("error finding authorizations", zap.Error(err)) + s.log.Info("Error finding authorizations", zap.Error(err)) } }() @@ -52,7 +52,7 @@ func (s *AuthorizationService) FindAuthorizations(ctx context.Context, filter pl func (s *AuthorizationService) CreateAuthorization(ctx context.Context, a *platform.Authorization) (err error) { defer func() { if err != nil { - s.Logger.Info("error creating authorization", zap.Error(err)) + s.log.Info("Error creating authorization", zap.Error(err)) } }() @@ -63,7 +63,7 @@ func (s *AuthorizationService) CreateAuthorization(ctx context.Context, a *platf func (s *AuthorizationService) DeleteAuthorization(ctx context.Context, id platform.ID) (err error) { defer func() { if err != nil { - s.Logger.Info("error deleting authorization", zap.Error(err)) + s.log.Info("Error deleting authorization", zap.Error(err)) } }() @@ -74,7 +74,7 @@ func (s *AuthorizationService) DeleteAuthorization(ctx context.Context, id platf func (s *AuthorizationService) UpdateAuthorization(ctx context.Context, id platform.ID, upd *platform.AuthorizationUpdate) (a *platform.Authorization, err error) { defer func() { if err != nil { - s.Logger.Info("error updating authorization", zap.Error(err)) + s.log.Info("Error updating authorization", zap.Error(err)) } }() diff --git a/zap/proxy_query_service.go b/zap/proxy_query_service.go index 805fa4693d..84259c168e 100644 --- a/zap/proxy_query_service.go +++ b/zap/proxy_query_service.go @@ -10,24 +10,21 @@ import ( // ProxyQueryService logs the request but does not write to the writer. type ProxyQueryService struct { - Logger *zap.Logger + log *zap.Logger } -// NewProxyQueryService creates a new proxy query service with a logger. +// NewProxyQueryService creates a new proxy query service with a log. // If the logger is nil, then it will use a noop logger. -func NewProxyQueryService(l *zap.Logger) *ProxyQueryService { - if l == nil { - l = zap.NewNop() - } +func NewProxyQueryService(log *zap.Logger) *ProxyQueryService { return &ProxyQueryService{ - Logger: l, + log: log, } } // Query logs the query request. func (s *ProxyQueryService) Query(ctx context.Context, w io.Writer, req *query.ProxyRequest) (int64, error) { if req != nil { - s.Logger.Info("query", zap.Any("request", req)) + s.log.Info("Query", zap.Any("request", req)) } n, err := w.Write([]byte{}) return int64(n), err diff --git a/zap/tracer.go b/zap/tracer.go index 368d90a11f..5776f3504b 100644 --- a/zap/tracer.go +++ b/zap/tracer.go @@ -29,8 +29,15 @@ const ( // Tracer implements opentracing.Tracer and logs each span as its own log. type Tracer struct { - Logger *zap.Logger - IDGenerator platform.IDGenerator + log *zap.Logger + idGenerator platform.IDGenerator +} + +func NewTracer(log *zap.Logger, idGenerator platform.IDGenerator) *Tracer { + return &Tracer{ + log: log, + idGenerator: idGenerator, + } } func (t *Tracer) StartSpan(operationName string, opts ...opentracing.StartSpanOption) opentracing.Span { @@ -41,7 +48,7 @@ func (t *Tracer) StartSpan(operationName string, opts ...opentracing.StartSpanOp opt.Apply(startOpts) } ctx := newSpanContext() - ctx.spanID = t.IDGenerator.ID() + ctx.spanID = t.idGenerator.ID() for _, ref := range startOpts.References { refCtx, ok := ref.ReferencedContext.(SpanContext) if ok { @@ -50,7 +57,7 @@ func (t *Tracer) StartSpan(operationName string, opts ...opentracing.StartSpanOp } } if !ctx.traceID.Valid() { - ctx.traceID = t.IDGenerator.ID() + ctx.traceID = t.idGenerator.ID() } return &Span{ tracer: t, @@ -116,7 +123,7 @@ func (t *Tracer) Extract(format interface{}, carrier interface{}) (opentracing.S return nil, fmt.Errorf("unsupported format %v", format) } if !ctx.traceID.Valid() { - ctx.traceID = t.IDGenerator.ID() + ctx.traceID = t.idGenerator.ID() } if !ctx.spanID.Valid() { return nil, errors.New("no span ID found in carrier") @@ -188,7 +195,7 @@ func (s *Span) FinishWithOptions(opts opentracing.FinishOptions) { for k, v := range s.ctx.baggage { fields = append(fields, zap.String(k, v)) } - s.tracer.Logger.Info(s.opName, fields...) + s.tracer.log.Info(s.opName, fields...) } func (s *Span) Context() opentracing.SpanContext {