From c771f3ff4d2ab0b6254a2e4a0df73d55055ca10b Mon Sep 17 00:00:00 2001 From: Semyon Krestyaninov <ensiouel@gmail.com> Date: Wed, 14 Feb 2024 09:32:41 +0300 Subject: [PATCH] add log service middleware for items --- pkg/items/events.go | 3 + .../middleware/log_service_middleware.go | 161 ++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 pkg/items/middleware/log_service_middleware.go diff --git a/pkg/items/events.go b/pkg/items/events.go index b697d607..88da05d8 100644 --- a/pkg/items/events.go +++ b/pkg/items/events.go @@ -12,6 +12,9 @@ const ( EventPublishItem = "publish_item" EventUnpublishItem = "unpublish_item" EventDeleteItem = "delete_item" + EventUndeleteItem = "undelete_item" + EventArchiveItem = "archive_item" + EventUnarchiveItem = "unarchive_item" DefaultEventSubject = "content.{{.EventType}}.{{.SpaceID}}.{{.EnvID}}.{{.CollectionID}}.{{.ItemID}}" ) diff --git a/pkg/items/middleware/log_service_middleware.go b/pkg/items/middleware/log_service_middleware.go new file mode 100644 index 00000000..48c4125e --- /dev/null +++ b/pkg/items/middleware/log_service_middleware.go @@ -0,0 +1,161 @@ +package middleware + +import ( + "context" + "fmt" + + "git.perx.ru/perxis/perxis-go/pkg/items" + logzap "git.perx.ru/perxis/perxis-go/pkg/log/zap" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" +) + +type logServiceMiddleware struct { + items.Items + logger *zap.Logger +} + +func LogServiceMiddleware(logger *zap.Logger) Middleware { + return func(next items.Items) items.Items { + return &logServiceMiddleware{ + Items: next, + logger: logger.With(logzap.Component("Items")), + } + } +} + +func (m *logServiceMiddleware) Archive(ctx context.Context, item *items.Item, options ...*items.ArchiveOptions) (err error) { + err = m.Items.Archive(ctx, item, options...) + + fields := []zapcore.Field{ + logzap.Event(items.EventArchiveItem), + logzap.CallerFromContext(ctx), + } + + if err != nil { + m.logger.Error(fmt.Sprintf("Failed to archive. Error: %s", err), append(fields, logzap.Object(item))...) + } else { + m.logger.Info("Successfully archived", append(fields, logzap.Object(item))...) + } + + return err +} + +func (m *logServiceMiddleware) Create(ctx context.Context, item *items.Item, opts ...*items.CreateOptions) (created *items.Item, err error) { + created, err = m.Items.Create(ctx, item, opts...) + + fields := []zapcore.Field{ + logzap.Event(items.EventCreateItem), + logzap.CallerFromContext(ctx), + } + + if err != nil { + m.logger.Error(fmt.Sprintf("Failed to create. Error: %s", err), append(fields, logzap.Object(item))...) + } else { + m.logger.Info("Successfully created", append(fields, logzap.Object(created))...) + } + + return created, err +} + +func (m *logServiceMiddleware) Delete(ctx context.Context, item *items.Item, options ...*items.DeleteOptions) (err error) { + err = m.Items.Delete(ctx, item, options...) + + fields := []zapcore.Field{ + logzap.Event(items.EventDeleteItem), + logzap.CallerFromContext(ctx), + } + + if err != nil { + m.logger.Error(fmt.Sprintf("Failed to delete. Error: %s", err), append(fields, logzap.Object(item))...) + } else { + m.logger.Info("Successfully deleted", append(fields, logzap.Object(item))...) + } + + return err +} + +func (m *logServiceMiddleware) Publish(ctx context.Context, item *items.Item, options ...*items.PublishOptions) (err error) { + err = m.Items.Publish(ctx, item, options...) + + fields := []zapcore.Field{ + logzap.Event(items.EventPublishItem), + logzap.CallerFromContext(ctx), + } + + if err != nil { + m.logger.Error(fmt.Sprintf("Failed to publish. Error: %s", err), append(fields, logzap.Object(item))...) + } else { + m.logger.Info("Successfully published", append(fields, logzap.Object(item))...) + } + + return err +} + +func (m *logServiceMiddleware) Unarchive(ctx context.Context, item *items.Item, options ...*items.UnarchiveOptions) (err error) { + err = m.Items.Unarchive(ctx, item, options...) + + fields := []zapcore.Field{ + logzap.Event(items.EventUnarchiveItem), + logzap.CallerFromContext(ctx), + } + + if err != nil { + m.logger.Error(fmt.Sprintf("Failed to unarchive. Error: %s", err), append(fields, logzap.Object(item))...) + } else { + m.logger.Info("Successfully unarchived", append(fields, logzap.Object(item))...) + } + + return err +} + +func (m *logServiceMiddleware) Undelete(ctx context.Context, item *items.Item, options ...*items.UndeleteOptions) (err error) { + err = m.Items.Undelete(ctx, item, options...) + + fields := []zapcore.Field{ + logzap.Event(items.EventUndeleteItem), + logzap.CallerFromContext(ctx), + } + + if err != nil { + m.logger.Error(fmt.Sprintf("Failed to undelete. Error: %s", err), append(fields, logzap.Object(item))...) + } else { + m.logger.Info("Successfully undeleted", append(fields, logzap.Object(item))...) + } + + return err +} + +func (m *logServiceMiddleware) Unpublish(ctx context.Context, item *items.Item, options ...*items.UnpublishOptions) (err error) { + err = m.Items.Unpublish(ctx, item, options...) + + fields := []zapcore.Field{ + logzap.Event(items.EventUnpublishItem), + logzap.CallerFromContext(ctx), + } + + if err != nil { + m.logger.Error(fmt.Sprintf("Failed to unpublish. Error: %s", err), append(fields, logzap.Object(item))...) + } else { + m.logger.Info("Successfully unpublished", append(fields, logzap.Object(item))...) + } + + return err +} + +func (m *logServiceMiddleware) Update(ctx context.Context, item *items.Item, options ...*items.UpdateOptions) (err error) { + err = m.Items.Update(ctx, item, options...) + + fields := []zapcore.Field{ + logzap.Event(items.EventUpdateItem), + logzap.CallerFromContext(ctx), + } + + if err != nil { + m.logger.Error(fmt.Sprintf("Failed to update. Error: %s", err), append(fields, logzap.Object(item))...) + } else { + m.logger.Info("Successfully updated", append(fields, logzap.Object(item))...) + } + + return err +} -- GitLab