From ddb43ccfd7f86a91582c527f15135ce46812732b Mon Sep 17 00:00:00 2001 From: Semyon Krestyaninov <ensiouel@gmail.com> Date: Thu, 29 Feb 2024 09:33:26 +0300 Subject: [PATCH] refactor --- .../middleware/logging_middleware.go | 22 ++++-- pkg/items/middleware/logging_middleware.go | 72 ++++++++++++++----- zap/field.go | 10 ++- zap/field_test.go | 4 +- 4 files changed, 79 insertions(+), 29 deletions(-) diff --git a/pkg/collections/middleware/logging_middleware.go b/pkg/collections/middleware/logging_middleware.go index fb12be9f..59d77c47 100644 --- a/pkg/collections/middleware/logging_middleware.go +++ b/pkg/collections/middleware/logging_middleware.go @@ -25,8 +25,12 @@ func LoggingMiddleware(logger *zap.Logger) Middleware { } func (m *loggingMiddleware) Create(ctx context.Context, collection *collections.Collection) (created *collections.Collection, err error) { + var spaceID string + if collection != nil { + spaceID = collection.SpaceID + } logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceID), logzap.Event(collections.EventCollectionCreate), ) @@ -42,7 +46,7 @@ func (m *loggingMiddleware) Create(ctx context.Context, collection *collections. func (m *loggingMiddleware) Delete(ctx context.Context, spaceId string, envId string, collectionId string) (err error) { logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceId), logzap.Event(collections.EventCollectionDelete), logzap.Object(id.NewCollectionId(spaceId, envId, collectionId)), ) @@ -59,7 +63,7 @@ func (m *loggingMiddleware) Delete(ctx context.Context, spaceId string, envId st func (m *loggingMiddleware) Get(ctx context.Context, spaceId string, envId string, collectionId string, options ...*collections.GetOptions) (collection *collections.Collection, err error) { logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceId), ) collection, err = m.next.Get(ctx, spaceId, envId, collectionId, options...) @@ -73,7 +77,7 @@ func (m *loggingMiddleware) Get(ctx context.Context, spaceId string, envId strin func (m *loggingMiddleware) List(ctx context.Context, spaceId string, envId string, filter *collections.Filter) (collections []*collections.Collection, err error) { logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceId), ) collections, err = m.next.List(ctx, spaceId, envId, filter) @@ -87,7 +91,7 @@ func (m *loggingMiddleware) List(ctx context.Context, spaceId string, envId stri func (m *loggingMiddleware) SetSchema(ctx context.Context, spaceId string, envId string, collectionId string, schema *schema.Schema) (err error) { logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceId), logzap.Event(collections.EventCollectionSetSchema), logzap.Object(id.NewCollectionId(spaceId, envId, collectionId)), ) @@ -104,7 +108,7 @@ func (m *loggingMiddleware) SetSchema(ctx context.Context, spaceId string, envId func (m *loggingMiddleware) SetState(ctx context.Context, spaceId string, envId string, collectionId string, state *collections.StateInfo) (err error) { logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceId), ) err = m.next.SetState(ctx, spaceId, envId, collectionId, state) @@ -118,8 +122,12 @@ func (m *loggingMiddleware) SetState(ctx context.Context, spaceId string, envId } func (m *loggingMiddleware) Update(ctx context.Context, coll *collections.Collection) (err error) { + var spaceID string + if coll != nil { + spaceID = coll.SpaceID + } logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceID), logzap.Event(collections.EventCollectionUpdate), logzap.Object(coll), ) diff --git a/pkg/items/middleware/logging_middleware.go b/pkg/items/middleware/logging_middleware.go index e2829a42..caf1b833 100644 --- a/pkg/items/middleware/logging_middleware.go +++ b/pkg/items/middleware/logging_middleware.go @@ -26,7 +26,7 @@ func LoggingMiddleware(logger *zap.Logger) Middleware { func (m *loggingMiddleware) Aggregate(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.AggregateOptions) (result map[string]interface{}, err error) { logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceId), ) result, err = m.next.Aggregate(ctx, spaceId, envId, collectionId, filter, options...) @@ -40,7 +40,7 @@ func (m *loggingMiddleware) Aggregate(ctx context.Context, spaceId string, envId func (m *loggingMiddleware) AggregatePublished(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.AggregatePublishedOptions) (result map[string]interface{}, err error) { logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceId), ) result, err = m.next.AggregatePublished(ctx, spaceId, envId, collectionId, filter, options...) @@ -53,8 +53,12 @@ func (m *loggingMiddleware) AggregatePublished(ctx context.Context, spaceId stri } func (m *loggingMiddleware) Archive(ctx context.Context, item *items.Item, options ...*items.ArchiveOptions) (err error) { + var spaceID string + if item != nil { + spaceID = item.SpaceID + } logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceID), logzap.Event(items.EventArchiveItem), logzap.Object(item), ) @@ -70,8 +74,12 @@ func (m *loggingMiddleware) Archive(ctx context.Context, item *items.Item, optio } func (m *loggingMiddleware) Create(ctx context.Context, item *items.Item, opts ...*items.CreateOptions) (created *items.Item, err error) { + var spaceID string + if item != nil { + spaceID = item.SpaceID + } logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceID), logzap.Event(items.EventCreateItem), ) @@ -86,8 +94,12 @@ func (m *loggingMiddleware) Create(ctx context.Context, item *items.Item, opts . } func (m *loggingMiddleware) Delete(ctx context.Context, item *items.Item, options ...*items.DeleteOptions) (err error) { + var spaceID string + if item != nil { + spaceID = item.SpaceID + } logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceID), logzap.Event(items.EventDeleteItem), logzap.Object(item), ) @@ -104,7 +116,7 @@ func (m *loggingMiddleware) Delete(ctx context.Context, item *items.Item, option func (m *loggingMiddleware) Find(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindOptions) (items []*items.Item, total int, err error) { logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceId), ) items, total, err = m.next.Find(ctx, spaceId, envId, collectionId, filter, options...) @@ -119,7 +131,7 @@ func (m *loggingMiddleware) Find(ctx context.Context, spaceId string, envId stri func (m *loggingMiddleware) FindArchived(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindArchivedOptions) (items []*items.Item, total int, err error) { logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceId), ) items, total, err = m.next.FindArchived(ctx, spaceId, envId, collectionId, filter, options...) @@ -133,7 +145,7 @@ func (m *loggingMiddleware) FindArchived(ctx context.Context, spaceId string, en func (m *loggingMiddleware) FindPublished(ctx context.Context, spaceId string, envId string, collectionId string, filter *items.Filter, options ...*items.FindPublishedOptions) (items []*items.Item, total int, err error) { logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceId), ) items, total, err = m.next.FindPublished(ctx, spaceId, envId, collectionId, filter, options...) @@ -147,7 +159,7 @@ func (m *loggingMiddleware) FindPublished(ctx context.Context, spaceId string, e func (m *loggingMiddleware) Get(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.GetOptions) (item *items.Item, err error) { logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceId), logzap.Object(id.NewItemId(spaceId, envId, collectionId, itemId)), ) @@ -162,7 +174,7 @@ func (m *loggingMiddleware) Get(ctx context.Context, spaceId string, envId strin func (m *loggingMiddleware) GetPublished(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.GetPublishedOptions) (item *items.Item, err error) { logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceId), logzap.Object(id.NewItemId(spaceId, envId, collectionId, itemId)), ) @@ -177,7 +189,7 @@ func (m *loggingMiddleware) GetPublished(ctx context.Context, spaceId string, en func (m *loggingMiddleware) GetRevision(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, revisionId string, options ...*items.GetRevisionOptions) (item *items.Item, err error) { logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceId), logzap.Object(id.NewItemId(spaceId, envId, collectionId, itemId)), ) @@ -191,8 +203,12 @@ func (m *loggingMiddleware) GetRevision(ctx context.Context, spaceId string, env } func (m *loggingMiddleware) Introspect(ctx context.Context, item *items.Item, opts ...*items.IntrospectOptions) (itm *items.Item, sch *schema.Schema, err error) { + var spaceID string + if item != nil { + spaceID = item.SpaceID + } logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceID), logzap.Object(item), ) @@ -207,7 +223,7 @@ func (m *loggingMiddleware) Introspect(ctx context.Context, item *items.Item, op func (m *loggingMiddleware) ListRevisions(ctx context.Context, spaceId string, envId string, collectionId string, itemId string, options ...*items.ListRevisionsOptions) (items []*items.Item, err error) { logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceId), logzap.Object(id.NewItemId(spaceId, envId, collectionId, itemId)), ) @@ -221,8 +237,12 @@ func (m *loggingMiddleware) ListRevisions(ctx context.Context, spaceId string, e } func (m *loggingMiddleware) Publish(ctx context.Context, item *items.Item, options ...*items.PublishOptions) (err error) { + var spaceID string + if item != nil { + spaceID = item.SpaceID + } logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceID), logzap.Event(items.EventPublishItem), logzap.Object(item), ) @@ -238,8 +258,12 @@ func (m *loggingMiddleware) Publish(ctx context.Context, item *items.Item, optio } func (m *loggingMiddleware) Unarchive(ctx context.Context, item *items.Item, options ...*items.UnarchiveOptions) (err error) { + var spaceID string + if item != nil { + spaceID = item.SpaceID + } logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceID), logzap.Event(items.EventUnarchiveItem), logzap.Object(item), ) @@ -255,8 +279,12 @@ func (m *loggingMiddleware) Unarchive(ctx context.Context, item *items.Item, opt } func (m *loggingMiddleware) Undelete(ctx context.Context, item *items.Item, options ...*items.UndeleteOptions) (err error) { + var spaceID string + if item != nil { + spaceID = item.SpaceID + } logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceID), logzap.Event(items.EventUndeleteItem), logzap.Object(item), ) @@ -272,8 +300,12 @@ func (m *loggingMiddleware) Undelete(ctx context.Context, item *items.Item, opti } func (m *loggingMiddleware) Unpublish(ctx context.Context, item *items.Item, options ...*items.UnpublishOptions) (err error) { + var spaceID string + if item != nil { + spaceID = item.SpaceID + } logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceID), logzap.Event(items.EventUnpublishItem), logzap.Object(item), ) @@ -289,8 +321,12 @@ func (m *loggingMiddleware) Unpublish(ctx context.Context, item *items.Item, opt } func (m *loggingMiddleware) Update(ctx context.Context, item *items.Item, options ...*items.UpdateOptions) (err error) { + var spaceID string + if item != nil { + spaceID = item.SpaceID + } logger := m.logger.With( - logzap.CallerFromContext(ctx), + logzap.CallerFromContext(ctx, spaceID), logzap.Event(items.EventUpdateItem), logzap.Object(item), ) diff --git a/zap/field.go b/zap/field.go index 308c21d6..d66c9e2d 100644 --- a/zap/field.go +++ b/zap/field.go @@ -55,8 +55,14 @@ func Caller(v any) zap.Field { } // CallerFromContext извлекает auth.Principal из контекста и устанавливает его в качестве "вызывающего" в формате Object. -func CallerFromContext(ctx context.Context) zap.Field { - return Caller(auth.GetPrincipal(ctx)) +// Вторым параметром передается идентификатор пространства, который требуется, если вызывающий является auth.SpaceAccessor. +// Если вызывающий не связан с пространством, следует передать пустую строку. +func CallerFromContext(ctx context.Context, spaceID string) zap.Field { + principal := auth.GetPrincipal(ctx) + if accessor, ok := principal.(auth.SpaceAccessor); ok && spaceID != "" { + principal = accessor.Space(spaceID) + } + return Caller(principal) } func Attr(attr any) zap.Field { diff --git a/zap/field_test.go b/zap/field_test.go index 84efa584..21ecaabf 100644 --- a/zap/field_test.go +++ b/zap/field_test.go @@ -167,8 +167,8 @@ func TestCallerFromContext(t *testing.T) { field zap.Field want zap.Field }{ - {name: "ok", field: CallerFromContext(ctx), want: zap.Reflect("caller", oid)}, - {name: "invalid", field: CallerFromContext(context.TODO()), want: zap.Reflect("caller", (*id.ObjectId)(nil))}, + {name: "ok", field: CallerFromContext(ctx, ""), want: zap.Reflect("caller", oid)}, + {name: "invalid", field: CallerFromContext(context.TODO(), ""), want: zap.Reflect("caller", (*id.ObjectId)(nil))}, } for _, tc := range tests { -- GitLab