From 457c13208e48eabd65bc0e6ff53390b93dcaa2e8 Mon Sep 17 00:00:00 2001 From: Laurentiu Niculae Date: Tue, 21 Nov 2023 20:01:46 +0200 Subject: [PATCH] refactor(test): add lint rule for messages starting with the component Signed-off-by: Laurentiu Niculae --- .github/workflows/golangci-lint.yaml | 9 +- Makefile | 4 + errors/errors.go | 233 +++++++++--------- pkg/api/authn.go | 6 +- pkg/api/authn_test.go | 2 +- pkg/api/routes.go | 8 +- pkg/cli/client/config_cmd_test.go | 2 +- pkg/cli/client/cve_cmd_test.go | 12 +- pkg/cli/client/image_cmd_internal_test.go | 2 +- pkg/cli/client/image_cmd_test.go | 8 +- pkg/cli/client/repo_test.go | 2 +- pkg/cli/server/root.go | 20 +- pkg/extensions/extension_image_trust.go | 8 +- pkg/extensions/extension_mgmt.go | 2 +- pkg/extensions/imagetrust/image_trust.go | 2 +- pkg/extensions/imagetrust/image_trust_test.go | 2 +- pkg/extensions/lint/lint.go | 8 +- pkg/extensions/monitoring/minimal_client.go | 4 +- pkg/extensions/monitoring/monitoring_test.go | 4 +- pkg/extensions/scrub/scrub.go | 8 +- pkg/extensions/scrub/scrub_test.go | 10 +- pkg/extensions/search/convert/metadb.go | 4 +- pkg/extensions/search/cve/cve_test.go | 6 +- pkg/extensions/search/cve/trivy/scanner.go | 2 +- pkg/extensions/search/resolver.go | 28 ++- pkg/extensions/search/schema.resolvers.go | 4 +- pkg/extensions/search/search_test.go | 8 +- pkg/extensions/sync/httpclient/client.go | 6 +- pkg/extensions/sync/local.go | 5 +- pkg/extensions/sync/on_demand.go | 4 +- pkg/extensions/sync/references/cosign.go | 8 +- pkg/extensions/sync/references/oci.go | 8 +- pkg/extensions/sync/references/oras.go | 10 +- .../sync/references/referrers_tag.go | 8 +- pkg/extensions/sync/sync.go | 2 +- pkg/extensions/sync/sync_test.go | 2 +- pkg/meta/boltdb/boltdb.go | 26 +- pkg/meta/dynamodb/dynamodb.go | 20 +- pkg/meta/hooks.go | 12 +- pkg/meta/parse.go | 12 +- pkg/storage/common/common.go | 23 +- pkg/storage/gc/gc.go | 8 +- pkg/storage/imagestore/imagestore.go | 85 ++++--- pkg/storage/local/local_test.go | 4 +- pkg/storage/scrub_test.go | 22 +- pkg/storage/storage.go | 4 +- pkg/test/common/fs.go | 2 +- scripts/check_logs.sh | 78 ++++++ 48 files changed, 429 insertions(+), 328 deletions(-) create mode 100755 scripts/check_logs.sh diff --git a/.github/workflows/golangci-lint.yaml b/.github/workflows/golangci-lint.yaml index d5045911d0..35620ab5f0 100644 --- a/.github/workflows/golangci-lint.yaml +++ b/.github/workflows/golangci-lint.yaml @@ -47,11 +47,4 @@ jobs: make check - name: Run log linter run: | - set +e - - # log messages should never start upper-cased - find . -name '*.go' | grep -v '_test.go' | xargs grep -n "Msg(\"[A-Z]" | grep -v -E "Msg\(\"HTTP|OpenID|OAuth|TLS" - if [ $? -eq 0 ]; then - exit 1 - fi - exit 0 + make check-logs diff --git a/Makefile b/Makefile index 07ce9c1c6b..3fd8953d5f 100644 --- a/Makefile +++ b/Makefile @@ -310,6 +310,10 @@ $(GOLINTER): curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(TOOLSDIR)/bin $(GOLINTER_VERSION) $(GOLINTER) version +.PHONY: check-logs +check-logs: + @./scripts/check_logs.sh + .PHONY: check check: $(if $(findstring ui,$(BUILD_LABELS)), ui) check: ./golangcilint.yaml $(GOLINTER) diff --git a/errors/errors.go b/errors/errors.go index 3cb5912bf0..a5698fd1b1 100644 --- a/errors/errors.go +++ b/errors/errors.go @@ -46,129 +46,126 @@ func GetDetails(err error) map[string]string { } var ( - ErrBadConfig = errors.New("config: invalid config") - ErrCliBadConfig = errors.New("cli: bad config") - ErrRepoNotFound = errors.New("repository: not found") - ErrRepoBadVersion = errors.New("repository: unsupported layout version") - ErrRepoBadLayout = errors.New("repository: invalid layout") - ErrManifestNotFound = errors.New("manifest: not found") - ErrBadManifest = errors.New("manifest: invalid contents") - ErrUploadNotFound = errors.New("uploads: not found") - ErrBadUploadRange = errors.New("uploads: bad range") - ErrBlobNotFound = errors.New("blob: not found") - ErrBadBlob = errors.New("blob: bad blob") - ErrBadBlobDigest = errors.New("blob: bad blob digest") - ErrBlobReferenced = errors.New("blob: referenced by manifest") - ErrManifestReferenced = errors.New("manifest: referenced by index image") - ErrUnknownCode = errors.New("error: unknown error code") - ErrBadCACert = errors.New("tls: invalid ca cert") - ErrBadUser = errors.New("auth: non-existent user") - ErrEntriesExceeded = errors.New("ldap: too many entries returned") - ErrLDAPEmptyPassphrase = errors.New("ldap: empty passphrase") - ErrLDAPBadConn = errors.New("ldap: bad connection") - ErrLDAPConfig = errors.New("config: invalid LDAP configuration") - ErrCacheRootBucket = errors.New("cache: unable to create/update root bucket") - ErrCacheNoBucket = errors.New("cache: unable to find bucket") - ErrCacheMiss = errors.New("cache: miss") - ErrRequireCred = errors.New("ldap: bind credentials required") - ErrInvalidCred = errors.New("ldap: invalid credentials") - ErrEmptyJSON = errors.New("cli: config json is empty") - ErrInvalidArgs = errors.New("cli: Invalid Arguments") - ErrInvalidFlagsCombination = errors.New("cli: Invalid combination of flags") - ErrInvalidURL = errors.New("cli: invalid URL format") - ErrExtensionNotEnabled = errors.New("cli: functionality is not built/configured in the current server") - ErrUnauthorizedAccess = errors.New("auth: unauthorized access. check credentials") - ErrURLNotFound = errors.New("url not found") - ErrCannotResetConfigKey = errors.New("cli: cannot reset given config key") - ErrConfigNotFound = errors.New("cli: config with the given name does not exist") - ErrNoURLProvided = errors.New("cli: no URL provided by flag or via config") - ErrIllegalConfigKey = errors.New("cli: given config key is not allowed") - ErrScanNotSupported = errors.New("search: scanning of image media type not supported") - ErrCLITimeout = errors.New("cli: Query timed out while waiting for results") - ErrDuplicateConfigName = errors.New("cli: cli config name already added") - ErrInvalidRoute = errors.New("routes: invalid route prefix") - ErrImgStoreNotFound = errors.New("routes: image store not found corresponding to given route") - ErrEmptyValue = errors.New("cache: empty value") - ErrEmptyRepoList = errors.New("search: no repository found") - ErrCVESearchDisabled = errors.New("search: cve search is disabled") - ErrCVEDBNotFound = errors.New("cve: cve-db is not present") - ErrInvalidRepositoryName = errors.New("repository: not a valid repository name") - ErrSyncMissingCatalog = errors.New("sync: couldn't fetch upstream registry's catalog") - ErrMethodNotSupported = errors.New("storage: method not supported") - ErrInvalidMetric = errors.New("metrics: invalid metric func") - ErrInjected = errors.New("test: injected failure") - ErrSyncInvalidUpstreamURL = errors.New("sync: upstream url not found in sync config") - ErrRegistryNoContent = errors.New("sync: could not find a Content that matches localRepo") - ErrSyncReferrerNotFound = errors.New("sync: couldn't find upstream referrer") - ErrImageLintAnnotations = errors.New("routes: lint checks failed") - ErrParsingAuthHeader = errors.New("auth: failed parsing authorization header") - ErrBadType = errors.New("core: invalid type") - ErrParsingHTTPHeader = errors.New("routes: invalid HTTP header") - ErrBadRange = errors.New("storage: bad range") - ErrBadLayerCount = errors.New("manifest: layers count doesn't correspond to config history") - ErrManifestConflict = errors.New("manifest: multiple manifests found") - ErrManifestMetaNotFound = errors.New("metadb: image metadata not found for given manifest reference") - ErrImageMetaNotFound = errors.New("metadb: image meta not found") - ErrUnexpectedMediaType = errors.New("metadb: got unexpected media type") - ErrRepoMetaNotFound = errors.New("metadb: repo metadata not found for given repo name") - ErrTagMetaNotFound = errors.New("metadb: tag metadata not found for given repo and tag names") - ErrTypeAssertionFailed = errors.New("storage: failed DatabaseDriver type assertion") - ErrInvalidRequestParams = errors.New("resolver: parameter sent has invalid value") + ErrBadConfig = errors.New("invalid server config") + ErrCliBadConfig = errors.New("invalid cli config") + ErrRepoNotFound = errors.New("repository not found") + ErrRepoBadVersion = errors.New("unsupported repository layout version") + ErrRepoBadLayout = errors.New("invalid repository layout") + ErrManifestNotFound = errors.New("manifest not found") + ErrBadManifest = errors.New("invalid manifest contents") + ErrUploadNotFound = errors.New("upload destination not found") + ErrBadUploadRange = errors.New("bad upload content-length") + ErrBlobNotFound = errors.New("blob not found") + ErrBadBlob = errors.New("bad blob") + ErrBadBlobDigest = errors.New("bad blob digest") + ErrBlobReferenced = errors.New("blob referenced by manifest") + ErrManifestReferenced = errors.New("manifest referenced by index image") + ErrUnknownCode = errors.New("unknown error code") + ErrBadCACert = errors.New("invalid tls ca cert") + ErrBadUser = errors.New("non-existent user") + ErrEntriesExceeded = errors.New("too many entries returned") + ErrLDAPEmptyPassphrase = errors.New("empty ldap passphrase") + ErrLDAPBadConn = errors.New("bad ldap connection") + ErrLDAPConfig = errors.New("invalid LDAP configuration") + ErrCacheRootBucket = errors.New("unable to create/update root cache bucket") + ErrCacheNoBucket = errors.New("unable to find cache bucket") + ErrCacheMiss = errors.New("cache miss") + ErrRequireCred = errors.New("bind ldap credentials required") + ErrInvalidCred = errors.New("invalid ldap credentials") + ErrEmptyJSON = errors.New("cli config json is empty") + ErrInvalidArgs = errors.New("invalid cli arguments") + ErrInvalidFlagsCombination = errors.New("invalid cli combination of flags") + ErrInvalidURL = errors.New("invalid URL format") + ErrExtensionNotEnabled = errors.New("functionality is not built/configured in the current server") + ErrUnauthorizedAccess = errors.New("unauthorized access. check credentials") + ErrCannotResetConfigKey = errors.New("cannot reset given config key") + ErrConfigNotFound = errors.New("config with the given name does not exist") + ErrNoURLProvided = errors.New("no URL provided") + ErrIllegalConfigKey = errors.New("given config key is not allowed") + ErrScanNotSupported = errors.New("scanning is not supported for given image media type") + ErrCLITimeout = errors.New("query timed out while waiting for results") + ErrDuplicateConfigName = errors.New("cli config name already added") + ErrInvalidRoute = errors.New("invalid route prefix") + ErrImgStoreNotFound = errors.New("image store not found corresponding to given route") + ErrEmptyValue = errors.New("empty cache value") + ErrEmptyRepoList = errors.New("no repository found") + ErrCVESearchDisabled = errors.New("cve search is disabled") + ErrCVEDBNotFound = errors.New("cve-db is not present") + ErrInvalidRepositoryName = errors.New("not a valid repository name") + ErrSyncMissingCatalog = errors.New("couldn't fetch upstream registry's catalog") + ErrInvalidMetric = errors.New("invalid metric func") + ErrInjected = errors.New("injected failure") + ErrSyncInvalidUpstreamURL = errors.New("upstream url not found in sync config") + ErrRegistryNoContent = errors.New("could not find a Content that matches localRepo") + ErrSyncReferrerNotFound = errors.New("couldn't find upstream referrer") + ErrImageLintAnnotations = errors.New("lint checks failed") + ErrParsingAuthHeader = errors.New("failed parsing authorization header") + ErrBadType = errors.New("invalid type") + ErrParsingHTTPHeader = errors.New("invalid HTTP header") + ErrBadRange = errors.New("bad range for streaming blob") + ErrBadLayerCount = errors.New("manifest layers count doesn't correspond to config history") + ErrManifestConflict = errors.New("multiple manifests found") + ErrImageMetaNotFound = errors.New("image meta not found") + ErrUnexpectedMediaType = errors.New("unexpected media type") + ErrRepoMetaNotFound = errors.New("repo metadata not found for given repo name") + ErrTagMetaNotFound = errors.New("tag metadata not found for given repo and tag names") + ErrTypeAssertionFailed = errors.New("failed DatabaseDriver type assertion") + ErrInvalidRequestParams = errors.New("request parameter has invalid value") ErrBadCtxFormat = errors.New("type assertion failed") - ErrEmptyRepoName = errors.New("metadb: repo name can't be empty string") - ErrEmptyTag = errors.New("metadb: tag can't be empty string") - ErrEmptyDigest = errors.New("metadb: digest can't be empty string") - ErrInvalidRepoRefFormat = errors.New("invalid image reference format [repo:tag] or [repo@digest]") - ErrLimitIsNegative = errors.New("pagination: limit has negative value") - ErrOffsetIsNegative = errors.New("pagination: offset has negative value") - ErrSortCriteriaNotSupported = errors.New("pagination: the sort criteria is not supported") - ErrMediaTypeNotSupported = errors.New("metadb: media type is not supported") + ErrEmptyRepoName = errors.New("repo name can't be empty string") + ErrEmptyTag = errors.New("tag can't be empty string") + ErrEmptyDigest = errors.New("digest can't be empty string") + ErrInvalidRepoRefFormat = errors.New("invalid image reference format, use [repo:tag] or [repo@digest]") + ErrLimitIsNegative = errors.New("pagination limit has negative value") + ErrOffsetIsNegative = errors.New("pagination offset has negative value") + ErrSortCriteriaNotSupported = errors.New("the pagination sort criteria is not supported") + ErrMediaTypeNotSupported = errors.New("media type is not supported") ErrTimeout = errors.New("operation timeout") ErrNotImplemented = errors.New("not implemented") - ErrDedupeRebuild = errors.New("dedupe: couldn't rebuild dedupe index") - ErrMissingAuthHeader = errors.New("auth: required authorization header is missing") - ErrUserAPIKeyNotFound = errors.New("userDB: user info for given API key hash not found") - ErrUserSessionNotFound = errors.New("userDB: user session for given ID not found") - ErrBucketDoesNotExist = errors.New("DB: bucket does not exist") - ErrOpenIDProviderDoesNotExist = errors.New("openID: provider does not exist in given config") - ErrHashKeyNotCreated = errors.New("cookiestore: generated random hash key is nil, not continuing") + ErrDedupeRebuild = errors.New("couldn't rebuild dedupe index") + ErrMissingAuthHeader = errors.New("required authorization header is missing") + ErrUserAPIKeyNotFound = errors.New("user info for given API key hash not found") + ErrUserSessionNotFound = errors.New("user session for given ID not found") + ErrBucketDoesNotExist = errors.New("bucket does not exist") + ErrOpenIDProviderDoesNotExist = errors.New("openid provider does not exist in given config") + ErrHashKeyNotCreated = errors.New("cookiestore generated random hash key is nil, aborting") ErrFailedTypeAssertion = errors.New("type assertion failed") - ErrInvalidOldUserStarredRepos = errors.New("metadb: invalid old entry for user starred repos") - ErrUnmarshalledRepoListIsNil = errors.New("metadb: list of repos is still nil") - ErrCouldNotMarshalStarredRepos = errors.New("metadb: could not repack entry for user starred repos") - ErrInvalidOldUserBookmarkedRepos = errors.New("metadb: invalid old entry for user bookmarked repos") - ErrCouldNotMarshalBookmarkedRepos = errors.New("metadb: could not repack entry for user bookmarked repos") - ErrUserDataNotFound = errors.New("metadb: user data not found for given user identifier") - ErrUserDataNotAllowed = errors.New("metadb: user data operations are not allowed") - ErrCouldNotPersistData = errors.New("metadb: could not persist to db") - ErrSignConfigDirNotSet = errors.New("signatures: signature config dir not set") - ErrBadManifestDigest = errors.New("signatures: bad manifest digest") - ErrInvalidSignatureType = errors.New("signatures: invalid signature type") - ErrSyncPingRegistry = errors.New("sync: unable to ping any registry URLs") - ErrSyncImageNotSigned = errors.New("sync: image is not signed") - ErrSyncImageFilteredOut = errors.New("sync: image is filtered out by sync config") - ErrCallerInfo = errors.New("runtime: failed to get info regarding the current runtime") - ErrInvalidTruststoreType = errors.New("signatures: invalid truststore type") - ErrInvalidTruststoreName = errors.New("signatures: invalid truststore name") - ErrInvalidCertificateContent = errors.New("signatures: invalid certificate content") - ErrInvalidPublicKeyContent = errors.New("signatures: invalid public key content") - ErrInvalidStateCookie = errors.New("auth: state cookie not present or differs from original state") - ErrSyncNoURLsLeft = errors.New("sync: no valid registry urls left after filtering local ones") - ErrInvalidCLIParameter = errors.New("cli: invalid parameter") - ErrGQLEndpointNotFound = errors.New("cli: the server doesn't have a gql endpoint") - ErrGQLQueryNotSupported = errors.New("cli: query is not supported or has different arguments") - ErrBadHTTPStatusCode = errors.New("cli: the response doesn't contain the expected status code") - ErrFormatNotSupported = errors.New("cli: the given output format is not supported") - ErrAPINotSupported = errors.New("registry at the given address doesn't implement the correct API") - ErrInvalidSearchQuery = errors.New("invalid search query") - ErrFileAlreadyCancelled = errors.New("storageDriver: file already cancelled") - ErrFileAlreadyClosed = errors.New("storageDriver: file already closed") - ErrFileAlreadyCommitted = errors.New("storageDriver: file already committed") - ErrInvalidOutputFormat = errors.New("cli: invalid output format") + ErrInvalidOldUserStarredRepos = errors.New("invalid old entry for user starred repos") + ErrUnmarshalledRepoListIsNil = errors.New("list of repos is still nil") + ErrCouldNotMarshalStarredRepos = errors.New("could not repack entry for user starred repos") + ErrInvalidOldUserBookmarkedRepos = errors.New("invalid old entry for user bookmarked repos") + ErrCouldNotMarshalBookmarkedRepos = errors.New("could not repack entry for user bookmarked repos") + ErrUserDataNotFound = errors.New("user data not found for given user identifier") + ErrUserDataNotAllowed = errors.New("user data operations are not allowed") + ErrCouldNotPersistData = errors.New("could not persist to db") + ErrSignConfigDirNotSet = errors.New("signature config dir not set") + ErrBadSignatureManifestDigest = errors.New("bad signature manifest digest") + ErrInvalidSignatureType = errors.New("invalid signature type") + ErrSyncPingRegistry = errors.New("unable to ping any registry URLs") + ErrSyncImageNotSigned = errors.New("synced image is not signed") + ErrSyncImageFilteredOut = errors.New("image is filtered out by sync config") + ErrInvalidTruststoreType = errors.New("invalid signature truststore type") + ErrInvalidTruststoreName = errors.New("invalid signature truststore name") + ErrInvalidCertificateContent = errors.New("invalid signature certificate content") + ErrInvalidPublicKeyContent = errors.New("invalid signature public key content") + ErrInvalidStateCookie = errors.New("auth state cookie not present or differs from original state") + ErrSyncNoURLsLeft = errors.New("no valid registry urls left after filtering local ones") + ErrInvalidCLIParameter = errors.New("invalid cli parameter") + ErrGQLEndpointNotFound = errors.New("the server doesn't have a gql endpoint") + ErrGQLQueryNotSupported = errors.New("query is not supported or has different arguments") + ErrBadHTTPStatusCode = errors.New("the response doesn't contain the expected status code") + ErrFileAlreadyCancelled = errors.New("storageDriver file already cancelled") + ErrFileAlreadyClosed = errors.New("storageDriver file already closed") + ErrFileAlreadyCommitted = errors.New("storageDriver file already committed") + ErrInvalidOutputFormat = errors.New("invalid cli output format") ErrServerIsRunning = errors.New("server is running") ErrDatabaseFileAlreadyInUse = errors.New("boltdb file is already in use") ErrFlagValueUnsupported = errors.New("supported values ") - ErrUnknownSubcommand = errors.New("cli: unknown subcommand") - ErrMultipleReposSameName = errors.New("test: can't have multiple repos with the same name") - ErrRetentionPolicyNotFound = errors.New("retention: repo or tag policy not found") + ErrUnknownSubcommand = errors.New("unknown cli subcommand") + ErrMultipleReposSameName = errors.New("can't have multiple repos with the same name") + ErrRetentionPolicyNotFound = errors.New("retention repo or tag policy not found") + ErrFormatNotSupported = errors.New("the given output format is not supported") + ErrAPINotSupported = errors.New("registry at the given address doesn't implement the correct API") + ErrURLNotFound = errors.New("url not found") + ErrInvalidSearchQuery = errors.New("invalid search query") ) diff --git a/pkg/api/authn.go b/pkg/api/authn.go index f3a6e93a45..a62db2fb13 100644 --- a/pkg/api/authn.go +++ b/pkg/api/authn.go @@ -790,13 +790,15 @@ func OAuth2Callback(ctlr *Controller, w http.ResponseWriter, r *http.Request, st stateOrigin, ok := stateCookie.Values["state"].(string) if !ok { - ctlr.Log.Error().Err(zerr.ErrInvalidStateCookie).Msg("openID: unable to get 'state' cookie from request") + ctlr.Log.Error().Err(zerr.ErrInvalidStateCookie).Str("component", "openID"). + Msg(": unable to get 'state' cookie from request") return "", zerr.ErrInvalidStateCookie } if stateOrigin != state { - ctlr.Log.Error().Err(zerr.ErrInvalidStateCookie).Msg("openID: 'state' cookie differs from the actual one") + ctlr.Log.Error().Err(zerr.ErrInvalidStateCookie).Str("component", "openID"). + Msg(": 'state' cookie differs from the actual one") return "", zerr.ErrInvalidStateCookie } diff --git a/pkg/api/authn_test.go b/pkg/api/authn_test.go index c0ec5151cb..e7e89a87e8 100644 --- a/pkg/api/authn_test.go +++ b/pkg/api/authn_test.go @@ -129,7 +129,7 @@ func TestAPIKeys(t *testing.T) { conf.Extensions.UI.Enable = &defaultVal ctlr := api.NewController(conf) - ctlr.Log.Info().Int64("seedUser", seedUser).Int64("seedPass", seedPass).Msg("random seed for username & password") + ctlr.Log.Info().Int64("seedUser", seedUser).Int64("seedPass", seedPass).Msg("Random seed for username & password") dir := t.TempDir() ctlr.Config.Storage.RootDirectory = dir diff --git a/pkg/api/routes.go b/pkg/api/routes.go index 13edb61651..614d6ba704 100644 --- a/pkg/api/routes.go +++ b/pkg/api/routes.go @@ -706,7 +706,7 @@ func (rh *RouteHandler) UpdateManifest(response http.ResponseWriter, request *ht zcommon.WriteJSON(response, http.StatusBadRequest, apiErr.NewErrorList(e)) } else { // could be syscall.EMFILE (Err:0x18 too many opened files), etc - rh.c.Log.Error().Err(err).Msg("unexpected error: performing cleanup") + rh.c.Log.Error().Err(err).Msg("unexpected error, performing cleanup") if err = imgStore.DeleteImageManifest(name, reference, false); err != nil { // deletion of image manifest is important, but not critical for image repo consistency @@ -1428,7 +1428,7 @@ func (rh *RouteHandler) PatchBlobUpload(response http.ResponseWriter, request *h zcommon.WriteJSON(response, http.StatusNotFound, apiErr.NewErrorList(e)) } else { // could be io.ErrUnexpectedEOF, syscall.EMFILE (Err:0x18 too many opened files), etc - rh.c.Log.Error().Err(err).Msg("unexpected error: removing .uploads/ files") + rh.c.Log.Error().Err(err).Msg("unexpected error, removing .uploads/ files") if err = imgStore.DeleteBlobUpload(name, sessionID); err != nil { rh.c.Log.Error().Err(err).Str("blobUpload", sessionID).Str("repository", name). @@ -1550,7 +1550,7 @@ func (rh *RouteHandler) UpdateBlobUpload(response http.ResponseWriter, request * zcommon.WriteJSON(response, http.StatusNotFound, apiErr.NewErrorList(e)) } else { // could be io.ErrUnexpectedEOF, syscall.EMFILE (Err:0x18 too many opened files), etc - rh.c.Log.Error().Err(err).Msg("unexpected error: removing .uploads/ files") + rh.c.Log.Error().Err(err).Msg("unexpected error, removing .uploads/ files") if err = imgStore.DeleteBlobUpload(name, sessionID); err != nil { rh.c.Log.Error().Err(err).Str("blobUpload", sessionID).Str("repository", name). @@ -1585,7 +1585,7 @@ finish: zcommon.WriteJSON(response, http.StatusNotFound, apiErr.NewErrorList(e)) } else { // could be io.ErrUnexpectedEOF, syscall.EMFILE (Err:0x18 too many opened files), etc - rh.c.Log.Error().Err(err).Msg("unexpected error: removing .uploads/ files") + rh.c.Log.Error().Err(err).Msg("unexpected error, removing .uploads/ files") if err = imgStore.DeleteBlobUpload(name, sessionID); err != nil { rh.c.Log.Error().Err(err).Str("blobUpload", sessionID).Str("repository", name). diff --git a/pkg/cli/client/config_cmd_test.go b/pkg/cli/client/config_cmd_test.go index 28e825925a..09af351ca3 100644 --- a/pkg/cli/client/config_cmd_test.go +++ b/pkg/cli/client/config_cmd_test.go @@ -221,7 +221,7 @@ func TestConfigCmdMain(t *testing.T) { cmd.SetArgs(args) err := cmd.Execute() So(err, ShouldNotBeNil) - So(buff.String(), ShouldContainSubstring, "invalid config") + So(buff.String(), ShouldContainSubstring, "invalid server config") }) Convey("Test remove config bad permissions", t, func() { diff --git a/pkg/cli/client/cve_cmd_test.go b/pkg/cli/client/cve_cmd_test.go index 364e5e4201..91a922bd5f 100644 --- a/pkg/cli/client/cve_cmd_test.go +++ b/pkg/cli/client/cve_cmd_test.go @@ -369,7 +369,7 @@ func TestServerCVEResponse(t *testing.T) { So(err, ShouldNotBeNil) }) - Convey("Test CVE by image name - GQL - invalid output format", t, func() { + Convey("Test CVE by image name - GQL - invalid cli output format", t, func() { args := []string{"list", "zot-cve-test:0.0.1", "-f", "random", "--config", "cvetest"} configPath := makeConfigFile(fmt.Sprintf(`{"configs":[{"_name":"cvetest","url":"%s","showspinner":false}]}`, url)) defer os.Remove(configPath) @@ -380,7 +380,7 @@ func TestServerCVEResponse(t *testing.T) { cveCmd.SetArgs(args) err = cveCmd.Execute() So(err, ShouldNotBeNil) - So(buff.String(), ShouldContainSubstring, "invalid output format") + So(buff.String(), ShouldContainSubstring, "invalid cli output format") }) Convey("Test images by CVE ID - GQL - positive", t, func() { @@ -417,7 +417,7 @@ func TestServerCVEResponse(t *testing.T) { So(str, ShouldNotContainSubstring, "REPOSITORY TAG OS/ARCH DIGEST SIGNED SIZE") }) - Convey("Test images by CVE ID - GQL - invalid output format", t, func() { + Convey("Test images by CVE ID - GQL - invalid cli output format", t, func() { args := []string{"affected", "CVE-2019-9923", "-f", "random", "--config", "cvetest"} configPath := makeConfigFile(fmt.Sprintf(`{"configs":[{"_name":"cvetest","url":"%s","showspinner":false}]}`, url)) defer os.Remove(configPath) @@ -428,7 +428,7 @@ func TestServerCVEResponse(t *testing.T) { cveCmd.SetArgs(args) err = cveCmd.Execute() So(err, ShouldNotBeNil) - So(buff.String(), ShouldContainSubstring, "invalid output format") + So(buff.String(), ShouldContainSubstring, "invalid cli output format") }) Convey("Test fixed tags by image name and CVE ID - GQL - positive", t, func() { @@ -532,7 +532,7 @@ func TestServerCVEResponse(t *testing.T) { So(strings.TrimSpace(str), ShouldNotContainSubstring, "REPOSITORY TAG OS/ARCH SIGNED SIZE") }) - Convey("Test CVE by name and CVE ID - GQL - invalid output format", t, func() { + Convey("Test CVE by name and CVE ID - GQL - invalid cli output format", t, func() { args := []string{"affected", "CVE-2019-9923", "--repo", "zot-cve-test", "-f", "random", "--config", "cvetest"} configPath := makeConfigFile(fmt.Sprintf(`{"configs":[{"_name":"cvetest","url":"%s","showspinner":false}]}`, url)) defer os.Remove(configPath) @@ -543,7 +543,7 @@ func TestServerCVEResponse(t *testing.T) { cveCmd.SetArgs(args) err = cveCmd.Execute() So(err, ShouldNotBeNil) - So(buff.String(), ShouldContainSubstring, "invalid output format") + So(buff.String(), ShouldContainSubstring, "invalid cli output format") }) } diff --git a/pkg/cli/client/image_cmd_internal_test.go b/pkg/cli/client/image_cmd_internal_test.go index 22430b64fa..2387ec61d7 100644 --- a/pkg/cli/client/image_cmd_internal_test.go +++ b/pkg/cli/client/image_cmd_internal_test.go @@ -470,7 +470,7 @@ func TestOutputFormat(t *testing.T) { cmd.SetArgs(args) err := cmd.Execute() So(err, ShouldNotBeNil) - So(buff.String(), ShouldContainSubstring, "invalid output format") + So(buff.String(), ShouldContainSubstring, "invalid cli output format") }) } diff --git a/pkg/cli/client/image_cmd_test.go b/pkg/cli/client/image_cmd_test.go index 307d6c548f..df56f1afdd 100644 --- a/pkg/cli/client/image_cmd_test.go +++ b/pkg/cli/client/image_cmd_test.go @@ -500,7 +500,7 @@ func TestOutputFormatGQL(t *testing.T) { cmd.SetArgs(args) err := cmd.Execute() So(err, ShouldNotBeNil) - So(buff.String(), ShouldContainSubstring, "invalid output format") + So(buff.String(), ShouldContainSubstring, "invalid cli output format") }) }) } @@ -554,7 +554,7 @@ func TestServerResponseGQL(t *testing.T) { cmd.SetArgs(args) err := cmd.Execute() So(err, ShouldNotBeNil) - So(buff.String(), ShouldContainSubstring, "invalid output format") + So(buff.String(), ShouldContainSubstring, "invalid cli output format") }) }) @@ -632,7 +632,7 @@ func TestServerResponseGQL(t *testing.T) { cmd.SetArgs(args) err := cmd.Execute() So(err, ShouldNotBeNil) - So(buff.String(), ShouldContainSubstring, "invalid output format") + So(buff.String(), ShouldContainSubstring, "invalid cli output format") }) }) @@ -683,7 +683,7 @@ func TestServerResponseGQL(t *testing.T) { cmd.SetArgs(args) err := cmd.Execute() So(err, ShouldNotBeNil) - So(buff.String(), ShouldContainSubstring, "invalid output format") + So(buff.String(), ShouldContainSubstring, "invalid cli output format") }) }) diff --git a/pkg/cli/client/repo_test.go b/pkg/cli/client/repo_test.go index b5ff7b0459..1c67010aa9 100644 --- a/pkg/cli/client/repo_test.go +++ b/pkg/cli/client/repo_test.go @@ -95,7 +95,7 @@ func TestSuggestions(t *testing.T) { suggestion := client.ShowSuggestionsIfUnknownCommand( client.NewRepoCommand(client.NewSearchService()), []string{"bad-command"}) str := space.ReplaceAllString(suggestion.Error(), " ") - So(str, ShouldContainSubstring, "unknown subcommand") + So(str, ShouldContainSubstring, "unknown cli subcommand") suggestion = client.ShowSuggestionsIfUnknownCommand( client.NewRepoCommand(client.NewSearchService()), []string{"listt"}) diff --git a/pkg/cli/server/root.go b/pkg/cli/server/root.go index 66c76cdc86..0d6d4aef4a 100644 --- a/pkg/cli/server/root.go +++ b/pkg/cli/server/root.go @@ -559,15 +559,15 @@ func applyDefaultValues(config *config.Config, viperInstance *viper.Viper, log z if config.Extensions.Search.CVE.Trivy.DBRepository == "" { defaultDBDownloadURL := "ghcr.io/aquasecurity/trivy-db" - log.Info().Str("url", defaultDBDownloadURL). - Msg("config: using default trivy-db download URL.") + log.Info().Str("url", defaultDBDownloadURL).Str("component", "config"). + Msg("using default trivy-db download URL.") config.Extensions.Search.CVE.Trivy.DBRepository = defaultDBDownloadURL } if config.Extensions.Search.CVE.Trivy.JavaDBRepository == "" { defaultJavaDBDownloadURL := "ghcr.io/aquasecurity/trivy-java-db" - log.Info().Str("url", defaultJavaDBDownloadURL). - Msg("config: using default trivy-java-db download URL.") + log.Info().Str("url", defaultJavaDBDownloadURL).Str("component", "config"). + Msg("using default trivy-java-db download URL.") config.Extensions.Search.CVE.Trivy.JavaDBRepository = defaultJavaDBDownloadURL } } @@ -643,7 +643,7 @@ func applyDefaultValues(config *config.Config, viperInstance *viper.Viper, log z cachePath := path.Join(cacheDir, storageConstants.BoltdbName+storageConstants.DBExtensionName) if _, err := os.Stat(cachePath); err == nil { - log.Info().Msg("config: dedupe set to false for s3 driver but used to be true.") + log.Info().Str("component", "config").Msg("dedupe set to false for s3 driver but used to be true.") log.Info().Str("cache path", cachePath).Msg("found cache database") config.Storage.RemoteCache = false @@ -664,7 +664,7 @@ func applyDefaultValues(config *config.Config, viperInstance *viper.Viper, log z subpathCachePath := path.Join(subpathCacheDir, storageConstants.BoltdbName+storageConstants.DBExtensionName) if _, err := os.Stat(subpathCachePath); err == nil { - log.Info().Msg("config: dedupe set to false for s3 driver but used to be true. ") + log.Info().Str("component", "config").Msg("dedupe set to false for s3 driver but used to be true. ") log.Info().Str("cache path", subpathCachePath).Msg("found cache database") storageConfig.RemoteCache = false @@ -798,7 +798,7 @@ func readLDAPCredentials(ldapConfigPath string) (config.LDAPCredentials, error) viperInstance.SetConfigFile(ldapConfigPath) if err := viperInstance.ReadInConfig(); err != nil { - log.Error().Err(err).Msg("error while reading configuration") + log.Error().Err(err).Msg("failed to read configuration") return config.LDAPCredentials{}, err } @@ -806,7 +806,7 @@ func readLDAPCredentials(ldapConfigPath string) (config.LDAPCredentials, error) var ldapCredentials config.LDAPCredentials if err := viperInstance.Unmarshal(&ldapCredentials); err != nil { - log.Error().Err(err).Msg("error while unmarshaling new config") + log.Error().Err(err).Msg("failed to unmarshale new config") return config.LDAPCredentials{}, err } @@ -1008,8 +1008,8 @@ func validateSync(config *config.Config, log zlog.Logger) error { if content.StripPrefix && !strings.Contains(content.Prefix, "/*") && content.Destination == "/" { log.Error().Err(zerr.ErrBadConfig). - Interface("sync content", content). - Msg("sync config: can not use stripPrefix true and destination '/' without using glob patterns in prefix") + Interface("sync content", content).Str("component", "sync"). + Msg("can not use stripPrefix true and destination '/' without using glob patterns in prefix") return zerr.ErrBadConfig } diff --git a/pkg/extensions/extension_image_trust.go b/pkg/extensions/extension_image_trust.go index a5f7cf4e7e..8ae788063f 100644 --- a/pkg/extensions/extension_image_trust.go +++ b/pkg/extensions/extension_image_trust.go @@ -84,7 +84,7 @@ type ImageTrust struct { func (trust *ImageTrust) HandleCosignPublicKeyUpload(response http.ResponseWriter, request *http.Request) { body, err := io.ReadAll(request.Body) if err != nil { - trust.Log.Error().Err(err).Msg("image trust: couldn't read cosign key body") + trust.Log.Error().Err(err).Str("component", "image-trust").Msg("couldn't read cosign key body") response.WriteHeader(http.StatusInternalServerError) return @@ -95,7 +95,7 @@ func (trust *ImageTrust) HandleCosignPublicKeyUpload(response http.ResponseWrite if errors.Is(err, zerr.ErrInvalidPublicKeyContent) { response.WriteHeader(http.StatusBadRequest) } else { - trust.Log.Error().Err(err).Msg("image trust: failed to save cosign key") + trust.Log.Error().Err(err).Str("component", "image-trust").Msg("failed to save cosign key") response.WriteHeader(http.StatusInternalServerError) } @@ -127,7 +127,7 @@ func (trust *ImageTrust) HandleNotationCertificateUpload(response http.ResponseW body, err := io.ReadAll(request.Body) if err != nil { - trust.Log.Error().Err(err).Msg("image trust: couldn't read notation certificate body") + trust.Log.Error().Err(err).Str("component", "image-trust").Msg("couldn't read notation certificate body") response.WriteHeader(http.StatusInternalServerError) return @@ -139,7 +139,7 @@ func (trust *ImageTrust) HandleNotationCertificateUpload(response http.ResponseW errors.Is(err, zerr.ErrInvalidCertificateContent) { response.WriteHeader(http.StatusBadRequest) } else { - trust.Log.Error().Err(err).Msg("image trust: failed to save notation certificate") + trust.Log.Error().Err(err).Str("component", "image-trust").Msg("failed to save notation certificate") response.WriteHeader(http.StatusInternalServerError) } diff --git a/pkg/extensions/extension_mgmt.go b/pkg/extensions/extension_mgmt.go index 544a90095b..f95b13acfe 100644 --- a/pkg/extensions/extension_mgmt.go +++ b/pkg/extensions/extension_mgmt.go @@ -125,7 +125,7 @@ func (mgmt *Mgmt) HandleGetConfig(w http.ResponseWriter, r *http.Request) { buf, err := zcommon.MarshalThroughStruct(sanitizedConfig, &StrippedConfig{}) if err != nil { - mgmt.Log.Error().Err(err).Msg("mgmt: couldn't marshal config response") + mgmt.Log.Error().Err(err).Str("component", "mgmt").Msg("couldn't marshal config response") w.WriteHeader(http.StatusInternalServerError) } diff --git a/pkg/extensions/imagetrust/image_trust.go b/pkg/extensions/imagetrust/image_trust.go index 31c6a8bc5b..b0f723ee2d 100644 --- a/pkg/extensions/imagetrust/image_trust.go +++ b/pkg/extensions/imagetrust/image_trust.go @@ -167,7 +167,7 @@ func (imgTrustStore *ImageTrustStore) VerifySignature( } if manifestDigest.String() == "" { - return "", time.Time{}, false, zerr.ErrBadManifestDigest + return "", time.Time{}, false, zerr.ErrBadSignatureManifestDigest } switch signatureType { diff --git a/pkg/extensions/imagetrust/image_trust_test.go b/pkg/extensions/imagetrust/image_trust_test.go index ec1c1a1f81..d7884eb11e 100644 --- a/pkg/extensions/imagetrust/image_trust_test.go +++ b/pkg/extensions/imagetrust/image_trust_test.go @@ -156,7 +156,7 @@ func TestVerifySignatures(t *testing.T) { imgTrustStore := &imagetrust.ImageTrustStore{} _, _, _, err := imgTrustStore.VerifySignature("", []byte(""), "", "", image.AsImageMeta(), "repo") So(err, ShouldNotBeNil) - So(err, ShouldEqual, zerr.ErrBadManifestDigest) + So(err, ShouldEqual, zerr.ErrBadSignatureManifestDigest) }) Convey("wrong signature type", t, func() { diff --git a/pkg/extensions/lint/lint.go b/pkg/extensions/lint/lint.go index 9150fa2bb1..da881b1f8f 100644 --- a/pkg/extensions/lint/lint.go +++ b/pkg/extensions/lint/lint.go @@ -43,7 +43,7 @@ func (linter *Linter) CheckMandatoryAnnotations(repo string, manifestDigest godi content, err := imgStore.GetBlobContent(repo, manifestDigest) if err != nil { - linter.log.Error().Err(err).Msg("linter: unable to get image manifest") + linter.log.Error().Err(err).Str("component", "linter").Msg("unable to get image manifest") return false, err } @@ -51,7 +51,7 @@ func (linter *Linter) CheckMandatoryAnnotations(repo string, manifestDigest godi var manifest ispec.Manifest if err := json.Unmarshal(content, &manifest); err != nil { - linter.log.Error().Err(err).Msg("linter: couldn't unmarshal manifest JSON") + linter.log.Error().Err(err).Str("component", "linter").Msg("couldn't unmarshal manifest JSON") return false, err } @@ -78,7 +78,7 @@ func (linter *Linter) CheckMandatoryAnnotations(repo string, manifestDigest godi content, err = imgStore.GetBlobContent(repo, configDigest) if err != nil { - linter.log.Error().Err(err).Msg("linter: couldn't get config JSON " + + linter.log.Error().Err(err).Str("component", "linter").Msg("couldn't get config JSON " + configDigest.String()) return false, err @@ -86,7 +86,7 @@ func (linter *Linter) CheckMandatoryAnnotations(repo string, manifestDigest godi var imageConfig ispec.Image if err := json.Unmarshal(content, &imageConfig); err != nil { - linter.log.Error().Err(err).Msg("linter: couldn't unmarshal config JSON " + configDigest.String()) + linter.log.Error().Err(err).Str("component", "linter").Msg("couldn't unmarshal config JSON " + configDigest.String()) return false, err } diff --git a/pkg/extensions/monitoring/minimal_client.go b/pkg/extensions/monitoring/minimal_client.go index 1f4a4e7239..2bf4a111ef 100644 --- a/pkg/extensions/monitoring/minimal_client.go +++ b/pkg/extensions/monitoring/minimal_client.go @@ -70,12 +70,12 @@ func (mc *MetricsClient) GetMetrics() (*MetricsInfo, error) { func (mc *MetricsClient) makeGETRequest(url string, resultsPtr interface{}) (http.Header, error) { req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, url, nil) if err != nil { - return nil, fmt.Errorf("metric scraping: %w", err) + return nil, fmt.Errorf("metric scraping failed: %w", err) } resp, err := mc.config.HTTPClient.Do(req) if err != nil { - return nil, fmt.Errorf("metric scraping error: %w", err) + return nil, fmt.Errorf("metric scraping failed: %w", err) } defer resp.Body.Close() diff --git a/pkg/extensions/monitoring/monitoring_test.go b/pkg/extensions/monitoring/monitoring_test.go index 948fe55316..f5da599839 100644 --- a/pkg/extensions/monitoring/monitoring_test.go +++ b/pkg/extensions/monitoring/monitoring_test.go @@ -476,11 +476,11 @@ func TestPopulateStorageMetrics(t *testing.T) { // Wait for storage metrics to update found, err := test.ReadLogFileAndSearchString(logPath, - "monitoring: computed storage usage for repo alpine", time.Minute) + "computed storage usage for repo alpine", time.Minute) So(err, ShouldBeNil) So(found, ShouldBeTrue) found, err = test.ReadLogFileAndSearchString(logPath, - "monitoring: computed storage usage for repo busybox", time.Minute) + "computed storage usage for repo busybox", time.Minute) So(err, ShouldBeNil) So(found, ShouldBeTrue) diff --git a/pkg/extensions/scrub/scrub.go b/pkg/extensions/scrub/scrub.go index a683fb626b..3277ac8aec 100644 --- a/pkg/extensions/scrub/scrub.go +++ b/pkg/extensions/scrub/scrub.go @@ -20,7 +20,7 @@ func RunScrubRepo(ctx context.Context, imgStore storageTypes.ImageStore, repo st results, err := storage.CheckRepo(ctx, repo, imgStore) if err != nil { - errMessage := fmt.Sprintf("error while running scrub for %s", path.Join(imgStore.RootDir(), repo)) + errMessage := fmt.Sprintf("failed to run scrub for %s", path.Join(imgStore.RootDir(), repo)) log.Error().Err(err).Msg(errMessage) log.Info().Msg(fmt.Sprintf("scrub unsuccessfully completed for %s", path.Join(imgStore.RootDir(), repo))) @@ -33,7 +33,8 @@ func RunScrubRepo(ctx context.Context, imgStore storageTypes.ImageStore, repo st Str("image", result.ImageName). Str("tag", result.Tag). Str("status", result.Status). - Msg("scrub: blobs/manifest ok") + Str("component", "scrub"). + Msg("blobs/manifest ok") } else { log.Warn(). Str("image", result.ImageName). @@ -41,7 +42,8 @@ func RunScrubRepo(ctx context.Context, imgStore storageTypes.ImageStore, repo st Str("status", result.Status). Str("affected blob", result.AffectedBlob). Str("error", result.Error). - Msg("scrub: blobs/manifest affected") + Str("component", "scrub"). + Msg("blobs/manifest affected") } } diff --git a/pkg/extensions/scrub/scrub_test.go b/pkg/extensions/scrub/scrub_test.go index 892652e529..69af3d521a 100644 --- a/pkg/extensions/scrub/scrub_test.go +++ b/pkg/extensions/scrub/scrub_test.go @@ -76,7 +76,7 @@ func TestScrubExtension(t *testing.T) { data, err := os.ReadFile(logFile.Name()) So(err, ShouldBeNil) - So(string(data), ShouldContainSubstring, "scrub: blobs/manifest ok") + So(string(data), ShouldContainSubstring, "blobs/manifest ok") }) Convey("Blobs integrity affected", t, func(c C) { @@ -128,7 +128,7 @@ func TestScrubExtension(t *testing.T) { data, err := os.ReadFile(logFile.Name()) So(err, ShouldBeNil) - So(string(data), ShouldContainSubstring, "scrub: blobs/manifest affected") + So(string(data), ShouldContainSubstring, "blobs/manifest affected") }) Convey("Generator error - not enough permissions to access root directory", t, func(c C) { @@ -215,7 +215,7 @@ func TestRunScrubRepo(t *testing.T) { data, err := os.ReadFile(logFile.Name()) So(err, ShouldBeNil) - So(string(data), ShouldContainSubstring, "scrub: blobs/manifest ok") + So(string(data), ShouldContainSubstring, "blobs/manifest ok") }) Convey("Blobs integrity affected", t, func(c C) { @@ -258,7 +258,7 @@ func TestRunScrubRepo(t *testing.T) { data, err := os.ReadFile(logFile.Name()) So(err, ShouldBeNil) - So(string(data), ShouldContainSubstring, "scrub: blobs/manifest affected") + So(string(data), ShouldContainSubstring, "blobs/manifest affected") }) Convey("CheckRepo error - not enough permissions to access root directory", t, func(c C) { @@ -295,7 +295,7 @@ func TestRunScrubRepo(t *testing.T) { data, err := os.ReadFile(logFile.Name()) So(err, ShouldBeNil) So(string(data), ShouldContainSubstring, - fmt.Sprintf("error while running scrub for %s", imgStore.RootDir())) + fmt.Sprintf("failed to run scrub for %s", imgStore.RootDir())) So(os.Chmod(path.Join(dir, repoName), 0o755), ShouldBeNil) }) } diff --git a/pkg/extensions/search/convert/metadb.go b/pkg/extensions/search/convert/metadb.go index 7ae2ba6c2e..47fd65803d 100644 --- a/pkg/extensions/search/convert/metadb.go +++ b/pkg/extensions/search/convert/metadb.go @@ -141,8 +141,8 @@ func RepoMeta2ExpandedRepoInfo(ctx context.Context, repoMeta mTypes.RepoMeta, imageSummary, _, err := FullImageMeta2ImageSummary(ctx, GetFullImageMeta(tag, repoMeta, imageMeta)) if err != nil { - log.Error().Str("repository", repoName).Str("reference", tag). - Msg("metadb: error while converting descriptor for image") + log.Error().Str("repository", repoName).Str("reference", tag).Str("component", "metadb"). + Msg("error while converting descriptor for image") continue } diff --git a/pkg/extensions/search/cve/cve_test.go b/pkg/extensions/search/cve/cve_test.go index d9f7895353..fd9e277dac 100644 --- a/pkg/extensions/search/cve/cve_test.go +++ b/pkg/extensions/search/cve/cve_test.go @@ -469,16 +469,16 @@ func TestCVESearchDisabled(t *testing.T) { defer ctrlManager.StopServer() resp, _ := resty.R().SetBasicAuth(username, password).Get(baseURL + constants.FullSearchPrefix + "?query={CVEListForImage(image:\"zot-test\"){Tag%20CVEList{Id%20Description%20Severity%20PackageList{Name%20InstalledVersion%20FixedVersion}}}}") - So(string(resp.Body()), ShouldContainSubstring, "search: cve search is disabled") + So(string(resp.Body()), ShouldContainSubstring, "cve search is disabled") So(resp.StatusCode(), ShouldEqual, 200) resp, _ = resty.R().SetBasicAuth(username, password).Get(baseURL + constants.FullSearchPrefix + "?query={ImageListForCVE(id:\"CVE-201-20482\"){Results{RepoName%20Tag}}}") - So(string(resp.Body()), ShouldContainSubstring, "search: cve search is disabled") + So(string(resp.Body()), ShouldContainSubstring, "cve search is disabled") So(resp.StatusCode(), ShouldEqual, 200) resp, _ = resty.R().SetBasicAuth(username, password).Get(baseURL + constants.FullSearchPrefix + "?query={ImageListWithCVEFixed(id:\"" + "randomId" + "\",image:\"zot-test\"){Results{RepoName%20LastUpdated}}}") So(resp, ShouldNotBeNil) - So(string(resp.Body()), ShouldContainSubstring, "search: cve search is disabled") + So(string(resp.Body()), ShouldContainSubstring, "cve search is disabled") So(resp.StatusCode(), ShouldEqual, 200) }) } diff --git a/pkg/extensions/search/cve/trivy/scanner.go b/pkg/extensions/search/cve/trivy/scanner.go index f628c93fb4..bb7d356767 100644 --- a/pkg/extensions/search/cve/trivy/scanner.go +++ b/pkg/extensions/search/cve/trivy/scanner.go @@ -507,7 +507,7 @@ func (scanner Scanner) UpdateDB(ctx context.Context) error { } func (scanner Scanner) updateDB(ctx context.Context, dbDir string) error { - scanner.log.Debug().Str("dbDir", dbDir).Msg("Download Trivy DB to destination dir") + scanner.log.Debug().Str("dbDir", dbDir).Msg("download Trivy DB to destination dir") registryOpts := fanalTypes.RegistryOptions{Insecure: false} diff --git a/pkg/extensions/search/resolver.go b/pkg/extensions/search/resolver.go index 5c9730e396..c4bc2814b4 100644 --- a/pkg/extensions/search/resolver.go +++ b/pkg/extensions/search/resolver.go @@ -788,7 +788,7 @@ func derivedImageList(ctx context.Context, image string, digest *string, metaDB searchedImage, err := getImageSummary(ctx, imageRepo, imageTag, digest, skipReferenceImage, metaDB, cveInfo, log) if err != nil { if errors.Is(err, zerr.ErrRepoMetaNotFound) { - return &gql_generated.PaginatedImagesResult{}, gqlerror.Errorf("repository: not found") + return &gql_generated.PaginatedImagesResult{}, gqlerror.Errorf("repository not found") } return &gql_generated.PaginatedImagesResult{}, err @@ -889,7 +889,7 @@ func baseImageList(ctx context.Context, image string, digest *string, metaDB mTy searchedImage, err := getImageSummary(ctx, imageRepo, imageTag, digest, skipReferenceImage, metaDB, cveInfo, log) if err != nil { if errors.Is(err, zerr.ErrRepoMetaNotFound) { - return &gql_generated.PaginatedImagesResult{}, gqlerror.Errorf("repository: not found") + return &gql_generated.PaginatedImagesResult{}, gqlerror.Errorf("repository not found") } return &gql_generated.PaginatedImagesResult{}, err @@ -961,7 +961,7 @@ func validateGlobalSearchInput(query string, filter *gql_generated.Filter, requestedPage *gql_generated.PageInput, ) error { if len(query) > querySizeLimit { - return fmt.Errorf("global-search: max string size limit exceeded for query parameter. max=%d current=%d %w", + return fmt.Errorf("max string size limit exceeded for query parameter. max=%d current=%d %w", querySizeLimit, len(query), zerr.ErrInvalidRequestParams) } @@ -985,14 +985,14 @@ func checkFilter(filter *gql_generated.Filter) error { for _, arch := range filter.Arch { if len(*arch) > querySizeLimit { - return fmt.Errorf("global-search: max string size limit exceeded for arch parameter. max=%d current=%d %w", + return fmt.Errorf("max string size limit exceeded for arch parameter. max=%d current=%d %w", querySizeLimit, len(*arch), zerr.ErrInvalidRequestParams) } } for _, osSys := range filter.Os { if len(*osSys) > querySizeLimit { - return fmt.Errorf("global-search: max string size limit exceeded for os parameter. max=%d current=%d %w", + return fmt.Errorf("max string size limit exceeded for os parameter. max=%d current=%d %w", querySizeLimit, len(*osSys), zerr.ErrInvalidRequestParams) } } @@ -1006,12 +1006,12 @@ func checkRequestedPage(requestedPage *gql_generated.PageInput) error { } if requestedPage.Limit != nil && *requestedPage.Limit < 0 { - return fmt.Errorf("global-search: requested page limit parameter can't be negative %w", + return fmt.Errorf("requested page limit parameter can't be negative %w", zerr.ErrInvalidRequestParams) } if requestedPage.Offset != nil && *requestedPage.Offset < 0 { - return fmt.Errorf("global-search: requested page offset parameter can't be negative %w", + return fmt.Errorf("requested page offset parameter can't be negative %w", zerr.ErrInvalidRequestParams) } @@ -1079,14 +1079,16 @@ func deleteElementAt(slice []*string, i int) []*string { func expandedRepoInfo(ctx context.Context, repo string, metaDB mTypes.MetaDB, cveInfo cveinfo.CveInfo, log log.Logger, ) (*gql_generated.RepoInfo, error) { if ok, err := reqCtx.RepoIsUserAvailable(ctx, repo); !ok || err != nil { - log.Info().Err(err).Str("repository", repo).Bool("availability", ok).Msg("resolver: repo user availability") + log.Info().Err(err).Str("repository", repo).Bool("availability", ok).Str("component", "graphql"). + Msg("repo user availability") return &gql_generated.RepoInfo{}, nil //nolint:nilerr // don't give details to a potential attacker } repoMeta, err := metaDB.GetRepoMeta(ctx, repo) if err != nil { - log.Error().Err(err).Str("repository", repo).Msg("resolver: can't retrieve repoMeta for repository") + log.Error().Err(err).Str("repository", repo).Str("component", "graphql"). + Msg("can't retrieve repoMeta for repository") return &gql_generated.RepoInfo{}, err } @@ -1103,7 +1105,8 @@ func expandedRepoInfo(ctx context.Context, repo string, metaDB mTypes.MetaDB, cv imageMetaMap, err := metaDB.FilterImageMeta(ctx, tagsDigests) if err != nil { - log.Error().Err(err).Str("repository", repo).Msg("resolver: can't retrieve imageMeta for repo") + log.Error().Err(err).Str("repository", repo).Str("component", "graphql"). + Msg("can't retrieve imageMeta for repo") return &gql_generated.RepoInfo{}, err } @@ -1200,9 +1203,10 @@ func getReferrers(metaDB mTypes.MetaDB, repo string, referredDigest string, arti ) ([]*gql_generated.Referrer, error) { refDigest := godigest.Digest(referredDigest) if err := refDigest.Validate(); err != nil { - log.Error().Err(err).Str("digest", referredDigest).Msg("graphql: bad referenced digest string from request") + log.Error().Err(err).Str("digest", referredDigest).Str("component", "graphql"). + Msg("bad referenced digest string from request") - return []*gql_generated.Referrer{}, fmt.Errorf("graphql: bad digest string from request '%s' %w", + return []*gql_generated.Referrer{}, fmt.Errorf("bad digest string from request '%s' %w", referredDigest, err) } diff --git a/pkg/extensions/search/schema.resolvers.go b/pkg/extensions/search/schema.resolvers.go index 06f2edd2a8..655f4365ac 100644 --- a/pkg/extensions/search/schema.resolvers.go +++ b/pkg/extensions/search/schema.resolvers.go @@ -60,7 +60,7 @@ func (r *queryResolver) ImageListForDigest(ctx context.Context, id string, reque // RepoListWithNewestImage is the resolver for the RepoListWithNewestImage field. func (r *queryResolver) RepoListWithNewestImage(ctx context.Context, requestedPage *gql_generated.PageInput) (*gql_generated.PaginatedReposResult, error) { - r.log.Info().Msg("extension api: finding image list") + r.log.Info().Str("component", "graphql").Msg("finding image list") paginatedReposResult, err := repoListWithNewestImage(ctx, r.cveInfo, r.log, requestedPage, r.metaDB) if err != nil { @@ -74,7 +74,7 @@ func (r *queryResolver) RepoListWithNewestImage(ctx context.Context, requestedPa // ImageList is the resolver for the ImageList field. func (r *queryResolver) ImageList(ctx context.Context, repo string, requestedPage *gql_generated.PageInput) (*gql_generated.PaginatedImagesResult, error) { - r.log.Info().Msg("extension api: getting a list of all images") + r.log.Info().Str("component", "graphql").Msg("getting a list of all images") imageList, err := getImageList(ctx, repo, r.metaDB, r.cveInfo, requestedPage, r.log) if err != nil { diff --git a/pkg/extensions/search/search_test.go b/pkg/extensions/search/search_test.go index e9f218a01a..4fac01d3d9 100644 --- a/pkg/extensions/search/search_test.go +++ b/pkg/extensions/search/search_test.go @@ -2097,7 +2097,7 @@ func TestDerivedImageList(t *testing.T) { }` resp, err := resty.R().Get(baseURL + graphqlQueryPrefix + "?query=" + url.QueryEscape(query)) - So(strings.Contains(string(resp.Body()), "repository: not found"), ShouldBeTrue) + So(string(resp.Body()), ShouldContainSubstring, "repository not found") So(err, ShouldBeNil) }) @@ -2180,7 +2180,7 @@ func TestDerivedImageListNoRepos(t *testing.T) { So(err, ShouldBeNil) So(resp.StatusCode(), ShouldEqual, 200) - So(strings.Contains(string(resp.Body()), "repository: not found"), ShouldBeTrue) + So(string(resp.Body()), ShouldContainSubstring, "repository not found") So(err, ShouldBeNil) }) } @@ -2743,7 +2743,7 @@ func TestBaseImageList(t *testing.T) { }` resp, err := resty.R().Get(baseURL + graphqlQueryPrefix + "?query=" + url.QueryEscape(query)) - So(strings.Contains(string(resp.Body()), "repository: not found"), ShouldBeTrue) + So(string(resp.Body()), ShouldContainSubstring, "repository not found") So(err, ShouldBeNil) }) @@ -6120,7 +6120,7 @@ func TestImageSummary(t *testing.T) { So(len(imgSummaryResponse.Errors), ShouldEqual, 1) So(imgSummaryResponse.Errors[0].Message, - ShouldContainSubstring, "metadb: repo metadata not found for given repo name") + ShouldContainSubstring, "repo metadata not found for given repo name") t.Log("starting Test retrieve image with bad tag") // gql is parametrized with the repo. diff --git a/pkg/extensions/sync/httpclient/client.go b/pkg/extensions/sync/httpclient/client.go index b78503d8bf..60599de4be 100644 --- a/pkg/extensions/sync/httpclient/client.go +++ b/pkg/extensions/sync/httpclient/client.go @@ -87,8 +87,8 @@ func (httpClient *Client) Ping() bool { resp, err := httpClient.client.Do(req) if err != nil { - httpClient.log.Error().Err(err).Str("url", pingURL.String()). - Msg("sync: failed to ping registry") + httpClient.log.Error().Err(err).Str("url", pingURL.String()).Str("component", "sync"). + Msg("failed to ping registry") return false } @@ -108,7 +108,7 @@ func (httpClient *Client) Ping() bool { } httpClient.log.Error().Str("url", pingURL.String()).Str("body", string(body)).Int("statusCode", resp.StatusCode). - Msg("sync: failed to ping registry") + Str("component", "sync").Msg("failed to ping registry") return false } diff --git a/pkg/extensions/sync/local.go b/pkg/extensions/sync/local.go index 86ccf357c5..d1fdc33f66 100644 --- a/pkg/extensions/sync/local.go +++ b/pkg/extensions/sync/local.go @@ -168,10 +168,11 @@ func (registry *LocalRegistry) CommitImage(imageReference types.ImageReference, err = meta.SetImageMetaFromInput(context.Background(), repo, reference, mediaType, manifestDigest, manifestBlob, imageStore, registry.metaDB, registry.log) if err != nil { - return fmt.Errorf("metaDB: failed to set metadata for image '%s %s': %w", repo, reference, err) + return fmt.Errorf("failed to set metadata for image '%s %s': %w", repo, reference, err) } - registry.log.Debug().Str("repo", repo).Str("reference", reference).Msg("metaDB: successfully set metadata for image") + registry.log.Debug().Str("repo", repo).Str("reference", reference).Str("component", "metadb"). + Msg("successfully set metadata for image") } } diff --git a/pkg/extensions/sync/on_demand.go b/pkg/extensions/sync/on_demand.go index 062128042d..95f95ccc9e 100644 --- a/pkg/extensions/sync/on_demand.go +++ b/pkg/extensions/sync/on_demand.go @@ -148,7 +148,7 @@ func (onDemand *BaseOnDemand) syncImage(ctx context.Context, repo, reference str }() onDemand.log.Info().Str("repo", repo).Str(reference, "reference").Str("err", err.Error()). - Msg("sync routine: starting routine to copy image, because of error") + Str("component", "sync").Msg("starting routine to copy image, because of error") time.Sleep(retryOptions.Delay) @@ -159,7 +159,7 @@ func (onDemand *BaseOnDemand) syncImage(ctx context.Context, repo, reference str return err }, retryOptions); err != nil { onDemand.log.Error().Str("errorType", common.TypeOf(err)).Str("repo", repo).Str("reference", reference). - Err(err).Msg("sync routine: error while copying image") + Err(err).Str("component", "sync").Msg("failed to copy image") } }(service) } diff --git a/pkg/extensions/sync/references/cosign.go b/pkg/extensions/sync/references/cosign.go index ac7726a473..dd7758badb 100644 --- a/pkg/extensions/sync/references/cosign.go +++ b/pkg/extensions/sync/references/cosign.go @@ -150,8 +150,8 @@ func (ref CosignReference) SyncReferences(ctx context.Context, localRepo, remote Msg("successfully synced cosign reference for image") if ref.metaDB != nil { - ref.log.Debug().Str("repository", localRepo).Str("subject", subjectDigestStr). - Msg("metaDB: trying to sync cosign reference for image") + ref.log.Debug().Str("repository", localRepo).Str("subject", subjectDigestStr).Str("component", "metadb"). + Msg("trying to sync cosign reference for image") err = meta.SetImageMetaFromInput(ctx, localRepo, cosignTag, ispec.MediaTypeImageManifest, referenceDigest, manifestBuf, ref.storeController.GetImageStore(localRepo), @@ -162,8 +162,8 @@ func (ref CosignReference) SyncReferences(ctx context.Context, localRepo, remote localRepo, subjectDigestStr, err) } - ref.log.Info().Str("repository", localRepo).Str("subject", subjectDigestStr). - Msg("metaDB: successfully added cosign reference for image") + ref.log.Info().Str("repository", localRepo).Str("subject", subjectDigestStr).Str("component", "metadb"). + Msg("successfully added cosign reference for image") } } diff --git a/pkg/extensions/sync/references/oci.go b/pkg/extensions/sync/references/oci.go index de1c3a917f..e6a3ca65cd 100644 --- a/pkg/extensions/sync/references/oci.go +++ b/pkg/extensions/sync/references/oci.go @@ -134,8 +134,8 @@ func (ref OciReferences) SyncReferences(ctx context.Context, localRepo, remoteRe refsDigests = append(refsDigests, referenceDigest) if ref.metaDB != nil { - ref.log.Debug().Str("repository", localRepo).Str("subject", subjectDigestStr). - Msg("metaDB: trying to add oci references for image") + ref.log.Debug().Str("repository", localRepo).Str("subject", subjectDigestStr).Str("component", "metadb"). + Msg("trying to add oci references for image") err = meta.SetImageMetaFromInput(ctx, localRepo, referenceDigest.String(), referrer.MediaType, referenceDigest, referenceBuf, ref.storeController.GetImageStore(localRepo), @@ -145,8 +145,8 @@ func (ref OciReferences) SyncReferences(ctx context.Context, localRepo, remoteRe localRepo, subjectDigestStr, err) } - ref.log.Info().Str("repository", localRepo).Str("subject", subjectDigestStr). - Msg("metaDB: successfully added oci references to MetaDB for image") + ref.log.Info().Str("repository", localRepo).Str("subject", subjectDigestStr).Str("component", "metadb"). + Msg("successfully added oci references to MetaDB for image") } } diff --git a/pkg/extensions/sync/references/oras.go b/pkg/extensions/sync/references/oras.go index 12ba3a8e68..8e69c1e19d 100644 --- a/pkg/extensions/sync/references/oras.go +++ b/pkg/extensions/sync/references/oras.go @@ -151,20 +151,20 @@ func (ref ORASReferences) SyncReferences(ctx context.Context, localRepo, remoteR refsDigests = append(refsDigests, referenceDigest) if ref.metaDB != nil { - ref.log.Debug().Str("repository", localRepo).Str("subject", subjectDigestStr). - Msg("metaDB: trying to sync oras artifact for image") + ref.log.Debug().Str("repository", localRepo).Str("subject", subjectDigestStr).Str("component", "metadb"). + Msg("trying to sync oras artifact for image") err := meta.SetImageMetaFromInput(context.Background(), localRepo, //nolint:contextcheck referenceDigest.String(), referrer.MediaType, referenceDigest, orasBuf, ref.storeController.GetImageStore(localRepo), ref.metaDB, ref.log) if err != nil { - return refsDigests, fmt.Errorf("metaDB: failed to set metadata for oras artifact '%s@%s': %w", + return refsDigests, fmt.Errorf("failed to set metadata in db for oras artifact '%s@%s': %w", localRepo, subjectDigestStr, err) } - ref.log.Info().Str("repository", localRepo).Str("subject", subjectDigestStr). - Msg("metaDB: successfully added oras artifacts to MetaDB for image") + ref.log.Info().Str("repository", localRepo).Str("subject", subjectDigestStr).Str("component", "metadb"). + Msg("successfully added oras artifacts to MetaDB for image") } } diff --git a/pkg/extensions/sync/references/referrers_tag.go b/pkg/extensions/sync/references/referrers_tag.go index 341570bae7..7465e87045 100644 --- a/pkg/extensions/sync/references/referrers_tag.go +++ b/pkg/extensions/sync/references/referrers_tag.go @@ -110,8 +110,8 @@ func (ref TagReferences) SyncReferences(ctx context.Context, localRepo, remoteRe refsDigests = append(refsDigests, referenceDigest) if ref.metaDB != nil { - ref.log.Debug().Str("repository", localRepo).Str("subject", subjectDigestStr). - Msg("metaDB: trying to add oci references for image") + ref.log.Debug().Str("repository", localRepo).Str("subject", subjectDigestStr).Str("component", "metadb"). + Msg("trying to add oci references for image") err = meta.SetImageMetaFromInput(ctx, localRepo, referenceDigest.String(), referrer.MediaType, referenceDigest, referenceBuf, ref.storeController.GetImageStore(localRepo), @@ -121,8 +121,8 @@ func (ref TagReferences) SyncReferences(ctx context.Context, localRepo, remoteRe localRepo, subjectDigestStr, err) } - ref.log.Info().Str("repository", localRepo).Str("subject", subjectDigestStr). - Msg("metaDB: successfully added oci references to MetaDB for image") + ref.log.Info().Str("repository", localRepo).Str("subject", subjectDigestStr).Str("component", "metadb"). + Msg("successfully added oci references to MetaDB for image") } } diff --git a/pkg/extensions/sync/sync.go b/pkg/extensions/sync/sync.go index bb4dd0bf4e..64df669787 100644 --- a/pkg/extensions/sync/sync.go +++ b/pkg/extensions/sync/sync.go @@ -100,7 +100,7 @@ func (gen *TaskGenerator) Next() (scheduler.Task, error) { } if repo == "" { - gen.log.Info().Msg("sync: finished syncing all repos") + gen.log.Info().Str("component", "sync").Msg("finished syncing all repos") gen.done = true return nil, nil diff --git a/pkg/extensions/sync/sync_test.go b/pkg/extensions/sync/sync_test.go index 97b78871d5..d8faf37dd6 100644 --- a/pkg/extensions/sync/sync_test.go +++ b/pkg/extensions/sync/sync_test.go @@ -4974,7 +4974,7 @@ func TestOnDemandRetryGoroutineErr(t *testing.T) { So(resp.StatusCode(), ShouldEqual, http.StatusNotFound) found, err := test.ReadLogFileAndSearchString(dctlr.Config.Log.Output, - "sync routine: error while copying image", 15*time.Second) + "failed to copy image", 15*time.Second) if err != nil { panic(err) } diff --git a/pkg/meta/boltdb/boltdb.go b/pkg/meta/boltdb/boltdb.go index 865096ebc9..78af795338 100644 --- a/pkg/meta/boltdb/boltdb.go +++ b/pkg/meta/boltdb/boltdb.go @@ -154,12 +154,12 @@ func (bdw *BoltDB) SetImageMeta(digest godigest.Digest, imageMeta mTypes.ImageMe pImageMetaBlob, err := proto.Marshal(protoImageMeta) if err != nil { - return fmt.Errorf("metadb: error while calculating blob for manifest with digest %s %w", digest, err) + return fmt.Errorf("failed to calculate blob for manifest with digest %s %w", digest, err) } err = buck.Put([]byte(digest), pImageMetaBlob) if err != nil { - return fmt.Errorf("metadb: error while setting manifest data with for digest %s %w", digest, err) + return fmt.Errorf("failed to set manifest data with for digest %s %w", digest, err) } return nil @@ -494,7 +494,7 @@ func (bdw *BoltDB) SearchTags(ctx context.Context, searchText string, searchedRepo, searchedTag, err := common.GetRepoTag(searchText) if err != nil { return []mTypes.FullImageMeta{}, - fmt.Errorf("metadb: error while parsing search text, invalid format %w", err) + fmt.Errorf("failled to parse search text, invalid format %w", err) } err = bdw.DB.View(func(transaction *bbolt.Tx) error { @@ -538,7 +538,7 @@ func (bdw *BoltDB) SearchTags(ctx context.Context, searchText string, imageManifestData, err := getProtoImageMeta(imageBuck, manifestDigest) if err != nil { - return fmt.Errorf("metadb: error fetching manifest meta for manifest with digest %s %w", + return fmt.Errorf("error fetching manifest meta for manifest with digest %s %w", manifestDigest, err) } @@ -548,7 +548,7 @@ func (bdw *BoltDB) SearchTags(ctx context.Context, searchText string, imageIndexData, err := getProtoImageMeta(imageBuck, indexDigest) if err != nil { - return fmt.Errorf("metadb: error fetching manifest meta for manifest with digest %s %w", + return fmt.Errorf("error fetching manifest meta for manifest with digest %s %w", indexDigest, err) } @@ -997,7 +997,7 @@ func (bdw *BoltDB) DeleteSignature(repo string, signedManifestDigest godigest.Di repoMetaBlob := repoMetaBuck.Get([]byte(repo)) if len(repoMetaBlob) == 0 { - return zerr.ErrManifestMetaNotFound + return zerr.ErrImageMetaNotFound } protoRepoMeta, err := unmarshalProtoRepoMeta(repo, repoMetaBlob) @@ -1007,7 +1007,7 @@ func (bdw *BoltDB) DeleteSignature(repo string, signedManifestDigest godigest.Di manifestSignatures, found := protoRepoMeta.Signatures[signedManifestDigest.String()] if !found { - return zerr.ErrManifestMetaNotFound + return zerr.ErrImageMetaNotFound } signatureSlice := manifestSignatures.Map[sigMeta.SignatureType] @@ -1209,7 +1209,7 @@ func (bdw *BoltDB) UpdateStatsOnDownload(repo string, reference string) error { descriptor, found := protoRepoMeta.Tags[reference] if !found { - return zerr.ErrManifestMetaNotFound + return zerr.ErrImageMetaNotFound } manifestDigest = descriptor.Digest @@ -1217,7 +1217,7 @@ func (bdw *BoltDB) UpdateStatsOnDownload(repo string, reference string) error { manifestStatistics, ok := protoRepoMeta.Statistics[manifestDigest] if !ok { - return zerr.ErrManifestMetaNotFound + return zerr.ErrImageMetaNotFound } manifestStatistics.DownloadCount++ @@ -1817,7 +1817,7 @@ func (bdw *BoltDB) AddUserAPIKey(ctx context.Context, hashedKey string, apiKeyDe err := apiKeysbuck.Put([]byte(hashedKey), []byte(userid)) if err != nil { - return fmt.Errorf("metaDB: error while setting userData for identity %s %w", userid, err) + return fmt.Errorf("failt to set userData for identity %s %w", userid, err) } err = bdw.getUserData(userid, transaction, &userData) @@ -1870,7 +1870,7 @@ func (bdw *BoltDB) DeleteUserAPIKey(ctx context.Context, keyID string) error { err := apiKeysbuck.Delete([]byte(hash)) if err != nil { - return fmt.Errorf("userDB: error while deleting userAPIKey entry for hash %s %w", hash, err) + return fmt.Errorf("failed to delet userAPIKey entry for hash %s %w", hash, err) } } } @@ -1975,7 +1975,7 @@ func (bdw *BoltDB) setUserData(userid string, transaction *bbolt.Tx, userData mT err = buck.Put([]byte(userid), upBlob) if err != nil { - return fmt.Errorf("metaDB: error while setting userData for identity %s %w", userid, err) + return fmt.Errorf("failed to set userData for identity %s %w", userid, err) } return nil @@ -2001,7 +2001,7 @@ func (bdw *BoltDB) DeleteUserData(ctx context.Context) error { err := buck.Delete([]byte(userid)) if err != nil { - return fmt.Errorf("metaDB: error while deleting userData for identity %s %w", userid, err) + return fmt.Errorf("failed to delete userData for identity %s %w", userid, err) } return nil diff --git a/pkg/meta/dynamodb/dynamodb.go b/pkg/meta/dynamodb/dynamodb.go index c383b61392..3d556dd9f5 100644 --- a/pkg/meta/dynamodb/dynamodb.go +++ b/pkg/meta/dynamodb/dynamodb.go @@ -592,7 +592,7 @@ func (dwr *DynamoDB) SearchTags(ctx context.Context, searchText string) ([]mType searchedRepo, searchedTag, err := common.GetRepoTag(searchText) if err != nil { return []mTypes.FullImageMeta{}, - fmt.Errorf("metadb: error while parsing search text, invalid format %w", err) + fmt.Errorf("failed to parse search text, invalid format %w", err) } if ok, err := reqCtx.RepoIsUserAvailable(ctx, searchedRepo); !ok || err != nil { @@ -627,7 +627,7 @@ func (dwr *DynamoDB) SearchTags(ctx context.Context, searchText string) ([]mType imageManifestData, err := dwr.GetProtoImageMeta(ctx, godigest.Digest(manifestDigest)) if err != nil { return []mTypes.FullImageMeta{}, - fmt.Errorf("metadb: error fetching manifest meta for manifest with digest %s %w", manifestDigest, err) + fmt.Errorf("error fetching manifest meta for manifest with digest %s %w", manifestDigest, err) } protoImageMeta = imageManifestData @@ -637,7 +637,7 @@ func (dwr *DynamoDB) SearchTags(ctx context.Context, searchText string) ([]mType imageIndexData, err := dwr.GetProtoImageMeta(ctx, indexDigest) if err != nil { return []mTypes.FullImageMeta{}, - fmt.Errorf("metadb: error fetching manifest meta for manifest with digest %s %w", indexDigest, err) + fmt.Errorf("error fetching manifest meta for manifest with digest %s %w", indexDigest, err) } manifestDataList := make([]*proto_go.ManifestMeta, 0, len(imageIndexData.Index.Index.Manifests)) @@ -1112,7 +1112,7 @@ func (dwr *DynamoDB) UpdateStatsOnDownload(repo string, reference string) error descriptor, found := repoMeta.Tags[reference] if !found { - return zerr.ErrManifestMetaNotFound + return zerr.ErrImageMetaNotFound } descriptorDigest = descriptor.Digest @@ -1120,7 +1120,7 @@ func (dwr *DynamoDB) UpdateStatsOnDownload(repo string, reference string) error manifestStatistics, ok := repoMeta.Statistics[descriptorDigest] if !ok { - return zerr.ErrManifestMetaNotFound + return zerr.ErrImageMetaNotFound } manifestStatistics.DownloadCount++ @@ -1294,7 +1294,7 @@ func (dwr *DynamoDB) DeleteSignature(repo string, signedManifestDigest godigest. ) if manifestSignatures, found = protoRepoMeta.Signatures[signedManifestDigest.String()]; !found { - return zerr.ErrManifestMetaNotFound + return zerr.ErrImageMetaNotFound } signatureSlice := manifestSignatures.Map[sigType] @@ -1728,7 +1728,7 @@ func (dwr DynamoDB) GetUserAPIKeys(ctx context.Context) ([]mTypes.APIKeyDetails, userData, err := dwr.GetUserData(ctx) if err != nil && !errors.Is(err, zerr.ErrUserDataNotFound) { - return nil, fmt.Errorf("metaDB: error while getting userData for identity %s %w", userid, err) + return nil, fmt.Errorf("failed to get userData for identity %s %w", userid, err) } for hashedKey, apiKeyDetails := range userData.APIKeys { @@ -1764,7 +1764,7 @@ func (dwr DynamoDB) AddUserAPIKey(ctx context.Context, hashedKey string, apiKeyD userData, err := dwr.GetUserData(ctx) if err != nil && !errors.Is(err, zerr.ErrUserDataNotFound) { - return fmt.Errorf("metaDB: error while getting userData for identity %s %w", userid, err) + return fmt.Errorf("failed to get userData for identity %s %w", userid, err) } if userData.APIKeys == nil { @@ -1825,7 +1825,7 @@ func (dwr DynamoDB) AddUserAPIKey(ctx context.Context, hashedKey string, apiKeyD func (dwr DynamoDB) DeleteUserAPIKey(ctx context.Context, keyID string) error { userData, err := dwr.GetUserData(ctx) if err != nil { - return fmt.Errorf("metaDB: error while getting userData %w", err) + return fmt.Errorf("failed to get userData %w", err) } for hash, apiKeyDetails := range userData.APIKeys { @@ -1839,7 +1839,7 @@ func (dwr DynamoDB) DeleteUserAPIKey(ctx context.Context, keyID string) error { }, }) if err != nil { - return fmt.Errorf("metaDB: error while deleting userAPIKey entry for hash %s %w", hash, err) + return fmt.Errorf("failed to delete userAPIKey entry for hash %s %w", hash, err) } err := dwr.SetUserData(ctx, userData) diff --git a/pkg/meta/hooks.go b/pkg/meta/hooks.go index 2bc5d208ff..f51c44812e 100644 --- a/pkg/meta/hooks.go +++ b/pkg/meta/hooks.go @@ -70,18 +70,20 @@ func OnDeleteManifest(repo, reference, mediaType string, digest godigest.Digest, SignatureType: signatureType, }) if err != nil { - log.Error().Err(err).Msg("metadb: can't check if image is a signature or not") + log.Error().Err(err).Str("component", "metadb"). + Msg("can't check if image is a signature or not") manageRepoMetaSuccessfully = false } } else { err = metaDB.RemoveRepoReference(repo, reference, digest) if err != nil { - log.Info().Msg("metadb: restoring image store") + log.Info().Str("component", "metadb").Msg("restoring image store") // restore image store _, _, err := imgStore.PutImageManifest(repo, reference, mediaType, manifestBlob) if err != nil { - log.Error().Err(err).Msg("metadb: error while restoring image store, database is not consistent") + log.Error().Err(err).Str("component", "metadb"). + Msg("failed to restore manifest to image store, database is not consistent") } manageRepoMetaSuccessfully = false @@ -89,8 +91,8 @@ func OnDeleteManifest(repo, reference, mediaType string, digest godigest.Digest, } if !manageRepoMetaSuccessfully { - log.Info().Str("tag", reference).Str("repository", repo). - Msg("metadb: deleting image meta was unsuccessful for tag in repo") + log.Info().Str("tag", reference).Str("repository", repo).Str("component", "metadb"). + Msg("deleting image meta was unsuccessful for tag in repo") return err } diff --git a/pkg/meta/parse.go b/pkg/meta/parse.go index 7d6d1ca8af..2adab8ad45 100644 --- a/pkg/meta/parse.go +++ b/pkg/meta/parse.go @@ -173,7 +173,7 @@ func getAllRepos(storeController stypes.StoreController, log log.Logger) ([]stri allRepos, err := storeController.GetDefaultImageStore().GetRepositories() if err != nil { log.Error().Err(err).Str("rootDir", storeController.GetDefaultImageStore().RootDir()). - Msg("load-local-layout: failed to get all repo names present under rootDir") + Msg("failed to get all repo names present under rootDir") return nil, err } @@ -183,7 +183,7 @@ func getAllRepos(storeController stypes.StoreController, log log.Logger) ([]stri substoreRepos, err := store.GetRepositories() if err != nil { log.Error().Err(err).Str("rootDir", store.RootDir()). - Msg("load-local-layout: failed to get all repo names present under rootDir") + Msg("failed to get all repo names present under rootDir") return nil, err } @@ -316,7 +316,7 @@ func SetImageMetaFromInput(ctx context.Context, repo, reference, mediaType strin err := json.Unmarshal(blob, &manifestContent) if err != nil { - log.Error().Err(err).Msg("metadb: error while getting image data") + log.Error().Err(err).Str("component", "metadb").Msg("failed to unmarshal image manifest") return err } @@ -350,7 +350,7 @@ func SetImageMetaFromInput(ctx context.Context, repo, reference, mediaType strin if err != nil { log.Error().Err(err).Str("repository", repo).Str("tag", reference). Str("manifestDigest", signedManifestDigest.String()). - Msg("load-repo: failed set signature meta for signed image") + Msg("failed set signature meta for signed image") return err } @@ -358,7 +358,7 @@ func SetImageMetaFromInput(ctx context.Context, repo, reference, mediaType strin err = metaDB.UpdateSignaturesValidity(ctx, repo, signedManifestDigest) if err != nil { log.Error().Err(err).Str("repository", repo).Str("reference", reference).Str("digest", - signedManifestDigest.String()).Msg("load-repo: failed verify signatures validity for signed image") + signedManifestDigest.String()).Msg("failed to verify signature validity for signed image") return err } @@ -382,7 +382,7 @@ func SetImageMetaFromInput(ctx context.Context, repo, reference, mediaType strin err := metaDB.SetRepoReference(ctx, repo, reference, imageMeta) if err != nil { - log.Error().Err(err).Msg("metadb: error while setting repo meta") + log.Error().Err(err).Str("component", "metadb").Msg("failed to set repo meta") return err } diff --git a/pkg/storage/common/common.go b/pkg/storage/common/common.go index 21b235adb6..296382bef3 100644 --- a/pkg/storage/common/common.go +++ b/pkg/storage/common/common.go @@ -483,8 +483,8 @@ func isBlobReferencedInImageManifest(imgStore storageTypes.ImageStore, repo stri manifestContent, err := GetImageManifest(imgStore, repo, mdigest, log) if err != nil { - log.Error().Err(err).Str("repo", repo).Str("digest", mdigest.String()). - Msg("gc: failed to read manifest image") + log.Error().Err(err).Str("repo", repo).Str("digest", mdigest.String()).Str("component", "gc"). + Msg("failed to read manifest image") return false, err } @@ -511,8 +511,8 @@ func isBlobReferencedInORASManifest(imgStore storageTypes.ImageStore, repo strin manifestContent, err := GetOrasManifestByDigest(imgStore, repo, mdigest, log) if err != nil { - log.Error().Err(err).Str("repo", repo).Str("digest", mdigest.String()). - Msg("gc: failed to read manifest image") + log.Error().Err(err).Str("repo", repo).Str("digest", mdigest.String()).Str("component", "gc"). + Msg("failed to read manifest image") return false, err } @@ -978,14 +978,14 @@ func (gen *DedupeTaskGenerator) Next() (scheduler.Task, error) { gen.repos, err = gen.ImgStore.GetRepositories() if err != nil { //nolint: dupword - gen.Log.Error().Err(err).Msg("dedupe rebuild: unable to to get list of repositories") + gen.Log.Error().Err(err).Str("component", "dedupe").Msg("unable to to get list of repositories") return nil, err } // if still no repos if len(gen.repos) == 0 { - gen.Log.Info().Msg("dedupe rebuild: no repositories found in storage, finished.") + gen.Log.Info().Str("component", "dedupe").Msg("no repositories found in storage, finished.") // no repositories in storage, no need to continue gen.done = true @@ -997,14 +997,14 @@ func (gen *DedupeTaskGenerator) Next() (scheduler.Task, error) { // get all blobs from storage.imageStore and group them by digest gen.digest, gen.duplicateBlobs, err = gen.ImgStore.GetNextDigestWithBlobPaths(gen.repos, gen.lastDigests) if err != nil { - gen.Log.Error().Err(err).Msg("dedupe rebuild: failed to get next digest") + gen.Log.Error().Err(err).Str("component", "dedupe").Msg("failed to get next digest") return nil, err } // if no digests left, then mark the task generator as done if gen.digest == "" { - gen.Log.Info().Msg("dedupe rebuild: finished") + gen.Log.Info().Str("component", "dedupe").Msg("finished") gen.done = true @@ -1055,7 +1055,8 @@ func (dt *dedupeTask) DoWork(ctx context.Context) error { err := dt.imgStore.RunDedupeForDigest(ctx, dt.digest, dt.dedupe, dt.duplicateBlobs) //nolint: contextcheck if err != nil { // log it - dt.log.Error().Err(err).Str("digest", dt.digest.String()).Msg("rebuild dedupe: failed to rebuild digest") + dt.log.Error().Err(err).Str("digest", dt.digest.String()).Str("component", "dedupe"). + Msg("failed to rebuild digest") } return err @@ -1086,7 +1087,7 @@ func (gen *StorageMetricsInitGenerator) Next() (scheduler.Task, error) { return nil, err } - gen.Log.Debug().Str("repo", repo).Int("randomDelay", delay).Msg("storageMetricsInitGenerator") + gen.Log.Debug().Str("repo", repo).Int("randomDelay", delay).Msg("generate task for storage metrics") if repo == "" { gen.done = true @@ -1128,7 +1129,7 @@ func NewStorageMetricsTask(imgStore storageTypes.ImageStore, metrics monitoring. func (smt *smTask) DoWork(ctx context.Context) error { // run task monitoring.SetStorageUsage(smt.metrics, smt.imgStore.RootDir(), smt.repo) - smt.log.Debug().Msg("monitoring: computed storage usage for repo " + smt.repo) + smt.log.Debug().Str("component", "monitoring").Msg("computed storage usage for repo " + smt.repo) return nil } diff --git a/pkg/storage/gc/gc.go b/pkg/storage/gc/gc.go index c51b9b260d..4af4aae77c 100644 --- a/pkg/storage/gc/gc.go +++ b/pkg/storage/gc/gc.go @@ -85,7 +85,7 @@ func (gc GarbageCollect) CleanRepo(ctx context.Context, repo string) error { Msg(fmt.Sprintf("executing GC of orphaned blobs for %s", path.Join(gc.imgStore.RootDir(), repo))) if err := gc.cleanRepo(ctx, repo); err != nil { - errMessage := fmt.Sprintf("error while running GC for %s", path.Join(gc.imgStore.RootDir(), repo)) + errMessage := fmt.Sprintf("failed to run GC for %s", path.Join(gc.imgStore.RootDir(), repo)) gc.log.Error().Err(err).Str("module", "gc").Msg(errMessage) gc.log.Info().Str("module", "gc"). Msg(fmt.Sprintf("GC unsuccessfully completed for %s", path.Join(gc.imgStore.RootDir(), repo))) @@ -435,14 +435,16 @@ func (gc GarbageCollect) removeManifest(repo string, index *ispec.Index, SignatureType: signatureType, }) if err != nil { - gc.log.Error().Err(err).Str("module", "gc").Msg("metadb: unable to remove signature in metaDB") + gc.log.Error().Err(err).Str("module", "gc").Str("component", "metadb"). + Msg("unable to remove signature in metaDB") return false, err } } else { err := gc.metaDB.RemoveRepoReference(repo, reference, desc.Digest) if err != nil { - gc.log.Error().Err(err).Str("module", "gc").Msg("metadb: unable to remove repo reference in metaDB") + gc.log.Error().Err(err).Str("module", "gc").Str("component", "metadb"). + Msg("unable to remove repo reference in metaDB") return false, err } diff --git a/pkg/storage/imagestore/imagestore.go b/pkg/storage/imagestore/imagestore.go index 99713ab002..e55258b25e 100644 --- a/pkg/storage/imagestore/imagestore.go +++ b/pkg/storage/imagestore/imagestore.go @@ -1012,11 +1012,11 @@ func (is *ImageStore) FullBlobUpload(repo string, body io.Reader, dstDigest godi func (is *ImageStore) DedupeBlob(src string, dstDigest godigest.Digest, dstRepo string, dst string) error { retry: - is.log.Debug().Str("src", src).Str("dstDigest", dstDigest.String()).Str("dst", dst).Msg("dedupe: enter") + is.log.Debug().Str("src", src).Str("dstDigest", dstDigest.String()).Str("dst", dst).Msg("dedupe begin") dstRecord, err := is.cache.GetBlob(dstDigest) if err := inject.Error(err); err != nil && !errors.Is(err, zerr.ErrCacheMiss) { - is.log.Error().Err(err).Str("blobPath", dst).Msg("dedupe: failed to lookup blob record") + is.log.Error().Err(err).Str("blobPath", dst).Str("component", "dedupe").Msg("failed to lookup blob record") return err } @@ -1024,19 +1024,21 @@ retry: if dstRecord == "" { // cache record doesn't exist, so first disk and cache entry for this digest if err := is.cache.PutBlob(dstDigest, dst); err != nil { - is.log.Error().Err(err).Str("blobPath", dst).Msg("dedupe: failed to insert blob record") + is.log.Error().Err(err).Str("blobPath", dst).Str("component", "dedupe"). + Msg("failed to insert blob record") return err } // move the blob from uploads to final dest if err := is.storeDriver.Move(src, dst); err != nil { - is.log.Error().Err(err).Str("src", src).Str("dst", dst).Msg("dedupe: failed to rename blob") + is.log.Error().Err(err).Str("src", src).Str("dst", dst).Str("component", "dedupe"). + Msg("failed to rename blob") return err } - is.log.Debug().Str("src", src).Str("dst", dst).Msg("dedupe: rename") + is.log.Debug().Str("src", src).Str("dst", dst).Str("component", "dedupe").Msg("rename") } else { // cache record exists, but due to GC and upgrades from older versions, // disk content and cache records may go out of sync @@ -1046,12 +1048,13 @@ retry: blobInfo, err := is.storeDriver.Stat(dstRecord) if err != nil { - is.log.Error().Err(err).Str("blobPath", dstRecord).Msg("dedupe: failed to stat") + is.log.Error().Err(err).Str("blobPath", dstRecord).Str("component", "dedupe").Msg("failed to stat") // the actual blob on disk may have been removed by GC, so sync the cache err := is.cache.DeleteBlob(dstDigest, dstRecord) if err = inject.Error(err); err != nil { //nolint:lll - is.log.Error().Err(err).Str("dstDigest", dstDigest.String()).Str("dst", dst).Msg("dedupe: failed to delete blob record") + is.log.Error().Err(err).Str("dstDigest", dstDigest.String()).Str("dst", dst). + Str("component", "dedupe").Msg("failed to delete blob record") return err } @@ -1062,13 +1065,15 @@ retry: // prevent overwrite original blob if !is.storeDriver.SameFile(dst, dstRecord) { if err := is.storeDriver.Link(dstRecord, dst); err != nil { - is.log.Error().Err(err).Str("blobPath", dstRecord).Msg("dedupe: failed to link blobs") + is.log.Error().Err(err).Str("blobPath", dstRecord).Str("component", "dedupe"). + Msg("failed to link blobs") return err } if err := is.cache.PutBlob(dstDigest, dst); err != nil { - is.log.Error().Err(err).Str("blobPath", dst).Msg("dedupe: failed to insert blob record") + is.log.Error().Err(err).Str("blobPath", dst).Str("component", "dedupe"). + Msg("failed to insert blob record") return err } @@ -1078,12 +1083,13 @@ retry: // blob corrupted, replace content if desc.Size != blobInfo.Size() { if err := is.storeDriver.Move(src, dst); err != nil { - is.log.Error().Err(err).Str("src", src).Str("dst", dst).Msg("dedupe: unable to rename blob") + is.log.Error().Err(err).Str("src", src).Str("dst", dst).Str("component", "dedupe"). + Msg("unable to rename blob") return err } - is.log.Debug().Str("src", src).Msg("dedupe: remove") + is.log.Debug().Str("src", src).Str("component", "dedupe").Msg("remove") return nil } @@ -1092,12 +1098,13 @@ retry: // remove temp blobupload if err := is.storeDriver.Delete(src); err != nil { - is.log.Error().Err(err).Str("src", src).Msg("dedupe: failed to remove blob") + is.log.Error().Err(err).Str("src", src).Str("component", "dedupe"). + Msg("failed to remove blob") return err } - is.log.Debug().Str("src", src).Msg("dedupe: remove") + is.log.Debug().Str("src", src).Str("component", "dedupe").Msg("remove") } return nil @@ -1188,7 +1195,7 @@ func (is *ImageStore) CheckBlob(repo string, digest godigest.Digest) (bool, int6 // put deduped blob in cache if err := is.cache.PutBlob(digest, blobPath); err != nil { - is.log.Error().Err(err).Str("blobPath", blobPath).Msg("dedupe: failed to insert blob record") + is.log.Error().Err(err).Str("blobPath", blobPath).Str("component", "dedupe").Msg("failed to insert blob record") return false, -1, err } @@ -1269,7 +1276,8 @@ func (is *ImageStore) checkCacheBlob(digest godigest.Digest) (string, error) { return "", zerr.ErrBlobNotFound } - is.log.Debug().Str("digest", digest.String()).Str("dstRecord", dstRecord).Msg("cache: found dedupe record") + is.log.Debug().Str("digest", digest.String()).Str("dstRecord", dstRecord).Str("component", "cache"). + Msg("found dedupe record") return dstRecord, nil } @@ -1284,7 +1292,8 @@ func (is *ImageStore) copyBlob(repo string, blobPath, dstRecord string) (int64, _ = is.storeDriver.EnsureDir(filepath.Dir(blobPath)) if err := is.storeDriver.Link(dstRecord, blobPath); err != nil { - is.log.Error().Err(err).Str("blobPath", blobPath).Str("link", dstRecord).Msg("dedupe: failed to hard link") + is.log.Error().Err(err).Str("blobPath", blobPath).Str("link", dstRecord).Str("component", "dedupe"). + Msg("failed to hard link") return -1, zerr.ErrBlobNotFound } @@ -1631,7 +1640,8 @@ func (is *ImageStore) deleteBlob(repo string, digest godigest.Digest) error { if fmt.Sprintf("%v", is.cache) != fmt.Sprintf("%v", nil) { dstRecord, err := is.cache.GetBlob(digest) if err != nil && !errors.Is(err, zerr.ErrCacheMiss) { - is.log.Error().Err(err).Str("blobPath", dstRecord).Msg("dedupe: failed to lookup blob record") + is.log.Error().Err(err).Str("blobPath", dstRecord).Str("component", "dedupe"). + Msg("failed to lookup blob record") return err } @@ -1651,7 +1661,8 @@ func (is *ImageStore) deleteBlob(repo string, digest godigest.Digest) error { // get next candidate dstRecord, err := is.cache.GetBlob(digest) if err != nil && !errors.Is(err, zerr.ErrCacheMiss) { - is.log.Error().Err(err).Str("blobPath", dstRecord).Msg("dedupe: failed to lookup blob record") + is.log.Error().Err(err).Str("blobPath", dstRecord).Str("component", "dedupe"). + Msg("failed to lookup blob record") return err } @@ -1662,14 +1673,16 @@ func (is *ImageStore) deleteBlob(repo string, digest godigest.Digest) error { (in case of filesystem, this should not be needed */ binfo, err := is.storeDriver.Stat(dstRecord) if err != nil { - is.log.Error().Err(err).Str("path", blobPath).Msg("rebuild dedupe: failed to stat blob") + is.log.Error().Err(err).Str("path", blobPath).Str("component", "dedupe"). + Msg("failed to stat blob") return err } if binfo.Size() == 0 { if err := is.storeDriver.Move(blobPath, dstRecord); err != nil { - is.log.Error().Err(err).Str("blobPath", blobPath).Msg("failed to remove blob path") + is.log.Error().Err(err).Str("blobPath", blobPath).Str("component", "dedupe"). + Msg("failed to remove blob path") return err } @@ -1787,7 +1800,7 @@ func (is *ImageStore) getOriginalBlobFromDisk(duplicateBlobs []string) (string, for _, blobPath := range duplicateBlobs { binfo, err := is.storeDriver.Stat(blobPath) if err != nil { - is.log.Error().Err(err).Str("path", blobPath).Msg("rebuild dedupe: failed to stat blob") + is.log.Error().Err(err).Str("path", blobPath).Str("component", "storage").Msg("failed to stat blob") return "", zerr.ErrBlobNotFound } @@ -1807,14 +1820,14 @@ func (is *ImageStore) getOriginalBlob(digest godigest.Digest, duplicateBlobs []s originalBlob, err = is.checkCacheBlob(digest) if err != nil && !errors.Is(err, zerr.ErrBlobNotFound) && !errors.Is(err, zerr.ErrCacheMiss) { - is.log.Error().Err(err).Msg("rebuild dedupe: failed to find blob in cache") + is.log.Error().Err(err).Str("component", "dedupe").Msg("failed to find blob in cache") return originalBlob, err } // if we still don't have, search it if originalBlob == "" { - is.log.Warn().Msg("rebuild dedupe: failed to find blob in cache, searching it in storage...") + is.log.Warn().Str("component", "dedupe").Msg("failed to find blob in cache, searching it in storage...") // a rebuild dedupe was attempted in the past // get original blob, should be found otherwise exit with error @@ -1824,7 +1837,7 @@ func (is *ImageStore) getOriginalBlob(digest godigest.Digest, duplicateBlobs []s } } - is.log.Info().Str("originalBlob", originalBlob).Msg("rebuild dedupe: found original blob") + is.log.Info().Str("originalBlob", originalBlob).Str("component", "dedupe").Msg("found original blob") return originalBlob, nil } @@ -1836,7 +1849,7 @@ func (is *ImageStore) dedupeBlobs(ctx context.Context, digest godigest.Digest, d return zerr.ErrDedupeRebuild } - is.log.Info().Str("digest", digest.String()).Msg("rebuild dedupe: deduping blobs for digest") + is.log.Info().Str("digest", digest.String()).Str("component", "dedupe").Msg("deduping blobs for digest") var originalBlob string @@ -1848,19 +1861,19 @@ func (is *ImageStore) dedupeBlobs(ctx context.Context, digest godigest.Digest, d binfo, err := is.storeDriver.Stat(blobPath) if err != nil { - is.log.Error().Err(err).Str("path", blobPath).Msg("rebuild dedupe: failed to stat blob") + is.log.Error().Err(err).Str("path", blobPath).Str("component", "dedupe").Msg("failed to stat blob") return err } if binfo.Size() == 0 { - is.log.Warn().Msg("rebuild dedupe: found file without content, trying to find the original blob") + is.log.Warn().Str("component", "dedupe").Msg("found file without content, trying to find the original blob") // a rebuild dedupe was attempted in the past // get original blob, should be found otherwise exit with error if originalBlob == "" { originalBlob, err = is.getOriginalBlob(digest, duplicateBlobs) if err != nil { - is.log.Error().Err(err).Msg("rebuild dedupe: failed to find original blob") + is.log.Error().Err(err).Str("component", "dedupe").Msg("failed to find original blob") return zerr.ErrDedupeRebuild } @@ -1883,7 +1896,7 @@ func (is *ImageStore) dedupeBlobs(ctx context.Context, digest godigest.Digest, d // if we have an original blob cached then we can safely dedupe the rest of them if originalBlob != "" { if err := is.storeDriver.Link(originalBlob, blobPath); err != nil { - is.log.Error().Err(err).Str("path", blobPath).Msg("rebuild dedupe: failed to dedupe blob") + is.log.Error().Err(err).Str("path", blobPath).Str("component", "dedupe").Msg("failed to dedupe blob") return err } @@ -1901,18 +1914,19 @@ func (is *ImageStore) dedupeBlobs(ctx context.Context, digest godigest.Digest, d } } - is.log.Info().Str("digest", digest.String()).Msg("rebuild dedupe: deduping blobs for digest finished successfully") + is.log.Info().Str("digest", digest.String()).Str("component", "dedupe"). + Msg("deduping blobs for digest finished successfully") return nil } func (is *ImageStore) restoreDedupedBlobs(ctx context.Context, digest godigest.Digest, duplicateBlobs []string) error { - is.log.Info().Str("digest", digest.String()).Msg("rebuild dedupe: restoring deduped blobs for digest") + is.log.Info().Str("digest", digest.String()).Str("component", "dedupe").Msg("restoring deduped blobs for digest") // first we need to find the original blob, either in cache or by checking each blob size originalBlob, err := is.getOriginalBlob(digest, duplicateBlobs) if err != nil { - is.log.Error().Err(err).Msg("rebuild dedupe: failed to find original blob") + is.log.Error().Err(err).Str("component", "dedupe").Msg("failed to find original blob") return zerr.ErrDedupeRebuild } @@ -1924,7 +1938,7 @@ func (is *ImageStore) restoreDedupedBlobs(ctx context.Context, digest godigest.D binfo, err := is.storeDriver.Stat(blobPath) if err != nil { - is.log.Error().Err(err).Str("path", blobPath).Msg("rebuild dedupe: failed to stat blob") + is.log.Error().Err(err).Str("path", blobPath).Str("component", "dedupe").Msg("failed to stat blob") return err } @@ -1934,7 +1948,8 @@ func (is *ImageStore) restoreDedupedBlobs(ctx context.Context, digest godigest.D // move content from original blob to deduped one buf, err := is.storeDriver.ReadFile(originalBlob) if err != nil { - is.log.Error().Err(err).Str("path", originalBlob).Msg("rebuild dedupe: failed to get original blob content") + is.log.Error().Err(err).Str("path", originalBlob).Str("component", "dedupe"). + Msg("failed to get original blob content") return err } @@ -1947,7 +1962,7 @@ func (is *ImageStore) restoreDedupedBlobs(ctx context.Context, digest godigest.D } is.log.Info().Str("digest", digest.String()). - Msg("rebuild dedupe: restoring deduped blobs for digest finished successfully") + Str("component", "dedupe").Msg("restoring deduped blobs for digest finished successfully") return nil } diff --git a/pkg/storage/local/local_test.go b/pkg/storage/local/local_test.go index 6f5ec1cc12..463184b393 100644 --- a/pkg/storage/local/local_test.go +++ b/pkg/storage/local/local_test.go @@ -2050,7 +2050,7 @@ func TestGarbageCollectForImageStore(t *testing.T) { data, err := os.ReadFile(logFile.Name()) So(err, ShouldBeNil) So(string(data), ShouldContainSubstring, - fmt.Sprintf("error while running GC for %s", path.Join(imgStore.RootDir(), repoName))) + fmt.Sprintf("failed to run GC for %s", path.Join(imgStore.RootDir(), repoName))) }) Convey("Garbage collect error - not enough permissions to access index.json", func() { @@ -2092,7 +2092,7 @@ func TestGarbageCollectForImageStore(t *testing.T) { data, err := os.ReadFile(logFile.Name()) So(err, ShouldBeNil) So(string(data), ShouldContainSubstring, - fmt.Sprintf("error while running GC for %s", path.Join(imgStore.RootDir(), repoName))) + fmt.Sprintf("failed to run GC for %s", path.Join(imgStore.RootDir(), repoName))) So(os.Chmod(path.Join(dir, repoName, "index.json"), 0o755), ShouldBeNil) }) diff --git a/pkg/storage/scrub_test.go b/pkg/storage/scrub_test.go index d2e20fd601..04ab86f4be 100644 --- a/pkg/storage/scrub_test.go +++ b/pkg/storage/scrub_test.go @@ -170,7 +170,7 @@ func RunCheckAllBlobsIntegrityTests( //nolint: thelper actual := strings.TrimSpace(str) So(actual, ShouldContainSubstring, "REPOSITORY TAG STATUS AFFECTED BLOB ERROR") // verify error message - So(actual, ShouldContainSubstring, fmt.Sprintf("test 1.0 affected %s blob: not found", manifestDig)) + So(actual, ShouldContainSubstring, fmt.Sprintf("test 1.0 affected %s blob not found", manifestDig)) index, err := common.GetIndex(imgStore, repoName, log) So(err, ShouldBeNil) @@ -180,7 +180,7 @@ func RunCheckAllBlobsIntegrityTests( //nolint: thelper imageRes := storage.CheckLayers(context.Background(), repoName, tag, manifestDescriptor, imgStore) So(imageRes.Status, ShouldEqual, "affected") - So(imageRes.Error, ShouldEqual, "blob: not found") + So(imageRes.Error, ShouldEqual, "blob not found") _, err = driver.WriteFile(manifestFile, []byte("invalid content")) So(err, ShouldBeNil) @@ -195,7 +195,7 @@ func RunCheckAllBlobsIntegrityTests( //nolint: thelper actual = strings.TrimSpace(str) So(actual, ShouldContainSubstring, "REPOSITORY TAG STATUS AFFECTED BLOB ERROR") // verify error message - So(actual, ShouldContainSubstring, fmt.Sprintf("test 1.0 affected %s manifest: invalid contents", manifestDig)) + So(actual, ShouldContainSubstring, fmt.Sprintf("test 1.0 affected %s invalid manifest contents", manifestDig)) index, err = common.GetIndex(imgStore, repoName, log) So(err, ShouldBeNil) @@ -205,7 +205,7 @@ func RunCheckAllBlobsIntegrityTests( //nolint: thelper imageRes = storage.CheckLayers(context.Background(), repoName, tag, manifestDescriptor, imgStore) So(imageRes.Status, ShouldEqual, "affected") - So(imageRes.Error, ShouldEqual, "manifest: invalid contents") + So(imageRes.Error, ShouldEqual, "invalid manifest contents") }) Convey("Config integrity affected", func() { @@ -235,7 +235,7 @@ func RunCheckAllBlobsIntegrityTests( //nolint: thelper str := space.ReplaceAllString(buff.String(), " ") actual := strings.TrimSpace(str) So(actual, ShouldContainSubstring, "REPOSITORY TAG STATUS AFFECTED BLOB ERROR") - So(actual, ShouldContainSubstring, fmt.Sprintf("test 1.0 affected %s blob: not found", configDig)) + So(actual, ShouldContainSubstring, fmt.Sprintf("test 1.0 affected %s blob not found", configDig)) _, err = driver.WriteFile(configFile, []byte("invalid content")) So(err, ShouldBeNil) @@ -249,7 +249,7 @@ func RunCheckAllBlobsIntegrityTests( //nolint: thelper str = space.ReplaceAllString(buff.String(), " ") actual = strings.TrimSpace(str) So(actual, ShouldContainSubstring, "REPOSITORY TAG STATUS AFFECTED BLOB ERROR") - So(actual, ShouldContainSubstring, fmt.Sprintf("test 1.0 affected %s config: invalid config", configDig)) + So(actual, ShouldContainSubstring, fmt.Sprintf("test 1.0 affected %s invalid server config", configDig)) }) Convey("Layers integrity affected", func() { @@ -279,7 +279,7 @@ func RunCheckAllBlobsIntegrityTests( //nolint: thelper str := space.ReplaceAllString(buff.String(), " ") actual := strings.TrimSpace(str) So(actual, ShouldContainSubstring, "REPOSITORY TAG STATUS AFFECTED BLOB ERROR") - So(actual, ShouldContainSubstring, fmt.Sprintf("test 1.0 affected %s blob: bad blob digest", layerDig)) + So(actual, ShouldContainSubstring, fmt.Sprintf("test 1.0 affected %s bad blob digest", layerDig)) }) Convey("Layer not found", func() { @@ -307,7 +307,7 @@ func RunCheckAllBlobsIntegrityTests( //nolint: thelper imageRes := storage.CheckLayers(context.Background(), repoName, tag, manifestDescriptor, imgStore) So(imageRes.Status, ShouldEqual, "affected") - So(imageRes.Error, ShouldEqual, "blob: not found") + So(imageRes.Error, ShouldEqual, "blob not found") buff := bytes.NewBufferString("") @@ -319,7 +319,7 @@ func RunCheckAllBlobsIntegrityTests( //nolint: thelper str := space.ReplaceAllString(buff.String(), " ") actual := strings.TrimSpace(str) So(actual, ShouldContainSubstring, "REPOSITORY TAG STATUS AFFECTED BLOB ERROR") - So(actual, ShouldContainSubstring, fmt.Sprintf("test 1.0 affected %s blob: not found", layerDig)) + So(actual, ShouldContainSubstring, fmt.Sprintf("test 1.0 affected %s blob not found", layerDig)) }) Convey("Scrub index", func() { @@ -487,7 +487,7 @@ func RunCheckAllBlobsIntegrityTests( //nolint: thelper str := space.ReplaceAllString(buff.String(), " ") actual := strings.TrimSpace(str) So(actual, ShouldContainSubstring, "REPOSITORY TAG STATUS AFFECTED BLOB ERROR") - So(actual, ShouldContainSubstring, fmt.Sprintf("test 1.0 affected %s blob: not found", manifestDig)) + So(actual, ShouldContainSubstring, fmt.Sprintf("test 1.0 affected %s blob not found", manifestDig)) index, err := common.GetIndex(imgStore, repoName, log) So(err, ShouldBeNil) @@ -497,7 +497,7 @@ func RunCheckAllBlobsIntegrityTests( //nolint: thelper imageRes := storage.CheckLayers(context.Background(), repoName, tag, manifestDescriptor, imgStore) So(imageRes.Status, ShouldEqual, "affected") - So(imageRes.Error, ShouldContainSubstring, "blob: not found") + So(imageRes.Error, ShouldContainSubstring, "blob not found") }) Convey("use the result of an already scrubed manifest which is the subject of the current manifest", func() { diff --git a/pkg/storage/storage.go b/pkg/storage/storage.go index 677e81676b..086a8385ee 100644 --- a/pkg/storage/storage.go +++ b/pkg/storage/storage.go @@ -28,7 +28,7 @@ func New(config *config.Config, linter common.Lint, metrics monitoring.MetricSer if config.Storage.RootDirectory == "" { // we can't proceed without global storage - log.Error().Err(zerr.ErrImgStoreNotFound).Msg("controller: no storage config provided") + log.Error().Err(zerr.ErrImgStoreNotFound).Str("component", "controller").Msg("no storage config provided") return storeController, zerr.ErrImgStoreNotFound } @@ -101,7 +101,7 @@ func New(config *config.Config, linter common.Lint, metrics monitoring.MetricSer //nolint: contextcheck subImageStore, err := getSubStore(config, subPaths, linter, metrics, log) if err != nil { - log.Error().Err(err).Msg("controller: error getting sub image store") + log.Error().Err(err).Str("component", "controller").Msg("error getting sub image store") return storeController, err } diff --git a/pkg/test/common/fs.go b/pkg/test/common/fs.go index fe7eb016e2..1cadeaa259 100644 --- a/pkg/test/common/fs.go +++ b/pkg/test/common/fs.go @@ -15,7 +15,7 @@ import ( "golang.org/x/crypto/bcrypt" ) -var ErrNoGoModFileFound = errors.New("test: no go.mod file found in parent directories") +var ErrNoGoModFileFound = errors.New("no go.mod file found in parent directories") func GetProjectRootDir() (string, error) { workDir, err := os.Getwd() diff --git a/scripts/check_logs.sh b/scripts/check_logs.sh new file mode 100755 index 0000000000..69e819252f --- /dev/null +++ b/scripts/check_logs.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +# Colors for terminal +if test -t 1; then + # check if it supports colors + ncolors=$(tput colors) + if test -n "$ncolors" && test $ncolors -ge 8; then + NC="$(tput sgr0)" # no color + RED="$(tput setaf 1)" # red + WHITE="$(tput setaf 7)" # white + fi +fi + +exception="(HTTP|OpenID|OAuth|TLS|API|ID)" + +function lintLogContainingUpperCase { + word_char="[\.-0-9a-z ]" + capital_word="([a-z]*[A-Z][a-zA-Z]*)" + + grep --with-filename -n -P "Msg[f]?\(\"(($word_char|$exception)*)(?!$exception)($capital_word)(.*)" $1 +} + +# lintLogStartingWithUpperCase searched for log messages that start with an upper case letter +function lintLogStartingWithUpperCase { + grep --with-filename -n "Msg[f]\?(\"[A-Z]" $1 | grep -v -E "Msg[f]?\(\"$exception" +} + +# lintLogStartingWithComponent searches for log messages that starts with a component "component:" +function lintLogStartingWithComponent { + # We'll check for different functions that can generate errors or logs. If they start with + # a number words followed by ":", it's considered as starting with a component. + # Examples: '.Msgf("component:")', '.Errorf("com ponent:")', '.Msg("com-ponent:")' + grep --with-filename -n -E "(Errorf|errors.New|Msg[f]?)\(\"[a-zA-Z-]+( [a-zA-Z-]+){0,1}:" $1 +} + +function printLintError { + errReason=$1 + errPathAndContent=$2 + + IFS=':' read -r errPath errLine errLineContent <<< "$errPathAndContent" + errLocation="$errPath:$errLine" + + if test -t 1; then + echo -e "${WHITE}$errLocation${NC}: ${RED}$errReason${NC}\n\t$errLineContent" + else + echo "$errLocation: $errReason: $errLineContent" + fi +} + +files=$(find . -name '*.go' | grep -v '_test.go') + +found_linting_error=false + +for file in $files +do + lintOutput=$(lintLogStartingWithUpperCase "$file") + if [ $? -eq 0 ]; then + found_linting_error=true + while IFS= read -r line; do + printLintError "Log message should not start with a CAPITAL letter" "$(echo $line | tr -s [:space:])" + done <<< "$lintOutput" + fi + + lintOutput=$(lintLogStartingWithComponent "$file") + if [ $? -eq 0 ]; then + found_linting_error=true + while IFS= read -r line; do + printLintError "Log message should not start with the component (ex: 'component:', 'mixed component-with-dash:')" \ + "$(echo $line | tr -s [:space:])" + done <<< "$lintOutput" + fi +done + +if [ $found_linting_error = true ]; then + exit 1 +fi + +exit 0