From 8efcc957ea58bdbc590d7fc4f29f2070aa0e1a4b Mon Sep 17 00:00:00 2001 From: Roman Loginov Date: Wed, 23 Aug 2023 14:07:52 +0300 Subject: [PATCH] [#96] Move log messages to constants Signed-off-by: Roman Loginov --- api/cache/access_control.go | 3 +- api/cache/accessbox.go | 3 +- api/cache/buckets.go | 3 +- api/cache/names.go | 3 +- api/cache/objects.go | 3 +- api/cache/objectslist.go | 5 +- api/cache/system.go | 9 +-- api/handler/acl.go | 5 +- api/handler/api.go | 3 +- api/handler/copy.go | 5 +- api/handler/cors.go | 5 +- api/handler/delete.go | 7 +- api/handler/multipart_upload.go | 3 +- api/handler/notifications.go | 3 +- api/handler/put.go | 9 +-- api/handler/tagging.go | 5 +- api/handler/util.go | 5 +- api/layer/cache.go | 33 ++++----- api/layer/container.go | 7 +- api/layer/cors.go | 3 +- api/layer/layer.go | 9 +-- api/layer/multipart_upload.go | 17 ++--- api/layer/notifications.go | 3 +- api/layer/object.go | 9 +-- api/layer/tagging.go | 3 +- api/middleware/auth.go | 5 +- api/middleware/metrics.go | 3 +- api/middleware/reqinfo.go | 3 +- api/middleware/response.go | 3 +- api/notifications/controller.go | 9 +-- api/router.go | 3 +- authmate/authmate.go | 9 +-- cmd/s3-authmate/modules/utils.go | 3 +- cmd/s3-gw/app.go | 77 ++++++++++----------- cmd/s3-gw/app_settings.go | 15 ++-- cmd/s3-gw/service.go | 11 +-- internal/logs/logs.go | 114 +++++++++++++++++++++++++++++++ metrics/app.go | 5 +- pkg/service/tree/tree.go | 3 +- 39 files changed, 289 insertions(+), 137 deletions(-) create mode 100644 internal/logs/logs.go diff --git a/api/cache/access_control.go b/api/cache/access_control.go index 28708b9c..0e0138bc 100644 --- a/api/cache/access_control.go +++ b/api/cache/access_control.go @@ -4,6 +4,7 @@ import ( "fmt" "time" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user" "github.com/bluele/gcache" "go.uber.org/zap" @@ -46,7 +47,7 @@ func (o *AccessControlCache) Get(owner user.ID, key string) bool { result, ok := entry.(bool) if !ok { - o.logger.Warn("invalid cache entry type", zap.String("actual", fmt.Sprintf("%T", entry)), + o.logger.Warn(logs.InvalidCacheEntryType, zap.String("actual", fmt.Sprintf("%T", entry)), zap.String("expected", fmt.Sprintf("%T", result))) return false } diff --git a/api/cache/accessbox.go b/api/cache/accessbox.go index b70cd321..d52717d1 100644 --- a/api/cache/accessbox.go +++ b/api/cache/accessbox.go @@ -5,6 +5,7 @@ import ( "time" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/creds/accessbox" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" "github.com/bluele/gcache" "go.uber.org/zap" @@ -57,7 +58,7 @@ func (o *AccessBoxCache) Get(address oid.Address) *accessbox.Box { result, ok := entry.(*accessbox.Box) if !ok { - o.logger.Warn("invalid cache entry type", zap.String("actual", fmt.Sprintf("%T", entry)), + o.logger.Warn(logs.InvalidCacheEntryType, zap.String("actual", fmt.Sprintf("%T", entry)), zap.String("expected", fmt.Sprintf("%T", result))) return nil } diff --git a/api/cache/buckets.go b/api/cache/buckets.go index 9e121f0a..75f8cc28 100644 --- a/api/cache/buckets.go +++ b/api/cache/buckets.go @@ -5,6 +5,7 @@ import ( "time" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "github.com/bluele/gcache" "go.uber.org/zap" ) @@ -46,7 +47,7 @@ func (o *BucketCache) Get(key string) *data.BucketInfo { result, ok := entry.(*data.BucketInfo) if !ok { - o.logger.Warn("invalid cache entry type", zap.String("actual", fmt.Sprintf("%T", entry)), + o.logger.Warn(logs.InvalidCacheEntryType, zap.String("actual", fmt.Sprintf("%T", entry)), zap.String("expected", fmt.Sprintf("%T", result))) return nil } diff --git a/api/cache/names.go b/api/cache/names.go index 20ebe461..42ce8eb0 100644 --- a/api/cache/names.go +++ b/api/cache/names.go @@ -4,6 +4,7 @@ import ( "fmt" "time" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" "github.com/bluele/gcache" "go.uber.org/zap" @@ -48,7 +49,7 @@ func (o *ObjectsNameCache) Get(key string) *oid.Address { result, ok := entry.(oid.Address) if !ok { - o.logger.Warn("invalid cache entry type", zap.String("actual", fmt.Sprintf("%T", entry)), + o.logger.Warn(logs.InvalidCacheEntryType, zap.String("actual", fmt.Sprintf("%T", entry)), zap.String("expected", fmt.Sprintf("%T", result))) return nil } diff --git a/api/cache/objects.go b/api/cache/objects.go index dac327bf..e78f8e75 100644 --- a/api/cache/objects.go +++ b/api/cache/objects.go @@ -5,6 +5,7 @@ import ( "time" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" "github.com/bluele/gcache" "go.uber.org/zap" @@ -47,7 +48,7 @@ func (o *ObjectsCache) GetObject(address oid.Address) *data.ExtendedObjectInfo { result, ok := entry.(*data.ExtendedObjectInfo) if !ok { - o.logger.Warn("invalid cache entry type", zap.String("actual", fmt.Sprintf("%T", entry)), + o.logger.Warn(logs.InvalidCacheEntryType, zap.String("actual", fmt.Sprintf("%T", entry)), zap.String("expected", fmt.Sprintf("%T", result))) return nil } diff --git a/api/cache/objectslist.go b/api/cache/objectslist.go index 37ca0ea7..d2bb3364 100644 --- a/api/cache/objectslist.go +++ b/api/cache/objectslist.go @@ -7,6 +7,7 @@ import ( "time" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" "github.com/bluele/gcache" "go.uber.org/zap" @@ -75,7 +76,7 @@ func (l *ObjectsListCache) GetVersions(key ObjectsListKey) []*data.NodeVersion { result, ok := entry.([]*data.NodeVersion) if !ok { - l.logger.Warn("invalid cache entry type", zap.String("actual", fmt.Sprintf("%T", entry)), + l.logger.Warn(logs.InvalidCacheEntryType, zap.String("actual", fmt.Sprintf("%T", entry)), zap.String("expected", fmt.Sprintf("%T", result))) return nil } @@ -94,7 +95,7 @@ func (l *ObjectsListCache) CleanCacheEntriesContainingObject(objectName string, for _, key := range keys { k, ok := key.(ObjectsListKey) if !ok { - l.logger.Warn("invalid cache key type", zap.String("actual", fmt.Sprintf("%T", key)), + l.logger.Warn(logs.InvalidCacheKeyType, zap.String("actual", fmt.Sprintf("%T", key)), zap.String("expected", fmt.Sprintf("%T", k))) continue } diff --git a/api/cache/system.go b/api/cache/system.go index 38a27fe8..292ae585 100644 --- a/api/cache/system.go +++ b/api/cache/system.go @@ -5,6 +5,7 @@ import ( "time" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "github.com/bluele/gcache" "go.uber.org/zap" ) @@ -48,7 +49,7 @@ func (o *SystemCache) GetObject(key string) *data.ObjectInfo { result, ok := entry.(*data.ObjectInfo) if !ok { - o.logger.Warn("invalid cache entry type", zap.String("actual", fmt.Sprintf("%T", entry)), + o.logger.Warn(logs.InvalidCacheEntryType, zap.String("actual", fmt.Sprintf("%T", entry)), zap.String("expected", fmt.Sprintf("%T", result))) return nil } @@ -79,7 +80,7 @@ func (o *SystemCache) GetCORS(key string) *data.CORSConfiguration { result, ok := entry.(*data.CORSConfiguration) if !ok { - o.logger.Warn("invalid cache entry type", zap.String("actual", fmt.Sprintf("%T", entry)), + o.logger.Warn(logs.InvalidCacheEntryType, zap.String("actual", fmt.Sprintf("%T", entry)), zap.String("expected", fmt.Sprintf("%T", result))) return nil } @@ -95,7 +96,7 @@ func (o *SystemCache) GetSettings(key string) *data.BucketSettings { result, ok := entry.(*data.BucketSettings) if !ok { - o.logger.Warn("invalid cache entry type", zap.String("actual", fmt.Sprintf("%T", entry)), + o.logger.Warn(logs.InvalidCacheEntryType, zap.String("actual", fmt.Sprintf("%T", entry)), zap.String("expected", fmt.Sprintf("%T", result))) return nil } @@ -111,7 +112,7 @@ func (o *SystemCache) GetNotificationConfiguration(key string) *data.Notificatio result, ok := entry.(*data.NotificationConfiguration) if !ok { - o.logger.Warn("invalid cache entry type", zap.String("actual", fmt.Sprintf("%T", entry)), + o.logger.Warn(logs.InvalidCacheEntryType, zap.String("actual", fmt.Sprintf("%T", entry)), zap.String("expected", fmt.Sprintf("%T", result))) return nil } diff --git a/api/handler/acl.go b/api/handler/acl.go index 46961eb0..37be4dd0 100644 --- a/api/handler/acl.go +++ b/api/handler/acl.go @@ -20,6 +20,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/eacl" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" @@ -470,7 +471,7 @@ func (h *handler) PutObjectACLHandler(w http.ResponseWriter, r *http.Request) { ReqInfo: reqInfo, } if err = h.sendNotifications(ctx, s); err != nil { - h.reqLogger(ctx).Error("couldn't send notification: %w", zap.Error(err)) + h.reqLogger(ctx).Error(logs.CouldntSendNotification, zap.Error(err)) } } w.WriteHeader(http.StatusOK) @@ -1460,7 +1461,7 @@ func (h *handler) encodeObjectACL(ctx context.Context, bucketACL *layer.BucketAC if read { permission = aclFullControl } else { - h.reqLogger(ctx).Warn("some acl not fully mapped") + h.reqLogger(ctx).Warn(logs.SomeACLNotFullyMapped) } var grantee *Grantee diff --git a/api/handler/api.go b/api/handler/api.go index 0d26a5df..b0426334 100644 --- a/api/handler/api.go +++ b/api/handler/api.go @@ -11,6 +11,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap" "go.uber.org/zap" ) @@ -75,7 +76,7 @@ func New(log *zap.Logger, obj layer.Client, notificator Notificator, cfg *Config } if !cfg.NotificatorEnabled { - log.Warn("notificator is disabled, s3 won't produce notification events") + log.Warn(logs.NotificatorIsDisabledS3WontProduceNotificationEvents) } else if notificator == nil { return nil, errors.New("empty notificator") } diff --git a/api/handler/copy.go b/api/handler/copy.go index ba7c7460..dc55e24d 100644 --- a/api/handler/copy.go +++ b/api/handler/copy.go @@ -12,6 +12,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/session" "go.uber.org/zap" ) @@ -249,7 +250,7 @@ func (h *handler) CopyObjectHandler(w http.ResponseWriter, r *http.Request) { } } - h.reqLogger(ctx).Info("object is copied", zap.Stringer("object_id", dstObjInfo.ID)) + h.reqLogger(ctx).Info(logs.ObjectIsCopied, zap.Stringer("object_id", dstObjInfo.ID)) s := &SendNotificationParams{ Event: EventObjectCreatedCopy, @@ -258,7 +259,7 @@ func (h *handler) CopyObjectHandler(w http.ResponseWriter, r *http.Request) { ReqInfo: reqInfo, } if err = h.sendNotifications(ctx, s); err != nil { - h.reqLogger(ctx).Error("couldn't send notification: %w", zap.Error(err)) + h.reqLogger(ctx).Error(logs.CouldntSendNotification, zap.Error(err)) } if encryptionParams.Enabled() { diff --git a/api/handler/cors.go b/api/handler/cors.go index 1c228592..fd0b7b6b 100644 --- a/api/handler/cors.go +++ b/api/handler/cors.go @@ -9,6 +9,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "go.uber.org/zap" ) @@ -99,13 +100,13 @@ func (h *handler) AppendCORSHeaders(w http.ResponseWriter, r *http.Request) { } bktInfo, err := h.obj.GetBucketInfo(ctx, reqInfo.BucketName) if err != nil { - h.reqLogger(ctx).Warn("get bucket info", zap.Error(err)) + h.reqLogger(ctx).Warn(logs.GetBucketInfo, zap.Error(err)) return } cors, err := h.obj.GetBucketCORS(ctx, bktInfo) if err != nil { - h.reqLogger(ctx).Warn("get bucket cors", zap.Error(err)) + h.reqLogger(ctx).Warn(logs.GetBucketCors, zap.Error(err)) return } diff --git a/api/handler/delete.go b/api/handler/delete.go index 40283a8f..51a5dff6 100644 --- a/api/handler/delete.go +++ b/api/handler/delete.go @@ -11,6 +11,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/session" @@ -114,7 +115,7 @@ func (h *handler) DeleteObjectHandler(w http.ResponseWriter, r *http.Request) { var objID oid.ID if len(versionID) != 0 { if err = objID.DecodeString(versionID); err != nil { - h.reqLogger(ctx).Error("couldn't send notification: %w", zap.Error(err)) + h.reqLogger(ctx).Error(logs.CouldntSendNotification, zap.Error(err)) } } @@ -130,7 +131,7 @@ func (h *handler) DeleteObjectHandler(w http.ResponseWriter, r *http.Request) { } if err = h.sendNotifications(ctx, m); err != nil { - h.reqLogger(ctx).Error("couldn't send notification: %w", zap.Error(err)) + h.reqLogger(ctx).Error(logs.CouldntSendNotification, zap.Error(err)) } if deletedObject.VersionID != "" { @@ -261,7 +262,7 @@ func (h *handler) DeleteMultipleObjectsHandler(w http.ResponseWriter, r *http.Re zap.Array("objects", marshaler), zap.Errors("errors", errs), } - h.reqLogger(ctx).Error("couldn't delete objects", fields...) + h.reqLogger(ctx).Error(logs.CouldntDeleteObjects, fields...) } if err = middleware.EncodeToResponse(w, response); err != nil { diff --git a/api/handler/multipart_upload.go b/api/handler/multipart_upload.go index c9ba0cbc..fb0c5489 100644 --- a/api/handler/multipart_upload.go +++ b/api/handler/multipart_upload.go @@ -14,6 +14,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "github.com/google/uuid" "go.uber.org/zap" ) @@ -511,7 +512,7 @@ func (h *handler) completeMultipartUpload(r *http.Request, c *layer.CompleteMult ReqInfo: reqInfo, } if err = h.sendNotifications(ctx, s); err != nil { - h.reqLogger(ctx).Error("couldn't send notification: %w", zap.Error(err)) + h.reqLogger(ctx).Error(logs.CouldntSendNotification, zap.Error(err)) } return objInfo, nil diff --git a/api/handler/notifications.go b/api/handler/notifications.go index 13e0bc55..d52d0c88 100644 --- a/api/handler/notifications.go +++ b/api/handler/notifications.go @@ -12,6 +12,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer" "github.com/google/uuid" ) @@ -202,7 +203,7 @@ func (h *handler) checkBucketConfiguration(ctx context.Context, conf *data.Notif return } } else { - h.reqLogger(ctx).Warn("failed to send test event because notifications is disabled") + h.reqLogger(ctx).Warn(logs.FailedToSendTestEventBecauseNotificationsIsDisabled) } if q.ID == "" { diff --git a/api/handler/put.go b/api/handler/put.go index d466f61a..5c02078b 100644 --- a/api/handler/put.go +++ b/api/handler/put.go @@ -24,6 +24,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/encryption" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/creds/accessbox" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/eacl" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/session" "go.uber.org/zap" @@ -277,7 +278,7 @@ func (h *handler) PutObjectHandler(w http.ResponseWriter, r *http.Request) { ReqInfo: reqInfo, } if err = h.sendNotifications(ctx, s); err != nil { - h.reqLogger(ctx).Error("couldn't send notification: %w", zap.Error(err)) + h.reqLogger(ctx).Error(logs.CouldntSendNotification, zap.Error(err)) } if containsACL { @@ -494,7 +495,7 @@ func (h *handler) PostObject(w http.ResponseWriter, r *http.Request) { ReqInfo: reqInfo, } if err = h.sendNotifications(ctx, s); err != nil { - h.reqLogger(ctx).Error("couldn't send notification: %w", zap.Error(err)) + h.reqLogger(ctx).Error(logs.CouldntSendNotification, zap.Error(err)) } if acl := auth.MultipartFormValue(r, "acl"); acl != "" { @@ -539,7 +540,7 @@ func (h *handler) PostObject(w http.ResponseWriter, r *http.Request) { } if settings, err := h.obj.GetBucketSettings(ctx, bktInfo); err != nil { - h.reqLogger(ctx).Warn("couldn't get bucket versioning", zap.String("bucket name", reqInfo.BucketName), zap.Error(err)) + h.reqLogger(ctx).Warn(logs.CouldntGetBucketVersioning, zap.String("bucket name", reqInfo.BucketName), zap.Error(err)) } else if settings.VersioningEnabled() { w.Header().Set(api.AmzVersionID, objInfo.VersionID()) } @@ -778,7 +779,7 @@ func (h *handler) CreateBucketHandler(w http.ResponseWriter, r *http.Request) { return } - h.reqLogger(ctx).Info("bucket is created", zap.Stringer("container_id", bktInfo.CID)) + h.reqLogger(ctx).Info(logs.BucketIsCreated, zap.Stringer("container_id", bktInfo.CID)) if p.ObjectLockEnabled { sp := &layer.PutSettingsParams{ diff --git a/api/handler/tagging.go b/api/handler/tagging.go index 356bb3e7..306d8c15 100644 --- a/api/handler/tagging.go +++ b/api/handler/tagging.go @@ -13,6 +13,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "go.uber.org/zap" ) @@ -66,7 +67,7 @@ func (h *handler) PutObjectTaggingHandler(w http.ResponseWriter, r *http.Request ReqInfo: reqInfo, } if err = h.sendNotifications(ctx, s); err != nil { - h.reqLogger(ctx).Error("couldn't send notification: %w", zap.Error(err)) + h.reqLogger(ctx).Error(logs.CouldntSendNotification, zap.Error(err)) } w.WriteHeader(http.StatusOK) @@ -143,7 +144,7 @@ func (h *handler) DeleteObjectTaggingHandler(w http.ResponseWriter, r *http.Requ ReqInfo: reqInfo, } if err = h.sendNotifications(ctx, s); err != nil { - h.reqLogger(ctx).Error("couldn't send notification: %w", zap.Error(err)) + h.reqLogger(ctx).Error(logs.CouldntSendNotification, zap.Error(err)) } w.WriteHeader(http.StatusNoContent) diff --git a/api/handler/util.go b/api/handler/util.go index 83dcfd6f..3cd91cbc 100644 --- a/api/handler/util.go +++ b/api/handler/util.go @@ -13,6 +13,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" frosterrors "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/frostfs/errors" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/session" "go.uber.org/zap" ) @@ -36,7 +37,7 @@ func (h *handler) logAndSendError(w http.ResponseWriter, logText string, reqInfo zap.String("description", logText), zap.Error(err)} fields = append(fields, additional...) - h.log.Error("request failed", fields...) // consider using h.reqLogger (it requires accept context.Context or http.Request) + h.log.Error(logs.RequestFailed, fields...) // consider using h.reqLogger (it requires accept context.Context or http.Request) } func (h *handler) logAndSendErrorNoHeader(w http.ResponseWriter, logText string, reqInfo *middleware.ReqInfo, err error, additional ...zap.Field) { @@ -49,7 +50,7 @@ func (h *handler) logAndSendErrorNoHeader(w http.ResponseWriter, logText string, zap.String("description", logText), zap.Error(err)} fields = append(fields, additional...) - h.log.Error("request failed", fields...) // consider using h.reqLogger (it requires accept context.Context or http.Request) + h.log.Error(logs.RequestFailed, fields...) // consider using h.reqLogger (it requires accept context.Context or http.Request) } func transformToS3Error(err error) error { diff --git a/api/layer/cache.go b/api/layer/cache.go index 961c0099..2e3910b3 100644 --- a/api/layer/cache.go +++ b/api/layer/cache.go @@ -3,6 +3,7 @@ package layer import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/cache" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user" @@ -61,7 +62,7 @@ func (c *Cache) GetBucket(name string) *data.BucketInfo { func (c *Cache) PutBucket(bktInfo *data.BucketInfo) { if err := c.bucketCache.Put(bktInfo); err != nil { - c.logger.Warn("couldn't put bucket info into cache", + c.logger.Warn(logs.CouldntPutBucketInfoIntoCache, zap.String("bucket name", bktInfo.Name), zap.Stringer("bucket cid", bktInfo.CID), zap.Error(err)) @@ -104,13 +105,13 @@ func (c *Cache) GetLastObject(owner user.ID, bktName, objName string) *data.Exte func (c *Cache) PutObject(owner user.ID, extObjInfo *data.ExtendedObjectInfo) { if err := c.objCache.PutObject(extObjInfo); err != nil { - c.logger.Warn("couldn't add object to cache", zap.Error(err), + c.logger.Warn(logs.CouldntAddObjectToCache, zap.Error(err), zap.String("object_name", extObjInfo.ObjectInfo.Name), zap.String("bucket_name", extObjInfo.ObjectInfo.Bucket), zap.String("cid", extObjInfo.ObjectInfo.CID.EncodeToString()), zap.String("oid", extObjInfo.ObjectInfo.ID.EncodeToString())) } if err := c.accessCache.Put(owner, extObjInfo.ObjectInfo.Address().EncodeToString()); err != nil { - c.logger.Warn("couldn't cache access control operation", zap.Error(err)) + c.logger.Warn(logs.CouldntCacheAccessControlOperation, zap.Error(err)) } } @@ -118,7 +119,7 @@ func (c *Cache) PutObjectWithName(owner user.ID, extObjInfo *data.ExtendedObject c.PutObject(owner, extObjInfo) if err := c.namesCache.Put(extObjInfo.ObjectInfo.NiceName(), extObjInfo.ObjectInfo.Address()); err != nil { - c.logger.Warn("couldn't put obj address to name cache", + c.logger.Warn(logs.CouldntPutObjAddressToNameCache, zap.String("obj nice name", extObjInfo.ObjectInfo.NiceName()), zap.Error(err)) } @@ -134,11 +135,11 @@ func (c *Cache) GetList(owner user.ID, key cache.ObjectsListKey) []*data.NodeVer func (c *Cache) PutList(owner user.ID, key cache.ObjectsListKey, list []*data.NodeVersion) { if err := c.listsCache.PutVersions(key, list); err != nil { - c.logger.Warn("couldn't cache list of objects", zap.Error(err)) + c.logger.Warn(logs.CouldntCacheListOfObjects, zap.Error(err)) } if err := c.accessCache.Put(owner, key.String()); err != nil { - c.logger.Warn("couldn't cache access control operation", zap.Error(err)) + c.logger.Warn(logs.CouldntCacheAccessControlOperation, zap.Error(err)) } } @@ -152,11 +153,11 @@ func (c *Cache) GetTagging(owner user.ID, key string) map[string]string { func (c *Cache) PutTagging(owner user.ID, key string, tags map[string]string) { if err := c.systemCache.PutTagging(key, tags); err != nil { - c.logger.Error("couldn't cache tags", zap.Error(err)) + c.logger.Error(logs.CouldntCacheTags, zap.Error(err)) } if err := c.accessCache.Put(owner, key); err != nil { - c.logger.Warn("couldn't cache access control operation", zap.Error(err)) + c.logger.Warn(logs.CouldntCacheAccessControlOperation, zap.Error(err)) } } @@ -174,11 +175,11 @@ func (c *Cache) GetLockInfo(owner user.ID, key string) *data.LockInfo { func (c *Cache) PutLockInfo(owner user.ID, key string, lockInfo *data.LockInfo) { if err := c.systemCache.PutLockInfo(key, lockInfo); err != nil { - c.logger.Error("couldn't cache lock info", zap.Error(err)) + c.logger.Error(logs.CouldntCacheLockInfo, zap.Error(err)) } if err := c.accessCache.Put(owner, key); err != nil { - c.logger.Warn("couldn't cache access control operation", zap.Error(err)) + c.logger.Warn(logs.CouldntCacheAccessControlOperation, zap.Error(err)) } } @@ -195,11 +196,11 @@ func (c *Cache) GetSettings(owner user.ID, bktInfo *data.BucketInfo) *data.Bucke func (c *Cache) PutSettings(owner user.ID, bktInfo *data.BucketInfo, settings *data.BucketSettings) { key := bktInfo.Name + bktInfo.SettingsObjectName() if err := c.systemCache.PutSettings(key, settings); err != nil { - c.logger.Warn("couldn't cache bucket settings", zap.String("bucket", bktInfo.Name), zap.Error(err)) + c.logger.Warn(logs.CouldntCacheBucketSettings, zap.String("bucket", bktInfo.Name), zap.Error(err)) } if err := c.accessCache.Put(owner, key); err != nil { - c.logger.Warn("couldn't cache access control operation", zap.Error(err)) + c.logger.Warn(logs.CouldntCacheAccessControlOperation, zap.Error(err)) } } @@ -217,11 +218,11 @@ func (c *Cache) PutCORS(owner user.ID, bkt *data.BucketInfo, cors *data.CORSConf key := bkt.Name + bkt.CORSObjectName() if err := c.systemCache.PutCORS(key, cors); err != nil { - c.logger.Warn("couldn't cache cors", zap.String("bucket", bkt.Name), zap.Error(err)) + c.logger.Warn(logs.CouldntCacheCors, zap.String("bucket", bkt.Name), zap.Error(err)) } if err := c.accessCache.Put(owner, key); err != nil { - c.logger.Warn("couldn't cache access control operation", zap.Error(err)) + c.logger.Warn(logs.CouldntCacheAccessControlOperation, zap.Error(err)) } } @@ -242,10 +243,10 @@ func (c *Cache) GetNotificationConfiguration(owner user.ID, bktInfo *data.Bucket func (c *Cache) PutNotificationConfiguration(owner user.ID, bktInfo *data.BucketInfo, configuration *data.NotificationConfiguration) { key := bktInfo.Name + bktInfo.NotificationConfigurationObjectName() if err := c.systemCache.PutNotificationConfiguration(key, configuration); err != nil { - c.logger.Warn("couldn't cache notification configuration", zap.String("bucket", bktInfo.Name), zap.Error(err)) + c.logger.Warn(logs.CouldntCacheNotificationConfiguration, zap.String("bucket", bktInfo.Name), zap.Error(err)) } if err := c.accessCache.Put(owner, key); err != nil { - c.logger.Warn("couldn't cache access control operation", zap.Error(err)) + c.logger.Warn(logs.CouldntCacheAccessControlOperation, zap.Error(err)) } } diff --git a/api/layer/container.go b/api/layer/container.go index bd5b44a6..e86dcb7a 100644 --- a/api/layer/container.go +++ b/api/layer/container.go @@ -9,6 +9,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" s3errors "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" @@ -63,7 +64,7 @@ func (n *layer) containerInfo(ctx context.Context, idCnr cid.ID) (*data.BucketIn if len(attrLockEnabled) > 0 { info.ObjectLockEnabled, err = strconv.ParseBool(attrLockEnabled) if err != nil { - log.Error("could not parse container object lock enabled attribute", + log.Error(logs.CouldNotParseContainerObjectLockEnabledAttribute, zap.String("lock_enabled", attrLockEnabled), zap.Error(err), ) @@ -78,7 +79,7 @@ func (n *layer) containerInfo(ctx context.Context, idCnr cid.ID) (*data.BucketIn func (n *layer) containerList(ctx context.Context) ([]*data.BucketInfo, error) { res, err := n.frostFS.UserContainers(ctx, n.BearerOwner(ctx)) if err != nil { - n.reqLogger(ctx).Error("could not list user containers", zap.Error(err)) + n.reqLogger(ctx).Error(logs.CouldNotListUserContainers, zap.Error(err)) return nil, err } @@ -86,7 +87,7 @@ func (n *layer) containerList(ctx context.Context) ([]*data.BucketInfo, error) { for i := range res { info, err := n.containerInfo(ctx, res[i]) if err != nil { - n.reqLogger(ctx).Error("could not fetch container info", zap.Error(err)) + n.reqLogger(ctx).Error(logs.CouldNotFetchContainerInfo, zap.Error(err)) continue } diff --git a/api/layer/cors.go b/api/layer/cors.go index d74c188d..180f6019 100644 --- a/api/layer/cors.go +++ b/api/layer/cors.go @@ -10,6 +10,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "go.uber.org/zap" ) @@ -57,7 +58,7 @@ func (n *layer) PutBucketCORS(ctx context.Context, p *PutCORSParams) error { if !objIDToDeleteNotFound { if err = n.objectDelete(ctx, p.BktInfo, objIDToDelete); err != nil { - n.reqLogger(ctx).Error("couldn't delete cors object", zap.Error(err), + n.reqLogger(ctx).Error(logs.CouldntDeleteCorsObject, zap.Error(err), zap.String("cnrID", p.BktInfo.CID.EncodeToString()), zap.String("objID", objIDToDelete.EncodeToString())) } diff --git a/api/layer/layer.go b/api/layer/layer.go index 91a3d832..69e23cd9 100644 --- a/api/layer/layer.go +++ b/api/layer/layer.go @@ -16,6 +16,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/encryption" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" @@ -562,7 +563,7 @@ func (n *layer) GetExtendedObjectInfo(ctx context.Context, p *HeadObjectParams) return nil, err } - n.reqLogger(ctx).Debug("get object", + n.reqLogger(ctx).Debug(logs.GetObject, zap.Stringer("cid", p.BktInfo.CID), zap.Stringer("oid", objInfo.ObjectInfo.ID)) @@ -693,7 +694,7 @@ func (n *layer) handleNotFoundError(bkt *data.BucketInfo, obj *VersionedObject) func (n *layer) handleObjectDeleteErrors(ctx context.Context, bkt *data.BucketInfo, obj *VersionedObject, nodeID uint64) *VersionedObject { if client.IsErrObjectAlreadyRemoved(obj.Error) { - n.reqLogger(ctx).Debug("object already removed", + n.reqLogger(ctx).Debug(logs.ObjectAlreadyRemoved, zap.Stringer("cid", bkt.CID), zap.String("oid", obj.VersionID)) obj.Error = n.treeService.RemoveVersion(ctx, bkt, nodeID) @@ -705,7 +706,7 @@ func (n *layer) handleObjectDeleteErrors(ctx context.Context, bkt *data.BucketIn } if client.IsErrObjectNotFound(obj.Error) { - n.reqLogger(ctx).Debug("object not found", + n.reqLogger(ctx).Debug(logs.ObjectNotFound, zap.Stringer("cid", bkt.CID), zap.String("oid", obj.VersionID)) obj.Error = nil @@ -783,7 +784,7 @@ func (n *layer) ResolveBucket(ctx context.Context, name string) (cid.ID, error) return cid.ID{}, err } - n.reqLogger(ctx).Info("resolve bucket", zap.Stringer("cid", cnrID)) + n.reqLogger(ctx).Info(logs.ResolveBucket, zap.Stringer("cid", cnrID)) } return cnrID, nil diff --git a/api/layer/multipart_upload.go b/api/layer/multipart_upload.go index fe67e6f7..5c63c887 100644 --- a/api/layer/multipart_upload.go +++ b/api/layer/multipart_upload.go @@ -16,6 +16,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" s3errors "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/encryption" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user" "github.com/minio/sio" @@ -202,7 +203,7 @@ func (n *layer) UploadPart(ctx context.Context, p *UploadPartParams) (string, er func (n *layer) uploadPart(ctx context.Context, multipartInfo *data.MultipartInfo, p *UploadPartParams) (*data.ObjectInfo, error) { encInfo := FormEncryptionInfo(multipartInfo.Meta) if err := p.Info.Encryption.MatchObjectEncryption(encInfo); err != nil { - n.reqLogger(ctx).Warn("mismatched obj encryptionInfo", zap.Error(err)) + n.reqLogger(ctx).Warn(logs.MismatchedObjEncryptionInfo, zap.Error(err)) return nil, s3errors.GetAPIError(s3errors.ErrInvalidEncryptionParameters) } @@ -237,7 +238,7 @@ func (n *layer) uploadPart(ctx context.Context, multipartInfo *data.MultipartInf size = decSize } - n.reqLogger(ctx).Debug("upload part", + n.reqLogger(ctx).Debug(logs.UploadPart, zap.String("multipart upload", p.Info.UploadID), zap.Int("part number", p.PartNumber), zap.Stringer("cid", bktInfo.CID), zap.Stringer("oid", id)) @@ -258,7 +259,7 @@ func (n *layer) uploadPart(ctx context.Context, multipartInfo *data.MultipartInf } if !oldPartIDNotFound { if err = n.objectDelete(ctx, bktInfo, oldPartID); err != nil { - n.reqLogger(ctx).Error("couldn't delete old part object", zap.Error(err), + n.reqLogger(ctx).Error(logs.CouldntDeleteOldPartObject, zap.Error(err), zap.String("cid", bktInfo.CID.EncodeToString()), zap.String("oid", oldPartID.EncodeToString())) } @@ -412,7 +413,7 @@ func (n *layer) CompleteMultipartUpload(ctx context.Context, p *CompleteMultipar CopiesNumbers: multipartInfo.CopiesNumbers, }) if err != nil { - n.reqLogger(ctx).Error("could not put a completed object (multipart upload)", + n.reqLogger(ctx).Error(logs.CouldNotPutCompletedObject, zap.String("uploadID", p.Info.UploadID), zap.String("uploadKey", p.Info.Key), zap.Error(err)) @@ -424,7 +425,7 @@ func (n *layer) CompleteMultipartUpload(ctx context.Context, p *CompleteMultipar addr.SetContainer(p.Info.Bkt.CID) for _, partInfo := range partsInfo { if err = n.objectDelete(ctx, p.Info.Bkt, partInfo.OID); err != nil { - n.reqLogger(ctx).Warn("could not delete upload part", + n.reqLogger(ctx).Warn(logs.CouldNotDeleteUploadPart, zap.Stringer("cid", p.Info.Bkt.CID), zap.Stringer("oid", &partInfo.OID), zap.Error(err)) } @@ -503,7 +504,7 @@ func (n *layer) AbortMultipartUpload(ctx context.Context, p *UploadInfoParams) e for _, info := range parts { if err = n.objectDelete(ctx, p.Bkt, info.OID); err != nil { - n.reqLogger(ctx).Warn("couldn't delete part", zap.String("cid", p.Bkt.CID.EncodeToString()), + n.reqLogger(ctx).Warn(logs.CouldntDeletePart, zap.String("cid", p.Bkt.CID.EncodeToString()), zap.String("oid", info.OID.EncodeToString()), zap.Int("part number", info.Number), zap.Error(err)) } } @@ -520,7 +521,7 @@ func (n *layer) ListParts(ctx context.Context, p *ListPartsParams) (*ListPartsIn encInfo := FormEncryptionInfo(multipartInfo.Meta) if err = p.Info.Encryption.MatchObjectEncryption(encInfo); err != nil { - n.reqLogger(ctx).Warn("mismatched obj encryptionInfo", zap.Error(err)) + n.reqLogger(ctx).Warn(logs.MismatchedObjEncryptionInfo, zap.Error(err)) return nil, s3errors.GetAPIError(s3errors.ErrInvalidEncryptionParameters) } @@ -584,7 +585,7 @@ func (n *layer) getUploadParts(ctx context.Context, p *UploadInfoParams) (*data. oids[i] = part.OID.EncodeToString() } - n.reqLogger(ctx).Debug("part details", + n.reqLogger(ctx).Debug(logs.PartDetails, zap.Stringer("cid", p.Bkt.CID), zap.String("upload id", p.UploadID), zap.Ints("part numbers", partsNumbers), diff --git a/api/layer/notifications.go b/api/layer/notifications.go index 0473d0c1..38bbf7fb 100644 --- a/api/layer/notifications.go +++ b/api/layer/notifications.go @@ -9,6 +9,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "go.uber.org/zap" ) @@ -46,7 +47,7 @@ func (n *layer) PutBucketNotificationConfiguration(ctx context.Context, p *PutBu if !objIDToDeleteNotFound { if err = n.objectDelete(ctx, p.BktInfo, objIDToDelete); err != nil { - n.reqLogger(ctx).Error("couldn't delete notification configuration object", zap.Error(err), + n.reqLogger(ctx).Error(logs.CouldntDeleteNotificationConfigurationObject, zap.Error(err), zap.String("cid", p.BktInfo.CID.EncodeToString()), zap.String("oid", objIDToDelete.EncodeToString())) } diff --git a/api/layer/object.go b/api/layer/object.go index 09a57012..b9cde712 100644 --- a/api/layer/object.go +++ b/api/layer/object.go @@ -19,6 +19,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/cache" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" apiErrors "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" @@ -291,7 +292,7 @@ func (n *layer) PutObject(ctx context.Context, p *PutObjectParams) (*data.Extend return nil, err } - n.reqLogger(ctx).Debug("put object", zap.Stringer("cid", p.BktInfo.CID), zap.Stringer("oid", id)) + n.reqLogger(ctx).Debug(logs.PutObject, zap.Stringer("cid", p.BktInfo.CID), zap.Stringer("oid", id)) newVersion := &data.NodeVersion{ BaseNodeVersion: data.BaseNodeVersion{ @@ -468,7 +469,7 @@ func (n *layer) objectPutAndHash(ctx context.Context, prm PrmObjectCreate, bktIn id, err := n.frostFS.CreateObject(ctx, prm) if err != nil { if _, errDiscard := io.Copy(io.Discard, prm.Payload); errDiscard != nil { - n.reqLogger(ctx).Warn("failed to discard put payload, probably goroutine leaks", zap.Error(errDiscard)) + n.reqLogger(ctx).Warn(logs.FailedToDiscardPutPayloadProbablyGoroutineLeaks, zap.Error(errDiscard)) } return 0, oid.ID{}, nil, err @@ -657,7 +658,7 @@ func (n *layer) initWorkerPool(ctx context.Context, size int, p allObjectParams, }) if err != nil { wg.Done() - reqLog.Warn("failed to submit task to pool", zap.Error(err)) + reqLog.Warn(logs.FailedToSubmitTaskToPool, zap.Error(err)) } }(node) } @@ -799,7 +800,7 @@ func (n *layer) objectInfoFromObjectsCacheOrFrostFS(ctx context.Context, bktInfo meta, err := n.objectHead(ctx, bktInfo, node.OID) if err != nil { - n.reqLogger(ctx).Warn("could not fetch object meta", zap.Error(err)) + n.reqLogger(ctx).Warn(logs.CouldNotFetchObjectMeta, zap.Error(err)) return nil } diff --git a/api/layer/tagging.go b/api/layer/tagging.go index f1d775ef..c662c0b5 100644 --- a/api/layer/tagging.go +++ b/api/layer/tagging.go @@ -7,6 +7,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" s3errors "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user" @@ -180,7 +181,7 @@ func (n *layer) getNodeVersion(ctx context.Context, objVersion *ObjectVersion) ( } if err == nil && version != nil && !version.IsDeleteMarker() { - n.reqLogger(ctx).Debug("get tree node", + n.reqLogger(ctx).Debug(logs.GetTreeNode, zap.Stringer("cid", objVersion.BktInfo.CID), zap.Stringer("oid", version.OID)) } diff --git a/api/middleware/auth.go b/api/middleware/auth.go index ba1d5349..8e079c1a 100644 --- a/api/middleware/auth.go +++ b/api/middleware/auth.go @@ -5,6 +5,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/auth" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "go.uber.org/zap" ) @@ -15,9 +16,9 @@ func Auth(center auth.Center, log *zap.Logger) Func { box, err := center.Authenticate(r) if err != nil { if err == auth.ErrNoAuthorizationHeader { - reqLogOrDefault(ctx, log).Debug("couldn't receive access box for gate key, random key will be used") + reqLogOrDefault(ctx, log).Debug(logs.CouldntReceiveAccessBoxForGateKeyRandomKeyWillBeUsed) } else { - reqLogOrDefault(ctx, log).Error("failed to pass authentication", zap.Error(err)) + reqLogOrDefault(ctx, log).Error(logs.FailedToPassAuthentication, zap.Error(err)) if _, ok := err.(errors.Error); !ok { err = errors.GetAPIError(errors.ErrAccessDenied) } diff --git a/api/middleware/metrics.go b/api/middleware/metrics.go index a76a5468..d6d73284 100644 --- a/api/middleware/metrics.go +++ b/api/middleware/metrics.go @@ -10,6 +10,7 @@ import ( "time" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/metrics" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer" "go.uber.org/zap" @@ -141,7 +142,7 @@ func resolveCID(log *zap.Logger, resolveBucket BucketResolveFunc) cidResolveFunc bktInfo, err := resolveBucket(ctx, reqInfo.BucketName) if err != nil { - reqLogOrDefault(ctx, log).Debug("failed to resolve CID", zap.Error(err)) + reqLogOrDefault(ctx, log).Debug(logs.FailedToResolveCID, zap.Error(err)) return "" } diff --git a/api/middleware/reqinfo.go b/api/middleware/reqinfo.go index 524288ea..5cb2dd51 100644 --- a/api/middleware/reqinfo.go +++ b/api/middleware/reqinfo.go @@ -9,6 +9,7 @@ import ( "strings" "sync" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "github.com/go-chi/chi/v5" "github.com/google/uuid" "go.uber.org/zap" @@ -207,7 +208,7 @@ func Request(log *zap.Logger) Func { reqLogger := log.With(zap.String("request_id", reqInfo.RequestID)) r = r.WithContext(SetReqLogger(r.Context(), reqLogger)) - reqLogger.Info("request start", zap.String("host", r.Host), + reqLogger.Info(logs.RequestStart, zap.String("host", r.Host), zap.String("remote_host", reqInfo.RemoteHost)) // continue execution diff --git a/api/middleware/response.go b/api/middleware/response.go index 22f4c65f..68de7123 100644 --- a/api/middleware/response.go +++ b/api/middleware/response.go @@ -9,6 +9,7 @@ import ( "sync" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/version" "go.uber.org/zap" ) @@ -319,7 +320,7 @@ func LogSuccessResponse(l *zap.Logger) Func { reqLogger := reqLogOrDefault(ctx, l) reqInfo := GetReqInfo(ctx) - reqLogger.Info("request end", + reqLogger.Info(logs.RequestEnd, zap.String("method", reqInfo.API), zap.String("bucket", reqInfo.BucketName), zap.String("object", reqInfo.ObjectName), diff --git a/api/notifications/controller.go b/api/notifications/controller.go index 2909ab03..353ea84a 100644 --- a/api/notifications/controller.go +++ b/api/notifications/controller.go @@ -9,6 +9,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/handler" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "github.com/nats-io/nats.go" "go.uber.org/zap" ) @@ -168,9 +169,9 @@ func (c *Controller) Listen(ctx context.Context) { select { case msg := <-stream.ch: if err := stream.h.HandleMessage(ctx, msg); err != nil { - c.logger.Error("could not handle message", zap.Error(err)) + c.logger.Error(logs.CouldNotHandleMessage, zap.Error(err)) } else if err = msg.Ack(); err != nil { - c.logger.Error("could not ACK message", zap.Error(err)) + c.logger.Error(logs.CouldNotACKMessage, zap.Error(err)) } case <-ctx.Done(): return @@ -187,10 +188,10 @@ func (c *Controller) SendNotifications(topics map[string]string, p *handler.Send event.Records[0].S3.ConfigurationID = id msg, err := json.Marshal(event) if err != nil { - c.logger.Error("couldn't marshal an event", zap.String("subject", topic), zap.Error(err)) + c.logger.Error(logs.CouldntMarshalAnEvent, zap.String("subject", topic), zap.Error(err)) } if err = c.publish(topic, msg); err != nil { - c.logger.Error("couldn't send an event to topic", zap.String("subject", topic), zap.Error(err)) + c.logger.Error(logs.CouldntSendAnEventToTopic, zap.String("subject", topic), zap.Error(err)) } } diff --git a/api/router.go b/api/router.go index 1a6b44cd..0da2d5f9 100644 --- a/api/router.go +++ b/api/router.go @@ -9,6 +9,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" s3middleware "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/metrics" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" @@ -135,7 +136,7 @@ func errorResponseHandler(w http.ResponseWriter, r *http.Request) { }) if log := s3middleware.GetReqLog(ctx); log != nil { - log.Error("request unmatched", zap.String("method", reqInfo.API)) + log.Error(logs.RequestUnmatched, zap.String("method", reqInfo.API)) } } diff --git a/authmate/authmate.go b/authmate/authmate.go index 870e7b5d..f5d36802 100644 --- a/authmate/authmate.go +++ b/authmate/authmate.go @@ -16,6 +16,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/cache" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/creds/accessbox" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/creds/tokens" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" frostfsecdsa "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto/ecdsa" @@ -168,11 +169,11 @@ type ( func (a *Agent) checkContainer(ctx context.Context, opts ContainerOptions, idOwner user.ID) (cid.ID, error) { if !opts.ID.Equals(cid.ID{}) { - a.log.Info("check container", zap.Stringer("cid", opts.ID)) + a.log.Info(logs.CheckContainer, zap.Stringer("cid", opts.ID)) return opts.ID, a.frostFS.ContainerExists(ctx, opts.ID) } - a.log.Info("create container", + a.log.Info(logs.CreateContainer, zap.String("friendly_name", opts.FriendlyName), zap.String("placement_policy", opts.PlacementPolicy)) @@ -267,7 +268,7 @@ func (a *Agent) IssueSecret(ctx context.Context, w io.Writer, options *IssueSecr return fmt.Errorf("check container: %w", err) } - a.log.Info("store bearer token into FrostFS", + a.log.Info(logs.StoreBearerTokenIntoFrostFS, zap.Stringer("owner_tkn", idOwner)) creds := tokens.New(a.frostFS, secrets.EphemeralKey, cache.DefaultAccessBoxConfig(a.log)) @@ -345,7 +346,7 @@ func (a *Agent) UpdateSecret(ctx context.Context, w io.Writer, options *UpdateSe var idOwner user.ID user.IDFromKey(&idOwner, options.FrostFSKey.PrivateKey.PublicKey) - a.log.Info("update access cred object into FrostFS", + a.log.Info(logs.UpdateAccessCredObjectIntoFrostFS, zap.Stringer("owner_tkn", idOwner)) oldAddr := options.Address diff --git a/cmd/s3-authmate/modules/utils.go b/cmd/s3-authmate/modules/utils.go index 61b2ff1e..807b7b21 100644 --- a/cmd/s3-authmate/modules/utils.go +++ b/cmd/s3-authmate/modules/utils.go @@ -10,6 +10,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/authmate" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/frostfs" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/pool" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/spf13/viper" @@ -27,7 +28,7 @@ type PoolConfig struct { } func createFrostFS(ctx context.Context, log *zap.Logger, cfg PoolConfig) (authmate.FrostFS, error) { - log.Debug("prepare connection pool") + log.Debug(logs.PrepareConnectionPool) var prm pool.InitParameters prm.SetKey(&cfg.Key.PrivateKey) diff --git a/cmd/s3-gw/app.go b/cmd/s3-gw/app.go index a0db0523..2494a87c 100644 --- a/cmd/s3-gw/app.go +++ b/cmd/s3-gw/app.go @@ -24,6 +24,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/resolver" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/frostfs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/frostfs/services" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/version" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/wallet" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/xml" @@ -131,7 +132,7 @@ func (a *App) initLayer(ctx context.Context) { // prepare random key for anonymous requests randomKey, err := keys.NewPrivateKey() if err != nil { - a.log.Fatal("couldn't generate random key", zap.Error(err)) + a.log.Fatal(logs.CouldntGenerateRandomKey, zap.Error(err)) } var gateOwner user.ID @@ -155,11 +156,11 @@ func (a *App) initLayer(ctx context.Context) { nopts := getNotificationsOptions(a.cfg, a.log) a.nc, err = notifications.NewController(nopts, a.log) if err != nil { - a.log.Fatal("failed to enable notifications", zap.Error(err)) + a.log.Fatal(logs.FailedToEnableNotifications, zap.Error(err)) } if err = a.obj.Initialize(ctx, a.nc); err != nil { - a.log.Fatal("couldn't initialize layer", zap.Error(err)) + a.log.Fatal(logs.CouldntInitializeLayer, zap.Error(err)) } } } @@ -167,7 +168,7 @@ func (a *App) initLayer(ctx context.Context) { func newAppSettings(log *Logger, v *viper.Viper) *appSettings { policies, err := newPlacementPolicy(log.logger, v) if err != nil { - log.logger.Fatal("failed to create new policy mapping", zap.Error(err)) + log.logger.Fatal(logs.FailedToCreateNewPolicyMapping, zap.Error(err)) } settings := &appSettings{ @@ -213,7 +214,7 @@ func (a *App) initResolver() { var err error a.bucketResolver, err = resolver.NewBucketResolver(a.getResolverConfig()) if err != nil { - a.log.Fatal("failed to create resolver", zap.Error(err)) + a.log.Fatal(logs.FailedToCreateResolver, zap.Error(err)) } } @@ -226,11 +227,11 @@ func (a *App) getResolverConfig() ([]string, *resolver.Config) { order := a.cfg.GetStringSlice(cfgResolveOrder) if resolveCfg.RPCAddress == "" { order = remove(order, resolver.NNSResolver) - a.log.Warn(fmt.Sprintf("resolver '%s' won't be used since '%s' isn't provided", resolver.NNSResolver, cfgRPCEndpoint)) + a.log.Warn(logs.ResolverNNSWontBeUsedSinceRPCEndpointIsntProvided) } if len(order) == 0 { - a.log.Info("container resolver will be disabled because of resolvers 'resolver_order' is empty") + a.log.Info(logs.ContainerResolverWillBeDisabled) } return order, resolveCfg @@ -251,10 +252,10 @@ func (a *App) initTracing(ctx context.Context) { } updated, err := tracing.Setup(ctx, cfg) if err != nil { - a.log.Warn("failed to initialize tracing", zap.Error(err)) + a.log.Warn(logs.FailedToInitializeTracing, zap.Error(err)) } if updated { - a.log.Info("tracing config updated") + a.log.Info(logs.TracingConfigUpdated) } } @@ -264,7 +265,7 @@ func (a *App) shutdownTracing() { defer cancel() if err := tracing.Shutdown(shdnCtx); err != nil { - a.log.Warn("failed to shutdown tracing", zap.Error(err)) + a.log.Warn(logs.FailedToShutdownTracing, zap.Error(err)) } } @@ -285,12 +286,12 @@ func getPools(ctx context.Context, logger *zap.Logger, cfg *viper.Viper) (*pool. password := wallet.GetPassword(cfg, cfgWalletPassphrase) key, err := wallet.GetKeyFromPath(cfg.GetString(cfgWalletPath), cfg.GetString(cfgWalletAddress), password) if err != nil { - logger.Fatal("could not load FrostFS private key", zap.Error(err)) + logger.Fatal(logs.CouldNotLoadFrostFSPrivateKey, zap.Error(err)) } prm.SetKey(&key.PrivateKey) prmTree.SetKey(key) - logger.Info("using credentials", zap.String("FrostFS", hex.EncodeToString(key.PublicKey().Bytes()))) + logger.Info(logs.UsingCredentials, zap.String("FrostFS", hex.EncodeToString(key.PublicKey().Bytes()))) for _, peer := range fetchPeers(logger, cfg) { prm.AddNode(peer) @@ -333,19 +334,19 @@ func getPools(ctx context.Context, logger *zap.Logger, cfg *viper.Viper) (*pool. p, err := pool.NewPool(prm) if err != nil { - logger.Fatal("failed to create connection pool", zap.Error(err)) + logger.Fatal(logs.FailedToCreateConnectionPool, zap.Error(err)) } if err = p.Dial(ctx); err != nil { - logger.Fatal("failed to dial connection pool", zap.Error(err)) + logger.Fatal(logs.FailedToDialConnectionPool, zap.Error(err)) } treePool, err := treepool.NewPool(prmTree) if err != nil { - logger.Fatal("failed to create tree pool", zap.Error(err)) + logger.Fatal(logs.FailedToCreateTreePool, zap.Error(err)) } if err = treePool.Dial(ctx); err != nil { - logger.Fatal("failed to dial tree pool", zap.Error(err)) + logger.Fatal(logs.FailedToDialTreePool, zap.Error(err)) } return p, treePool, key @@ -393,7 +394,7 @@ func (p *placementPolicy) DefaultCopiesNumbers() []uint32 { func (p *placementPolicy) update(l *zap.Logger, v *viper.Viper) { if err := p.updatePolicy(v); err != nil { - l.Warn("policies won't be updated", zap.Error(err)) + l.Warn(logs.PoliciesWontBeUpdated, zap.Error(err)) } p.updateCopiesNumbers(l, v) @@ -421,7 +422,7 @@ func (p *placementPolicy) updatePolicy(v *viper.Viper) error { func (p *placementPolicy) updateCopiesNumbers(l *zap.Logger, v *viper.Viper) { if newCopiesNumbers, err := fetchCopiesNumbers(l, v); err != nil { - l.Warn("copies numbers won't be updated", zap.Error(err)) + l.Warn(logs.CopiesNumbersWontBeUpdated, zap.Error(err)) } else { p.mu.Lock() p.copiesNumbers = newCopiesNumbers @@ -436,12 +437,12 @@ func (p *placementPolicy) updateDefaultCopiesNumbers(l *zap.Logger, v *viper.Vip p.mu.Lock() p.defaultCopiesNumbers = configuredValues p.mu.Unlock() - l.Info("default copies numbers", zap.Uint32s("vector", p.defaultCopiesNumbers)) + l.Info(logs.DefaultCopiesNumbers, zap.Uint32s("vector", p.defaultCopiesNumbers)) return } - l.Error("cannot parse default copies numbers", zap.Error(err)) - l.Warn("default copies numbers won't be updated", zap.Uint32s("current value", p.DefaultCopiesNumbers())) + l.Error(logs.CannotParseDefaultCopiesNumbers, zap.Error(err)) + l.Warn(logs.DefaultCopiesNumbersWontBeUpdated, zap.Uint32s("current value", p.DefaultCopiesNumbers())) } func remove(list []string, element string) []string { @@ -459,7 +460,7 @@ func remove(list []string, element string) []string { // version (version.Version) and its name (frostfs-s3-gw). At the end, it writes // about the stop to the log. func (a *App) Wait() { - a.log.Info("application started", + a.log.Info(logs.ApplicationStarted, zap.String("name", "frostfs-s3-gw"), zap.String("version", version.Version), ) @@ -469,7 +470,7 @@ func (a *App) Wait() { <-a.webDone // wait for web-server to be stopped - a.log.Info("application finished") + a.log.Info(logs.ApplicationFinished) } func (a *App) setHealthStatus() { @@ -480,7 +481,7 @@ func (a *App) setHealthStatus() { func (a *App) Serve(ctx context.Context) { // Attach S3 API: domains := a.cfg.GetStringSlice(cfgListenDomains) - a.log.Info("fetch domains, prepare to use API", zap.Strings("domains", domains)) + a.log.Info(logs.FetchDomainsPrepareToUseAPI, zap.Strings("domains", domains)) throttleOps := middleware.ThrottleOpts{ Limit: a.settings.maxClient.count, @@ -499,10 +500,10 @@ func (a *App) Serve(ctx context.Context) { for i := range a.servers { go func(i int) { - a.log.Info("starting server", zap.String("address", a.servers[i].Address())) + a.log.Info(logs.StartingServer, zap.String("address", a.servers[i].Address())) if err := srv.Serve(a.servers[i].Listener()); err != nil && err != http.ErrServerClosed { - a.log.Fatal("listen and serve", zap.Error(err)) + a.log.Fatal(logs.ListenAndServe, zap.Error(err)) } }(i) } @@ -523,7 +524,7 @@ LOOP: ctx, cancel := shutdownContext() defer cancel() - a.log.Info("stopping server", zap.Error(srv.Shutdown(ctx))) + a.log.Info(logs.StoppingServer, zap.Error(srv.Shutdown(ctx))) a.metrics.Shutdown() a.stopServices() @@ -537,23 +538,23 @@ func shutdownContext() (context.Context, context.CancelFunc) { } func (a *App) configReload(ctx context.Context) { - a.log.Info("SIGHUP config reload started") + a.log.Info(logs.SIGHUPConfigReloadStarted) if !a.cfg.IsSet(cmdConfig) && !a.cfg.IsSet(cmdConfigDir) { - a.log.Warn("failed to reload config because it's missed") + a.log.Warn(logs.FailedToReloadConfigBecauseItsMissed) return } if err := readInConfig(a.cfg); err != nil { - a.log.Warn("failed to reload config", zap.Error(err)) + a.log.Warn(logs.FailedToReloadConfig, zap.Error(err)) return } if err := a.bucketResolver.UpdateResolvers(a.getResolverConfig()); err != nil { - a.log.Warn("failed to reload resolvers", zap.Error(err)) + a.log.Warn(logs.FailedToReloadResolvers, zap.Error(err)) } if err := a.updateServers(); err != nil { - a.log.Warn("failed to reload server parameters", zap.Error(err)) + a.log.Warn(logs.FailedToReloadServerParameters, zap.Error(err)) } a.stopServices() @@ -565,12 +566,12 @@ func (a *App) configReload(ctx context.Context) { a.initTracing(ctx) a.setHealthStatus() - a.log.Info("SIGHUP config reload completed") + a.log.Info(logs.SIGHUPConfigReloadCompleted) } func (a *App) updateSettings() { if lvl, err := getLogLevel(a.cfg); err != nil { - a.log.Warn("log level won't be updated", zap.Error(err)) + a.log.Warn(logs.LogLevelWontBeUpdated, zap.Error(err)) } else { a.settings.logLevel.SetLevel(lvl) } @@ -605,16 +606,16 @@ func (a *App) initServers(ctx context.Context) { } srv, err := newServer(ctx, serverInfo) if err != nil { - a.log.Warn("failed to add server", append(fields, zap.Error(err))...) + a.log.Warn(logs.FailedToAddServer, append(fields, zap.Error(err))...) continue } a.servers = append(a.servers, srv) - a.log.Info("add server", fields...) + a.log.Info(logs.AddServer, fields...) } if len(a.servers) == 0 { - a.log.Fatal("no healthy servers") + a.log.Fatal(logs.NoHealthyServers) } } @@ -725,7 +726,7 @@ func (a *App) initHandler() { var err error a.api, err = handler.New(a.log, a.obj, a.nc, cfg) if err != nil { - a.log.Fatal("could not initialize API handler", zap.Error(err)) + a.log.Fatal(logs.CouldNotInitializeAPIHandler, zap.Error(err)) } } diff --git a/cmd/s3-gw/app_settings.go b/cmd/s3-gw/app_settings.go index ce20905c..7c937770 100644 --- a/cmd/s3-gw/app_settings.go +++ b/cmd/s3-gw/app_settings.go @@ -13,6 +13,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/handler" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/notifications" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/resolver" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/version" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/pool" @@ -241,7 +242,7 @@ func fetchDefaultPolicy(cfg *viper.Viper) (netmap.PlacementPolicy, error) { func fetchNATSTimeout(cfg *viper.Viper, l *zap.Logger) time.Duration { timeout := cfg.GetDuration(cfgNATSTimeout) if timeout <= 0 { - l.Error("invalid lifetime, using default value (in seconds)", + l.Error(logs.InvalidLifetimeUsingDefaultValue, zap.String("parameter", cfgNATSTimeout), zap.Duration("value in config", timeout), zap.Duration("default", notifications.DefaultTimeout)) @@ -255,7 +256,7 @@ func fetchCacheLifetime(v *viper.Viper, l *zap.Logger, cfgEntry string, defaultV if v.IsSet(cfgEntry) { lifetime := v.GetDuration(cfgEntry) if lifetime <= 0 { - l.Error("invalid lifetime, using default value (in seconds)", + l.Error(logs.InvalidLifetimeUsingDefaultValue, zap.String("parameter", cfgEntry), zap.Duration("value in config", lifetime), zap.Duration("default", defaultValue)) @@ -271,7 +272,7 @@ func fetchCacheSize(v *viper.Viper, l *zap.Logger, cfgEntry string, defaultValue if v.IsSet(cfgEntry) { size := v.GetInt(cfgEntry) if size <= 0 { - l.Error("invalid cache size, using default value", + l.Error(logs.InvalidCacheSizeUsingDefaultValue, zap.String("parameter", cfgEntry), zap.Int("value in config", size), zap.Int("default", defaultValue)) @@ -290,7 +291,7 @@ func fetchDefaultMaxAge(cfg *viper.Viper, l *zap.Logger) int { defaultMaxAge = cfg.GetInt(cfgDefaultMaxAge) if defaultMaxAge <= 0 && defaultMaxAge != -1 { - l.Fatal("invalid defaultMaxAge", + l.Fatal(logs.InvalidDefaultMaxAge, zap.String("parameter", cfgDefaultMaxAge), zap.String("value in config", strconv.Itoa(defaultMaxAge))) } @@ -360,7 +361,7 @@ func fetchCopiesNumbers(l *zap.Logger, v *viper.Viper) (map[string][]uint32, err } copiesNums[constraint] = vector32 - l.Info("constraint added", zap.String("location", constraint), zap.Strings("copies numbers", vector)) + l.Info(logs.ConstraintAdded, zap.String("location", constraint), zap.Strings("copies numbers", vector)) } return copiesNums, nil } @@ -374,7 +375,7 @@ func fetchPeers(l *zap.Logger, v *viper.Viper) []pool.NodeParam { priority := v.GetInt(key + "priority") if address == "" { - l.Warn("skip, empty address") + l.Warn(logs.SkipEmptyAddress) break } if weight <= 0 { // unspecified or wrong @@ -386,7 +387,7 @@ func fetchPeers(l *zap.Logger, v *viper.Viper) []pool.NodeParam { nodes = append(nodes, pool.NewNodeParam(priority, address, weight)) - l.Info("added storage peer", + l.Info(logs.AddedStoragePeer, zap.Int("priority", priority), zap.String("address", address), zap.Float64("weight", weight)) diff --git a/cmd/s3-gw/service.go b/cmd/s3-gw/service.go index c3f91a04..18aefaee 100644 --- a/cmd/s3-gw/service.go +++ b/cmd/s3-gw/service.go @@ -4,6 +4,7 @@ import ( "context" "net/http" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "go.uber.org/zap" ) @@ -18,21 +19,21 @@ type Service struct { // Start runs http service with the exposed endpoint on the configured port. func (ms *Service) Start() { if ms.enabled { - ms.log.Info("service is running", zap.String("endpoint", ms.Addr)) + ms.log.Info(logs.ServiceIsRunning, zap.String("endpoint", ms.Addr)) err := ms.ListenAndServe() if err != nil && err != http.ErrServerClosed { - ms.log.Warn("service couldn't start on configured port") + ms.log.Warn(logs.ServiceCouldntStartOnConfiguredPort) } } else { - ms.log.Info("service hasn't started since it's disabled") + ms.log.Info(logs.ServiceHasntStartedSinceItsDisabled) } } // ShutDown stops the service. func (ms *Service) ShutDown(ctx context.Context) { - ms.log.Info("shutting down service", zap.String("endpoint", ms.Addr)) + ms.log.Info(logs.ShuttingDownService, zap.String("endpoint", ms.Addr)) err := ms.Shutdown(ctx) if err != nil { - ms.log.Panic("can't shut down service") + ms.log.Panic(logs.CantShutDownService) } } diff --git a/internal/logs/logs.go b/internal/logs/logs.go new file mode 100644 index 00000000..c85fb2e1 --- /dev/null +++ b/internal/logs/logs.go @@ -0,0 +1,114 @@ +package logs + +const ( + RequestUnmatched = "request unmatched" // Error in ../../api/router.go + CheckContainer = "check container" // Info in ../../authmate/authmate.go + CreateContainer = "create container" // Info in ../../authmate/authmate.go + StoreBearerTokenIntoFrostFS = "store bearer token into FrostFS" // Info in ../../authmate/authmate.go + UpdateAccessCredObjectIntoFrostFS = "update access cred object into FrostFS" // Info in ../../authmate/authmate.go + MetricsAreDisabled = "metrics are disabled" // Warn in ../../metrics/app.go + FoundMoreThanOneUnversionedNode = "found more than one unversioned node" // Debug in ../../pkg/service/tree/tree.go + ServiceIsRunning = "service is running" // Info in ../../cmd/s3-gw/service.go + ServiceCouldntStartOnConfiguredPort = "service couldn't start on configured port" // Warn in ../../cmd/s3-gw/service.go + ServiceHasntStartedSinceItsDisabled = "service hasn't started since it's disabled" // Info in ../../cmd/s3-gw/service.go + ShuttingDownService = "shutting down service" // Info in ../../cmd/s3-gw/service.go + ContainerResolverWillBeDisabled = "container resolver will be disabled because of resolvers 'resolver_order' is empty" // Info in ../../cmd/s3-gw/app.go + FailedToInitializeTracing = "failed to initialize tracing" // Warn in ../../cmd/s3-gw/app.go + TracingConfigUpdated = "tracing config updated" // Info in ../../cmd/s3-gw/app.go + FailedToShutdownTracing = "failed to shutdown tracing" // Warn in ../../cmd/s3-gw/app.go + UsingCredentials = "using credentials" // Info in ../../cmd/s3-gw/app.go + PoliciesWontBeUpdated = "policies won't be updated" // Warn in ../../cmd/s3-gw/app.go + CopiesNumbersWontBeUpdated = "copies numbers won't be updated" // Warn in ../../cmd/s3-gw/app.go + DefaultCopiesNumbers = "default copies numbers" // Info in ../../cmd/s3-gw/app.go + CannotParseDefaultCopiesNumbers = "cannot parse default copies numbers" // Error in ../../cmd/s3-gw/app.go + DefaultCopiesNumbersWontBeUpdated = "default copies numbers won't be updated" // Warn in ../../cmd/s3-gw/app.go + ApplicationStarted = "application started" // Info in ../../cmd/s3-gw/app.go + ApplicationFinished = "application finished" // Info in ../../cmd/s3-gw/app.go + FetchDomainsPrepareToUseAPI = "fetch domains, prepare to use API" // Info in ../../cmd/s3-gw/app.go + StartingServer = "starting server" // Info in ../../cmd/s3-gw/app.go + StoppingServer = "stopping server" // Info in ../../cmd/s3-gw/app.go + SIGHUPConfigReloadStarted = "SIGHUP config reload started" // Info in ../../cmd/s3-gw/app.go + FailedToReloadConfigBecauseItsMissed = "failed to reload config because it's missed" // Warn in ../../cmd/s3-gw/app.go + FailedToReloadConfig = "failed to reload config" // Warn in ../../cmd/s3-gw/app.go + FailedToReloadResolvers = "failed to reload resolvers" // Warn in ../../cmd/s3-gw/app.go + FailedToReloadServerParameters = "failed to reload server parameters" // Warn in ../../cmd/s3-gw/app.go + SIGHUPConfigReloadCompleted = "SIGHUP config reload completed" // Info in ../../cmd/s3-gw/app.go + LogLevelWontBeUpdated = "log level won't be updated" // Warn in ../../cmd/s3-gw/app.go + FailedToAddServer = "failed to add server" // Warn in ../../cmd/s3-gw/app.go + AddServer = "add server" // Info in ../../cmd/s3-gw/app.go + ResolverNNSWontBeUsedSinceRPCEndpointIsntProvided = "resolver 'nns' won't be used since 'rpc_endpoint' isn't provided" // Warn in ../../cmd/s3-gw/app.go + InvalidLifetimeUsingDefaultValue = "invalid lifetime, using default value (in seconds)" // Error in ../../cmd/s3-gw/app_settings.go + InvalidCacheSizeUsingDefaultValue = "invalid cache size, using default value" // Error in ../../cmd/s3-gw/app_settings.go + ConstraintAdded = "constraint added" // Info in ../../cmd/s3-gw/app_settings.go + SkipEmptyAddress = "skip, empty address" // Warn in ../../cmd/s3-gw/app_settings.go + AddedStoragePeer = "added storage peer" // Info in ../../cmd/s3-gw/app_settings.go + PrepareConnectionPool = "prepare connection pool" // Debug in ../../cmd/s3-authmate/modules/utils.go + InvalidCacheEntryType = "invalid cache entry type" // Warn in ../../api/cache/* + InvalidCacheKeyType = "invalid cache key type" // Warn in ../../api/cache/objectslist.go + ObjectIsCopied = "object is copied" // Info in ../../api/handler/copy.go + CouldntSendNotification = "couldn't send notification: %w" // Error in ../../api/handler/* + FailedToSendTestEventBecauseNotificationsIsDisabled = "failed to send test event because notifications is disabled" // Warn in ../../api/handler/notifications.go + RequestFailed = "request failed" // Error in ../../api/handler/util.go + GetBucketInfo = "get bucket info" // Warn in ../../api/handler/cors.go + GetBucketCors = "get bucket cors" // Warn in ../../api/handler/cors.go + SomeACLNotFullyMapped = "some acl not fully mapped" // Warn in ../../api/handler/acl.go + CouldntDeleteObjects = "couldn't delete objects" // Error in ../../api/handler/delete.go + NotificatorIsDisabledS3WontProduceNotificationEvents = "notificator is disabled, s3 won't produce notification events" // Warn in ../../api/handler/api.go + CouldntGetBucketVersioning = "couldn't get bucket versioning" // Warn in ../../api/handler/put.go + BucketIsCreated = "bucket is created" // Info in ../../api/handler/put.go + CouldntDeleteNotificationConfigurationObject = "couldn't delete notification configuration object" // Error in ../../api/layer/notifications.go + CouldNotParseContainerObjectLockEnabledAttribute = "could not parse container object lock enabled attribute" // Error in ../../api/layer/container.go + CouldNotListUserContainers = "could not list user containers" // Error in ../../api/layer/container.go + CouldNotFetchContainerInfo = "could not fetch container info" // Error in ../../api/layer/container.go + MismatchedObjEncryptionInfo = "mismatched obj encryptionInfo" // Warn in ../../api/layer/multipart_upload.go + UploadPart = "upload part" // Debug in ../../api/layer/multipart_upload.go + CouldntDeleteOldPartObject = "couldn't delete old part object" // Error in ../../api/layer/multipart_upload.go + CouldNotPutCompletedObject = "could not put a completed object (multipart upload)" // Error in ../../api/layer/multipart_upload.go + CouldNotDeleteUploadPart = "could not delete upload part" // Warn in ../../api/layer/multipart_upload.go + CouldntDeletePart = "couldn't delete part" // Warn in ../../api/layer/multipart_upload.go + PartDetails = "part details" // Debug in ../../api/layer/multipart_upload.go + GetObject = "get object" // Debug in ../../api/layer/layer.go + ObjectAlreadyRemoved = "object already removed" // Debug in ../../api/layer/layer.go + ObjectNotFound = "object not found" // Debug in ../../api/layer/layer.go + ResolveBucket = "resolve bucket" // Info in ../../api/layer/layer.go + CouldntDeleteCorsObject = "couldn't delete cors object" // Error in ../../api/layer/cors.go + PutObject = "put object" // Debug in ../../api/layer/object.go + FailedToDiscardPutPayloadProbablyGoroutineLeaks = "failed to discard put payload, probably goroutine leaks" // Warn in ../../api/layer/object.go + FailedToSubmitTaskToPool = "failed to submit task to pool" // Warn in ../../api/layer/object.go + CouldNotFetchObjectMeta = "could not fetch object meta" // Warn in ../../api/layer/object.go + GetTreeNode = "get tree node" // Debug in ../../api/layer/tagging.go + CouldntPutBucketInfoIntoCache = "couldn't put bucket info into cache" // Warn in ../../api/layer/cache.go + CouldntAddObjectToCache = "couldn't add object to cache" // Warn in ../../api/layer/cache.go + CouldntCacheAccessControlOperation = "couldn't cache access control operation" // Warn in ../../api/layer/cache.go + CouldntPutObjAddressToNameCache = "couldn't put obj address to name cache" // Warn in ../../api/layer/cache.go + CouldntCacheListOfObjects = "couldn't cache list of objects" // Warn in ../../api/layer/cache.go + CouldntCacheTags = "couldn't cache tags" // Error in ../../api/layer/cache.go + CouldntCacheLockInfo = "couldn't cache lock info" // Error in ../../api/layer/cache.go + CouldntCacheBucketSettings = "couldn't cache bucket settings" // Warn in ../../api/layer/cache.go + CouldntCacheCors = "couldn't cache cors" // Warn in ../../api/layer/cache.go + CouldntCacheNotificationConfiguration = "couldn't cache notification configuration" // Warn in ../../api/layer/cache.go + RequestEnd = "request end" // Info in ../../api/middleware/response.go + CouldntReceiveAccessBoxForGateKeyRandomKeyWillBeUsed = "couldn't receive access box for gate key, random key will be used" // Debug in ../../api/middleware/auth.go + FailedToPassAuthentication = "failed to pass authentication" // Error in ../../api/middleware/auth.go + FailedToResolveCID = "failed to resolve CID" // Debug in ../../api/middleware/metrics.go + RequestStart = "request start" // Info in ../../api/middleware/reqinfo.go + CouldNotHandleMessage = "could not handle message" // Error in ../../api/notifications/controller.go + CouldNotACKMessage = "could not ACK message" // Error in ../../api/notifications/controller.go + CouldntMarshalAnEvent = "couldn't marshal an event" // Error in ../../api/notifications/controller.go + CouldntSendAnEventToTopic = "couldn't send an event to topic" // Error in ../../api/notifications/controller.go + InvalidDefaultMaxAge = "invalid defaultMaxAge" // Fatal in ../../cmd/s3-gw/app_settings.go + CantShutDownService = "can't shut down service" // Panic in ../../cmd/s3-gw/service.go + CouldntGenerateRandomKey = "couldn't generate random key" // Fatal in ../../cmd/s3-gw/app.go + FailedToEnableNotifications = "failed to enable notifications" // Fatal in ../../cmd/s3-gw/app.go + CouldntInitializeLayer = "couldn't initialize layer" // Fatal in ../../cmd/s3-gw/app.go + FailedToCreateNewPolicyMapping = "failed to create new policy mapping" // Fatal in ../../cmd/s3-gw/app.go + FailedToCreateResolver = "failed to create resolver" // Fatal in ../../cmd/s3-gw/app.go + CouldNotLoadFrostFSPrivateKey = "could not load FrostFS private key" // Fatal in ../../cmd/s3-gw/app.go + FailedToCreateConnectionPool = "failed to create connection pool" // Fatal in ../../cmd/s3-gw/app.go + FailedToDialConnectionPool = "failed to dial connection pool" // Fatal in ../../cmd/s3-gw/app.go + FailedToCreateTreePool = "failed to create tree pool" // Fatal in ../../cmd/s3-gw/app.go + FailedToDialTreePool = "failed to dial tree pool" // Fatal in ../../cmd/s3-gw/app.go + ListenAndServe = "listen and serve" // Fatal in ../../cmd/s3-gw/app.go + NoHealthyServers = "no healthy servers" // Fatal in ../../cmd/s3-gw/app.go + CouldNotInitializeAPIHandler = "could not initialize API handler" // Fatal in ../../cmd/s3-gw/app.go +) diff --git a/metrics/app.go b/metrics/app.go index d04c0839..00b591da 100644 --- a/metrics/app.go +++ b/metrics/app.go @@ -4,6 +4,7 @@ import ( "net/http" "sync" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" dto "github.com/prometheus/client_model/go" "go.uber.org/zap" ) @@ -17,7 +18,7 @@ type AppMetrics struct { func NewAppMetrics(logger *zap.Logger, poolStatistics StatisticScraper, enabled bool) *AppMetrics { if !enabled { - logger.Warn("metrics are disabled") + logger.Warn(logs.MetricsAreDisabled) } return &AppMetrics{ logger: logger, @@ -28,7 +29,7 @@ func NewAppMetrics(logger *zap.Logger, poolStatistics StatisticScraper, enabled func (m *AppMetrics) SetEnabled(enabled bool) { if !enabled { - m.logger.Warn("metrics are disabled") + m.logger.Warn(logs.MetricsAreDisabled) } m.mu.Lock() diff --git a/pkg/service/tree/tree.go b/pkg/service/tree/tree.go index 722e79e9..83c0f3b4 100644 --- a/pkg/service/tree/tree.go +++ b/pkg/service/tree/tree.go @@ -12,6 +12,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user" "go.uber.org/zap" @@ -829,7 +830,7 @@ func (c *Tree) getUnversioned(ctx context.Context, bktInfo *data.BucketInfo, tre } if len(nodes) > 1 { - c.reqLogger(ctx).Debug("found more than one unversioned node", + c.reqLogger(ctx).Debug(logs.FoundMoreThanOneUnversionedNode, zap.String("treeID", treeID), zap.String("filepath", filepath)) }