diff --git a/.github/workflows/golangci-lint.yaml b/.github/workflows/golangci-lint.yaml index d5045911d0..b296b117ae 100644 --- a/.github/workflows/golangci-lint.yaml +++ b/.github/workflows/golangci-lint.yaml @@ -48,10 +48,28 @@ jobs: - name: Run log linter run: | set +e + + function lintLogStartingWithUpperCase { + grep --with-filename -n "Msg[f]\?(\"[A-Z]" $1 | grep -v -E "Msg[f]?\(\"HTTP|OpenID|OAuth|TLS" + } - # 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 + # log messages should not start with component "component:" + function lintLogStartingWithComponent { + grep --with-filename -n -E "(Errorf|errors.New|Msg[f]?)\(\"[a-zA-Z-]+:" $1 + } + + files=$(find . -name '*.go' | grep -v '_test.go') + + for file in $files + do + lintLogStartingWithUpperCase "$file" + if [ $? -eq 0 ]; then + exit 1 + fi + lintLogStartingWithComponent "$file" + if [ $? -eq 0 ]; then + exit 1 + fi + done + exit 0 diff --git a/LINT.sh b/LINT.sh new file mode 100755 index 0000000000..83f0c9fadf --- /dev/null +++ b/LINT.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +function lintLogStartingWithUpperCase { + grep --with-filename -n "Msg[f]\?(\"[A-Z]" $1 | grep -v -E "Msg[f]?\(\"HTTP|OpenID|OAuth|TLS" +} + +# log messages should not start with component "component:" +function lintLogStartingWithComponent { + grep --with-filename -n -E "(Errorf|errors.New|Msg[f]?)\(\"[a-zA-Z-]+:" $1 +} + +files=$(find . -name '*.go' | grep -v '_test.go') + +for file in $files +do + lintLogStartingWithUpperCase "$file" + if [ $? -eq 0 ]; then + exit 1 + fi + lintLogStartingWithComponent "$file" + if [ $? -eq 0 ]; then + exit 1 + fi +done diff --git a/Makefile b/Makefile index 07ce9c1c6b..45ca98b7a6 100644 --- a/Makefile +++ b/Makefile @@ -310,6 +310,34 @@ $(GOLINTER): curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(TOOLSDIR)/bin $(GOLINTER_VERSION) $(GOLINTER) version +define lintLogStartingWithUpperCase + grep --with-filename -n "Msg[f]\?(\"[A-Z]" $(1) | grep -v -E "Msg[f]?\(\"HTTP|OpenID|OAuth|TLS" +endef + +define lintLogStartingWithComponent + grep --with-filename -n -E "(errors.New|Msg[f]?)\(\"[a-zA-Z-]+:" $(1) +endef + +GO_FILES=$(shell find . -name '*.go' | grep -v '_test.go') +found_failure="false" + +.PHONY: check-logs +check-logs: + echo "START: $(found_failure)" + @for file in $(GO_FILES); do \ + $(call lintLogStartingWithUpperCase,$$file); \ + if [ $$? -eq 0 ]; then \ + $(eval found_failure="true") \ + echo "MID: $(found_failure)"; \ + fi; \ + done; \ + echo "End: $(found_failure)"; \ + if [ $(found_failure) = "true" ]; then \ + exit 1; \ + else \ + exit 0; \ + fi + .PHONY: check check: $(if $(findstring ui,$(BUILD_LABELS)), ui) check: ./golangcilint.yaml $(GOLINTER) diff --git a/errors/errors.go b/errors/errors.go index 433743528d..d2e307db38 100644 --- a/errors/errors.go +++ b/errors/errors.go @@ -46,125 +46,123 @@ 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") - 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 in argument 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("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("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 of image media type not supported") + 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") + ErrBadLayerCount = errors.New("manifest layers count doesn't correspond to config history") + ErrManifestConflict = errors.New("multiple manifests found") + ErrManifestMetaNotFound = errors.New("image metadata not found for given manifest reference") + 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("resolver requiest 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") + 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 [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") + 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("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, not continuing") 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") - 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("sync 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") ) 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/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 2aaad3418e..676589f083 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..78eba98d18 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 diff --git a/pkg/extensions/extension_mgmt.go b/pkg/extensions/extension_mgmt.go index e86cdc2144..2bc851cb9d 100644 --- a/pkg/extensions/extension_mgmt.go +++ b/pkg/extensions/extension_mgmt.go @@ -122,7 +122,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 abb91dafb7..40ce94dbc2 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 d436b05520..ec03e6c911 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/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..a08fd64fbb 100644 --- a/pkg/extensions/scrub/scrub.go +++ b/pkg/extensions/scrub/scrub.go @@ -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..304d6a9c02 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) { 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 ab5f46c4a2..62d1bc9a65 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/resolver.go b/pkg/extensions/search/resolver.go index a8ca67726d..6a576ee27a 100644 --- a/pkg/extensions/search/resolver.go +++ b/pkg/extensions/search/resolver.go @@ -740,7 +740,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 @@ -841,7 +841,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 @@ -913,7 +913,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) } @@ -937,14 +937,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) } } @@ -958,12 +958,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) } @@ -1031,14 +1031,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 } @@ -1055,7 +1057,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 } @@ -1156,9 +1159,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/search_test.go b/pkg/extensions/search/search_test.go index 12b48844d4..d8b43b1add 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) }) @@ -6055,7 +6055,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/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/meta/boltdb/boltdb.go b/pkg/meta/boltdb/boltdb.go index 36bb179cb0..51aef1f608 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("error while calculating 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("error while setting 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("error while parsing 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) } @@ -1811,7 +1811,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("error while setting userData for identity %s %w", userid, err) } err = bdw.getUserData(userid, transaction, &userData) @@ -1864,7 +1864,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("error while deleting userAPIKey entry for hash %s %w", hash, err) } } } @@ -1969,7 +1969,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("error while setting userData for identity %s %w", userid, err) } return nil @@ -1995,7 +1995,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("error while deleting userData for identity %s %w", userid, err) } return nil diff --git a/pkg/meta/dynamodb/dynamodb.go b/pkg/meta/dynamodb/dynamodb.go index a54bcd1358..2572014c90 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("error while parsing 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)) @@ -1722,7 +1722,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("error while getting userData for identity %s %w", userid, err) } for hashedKey, apiKeyDetails := range userData.APIKeys { @@ -1758,7 +1758,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("error while getting userData for identity %s %w", userid, err) } if userData.APIKeys == nil { @@ -1819,7 +1819,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("error while getting userData %w", err) } for hash, apiKeyDetails := range userData.APIKeys { @@ -1833,7 +1833,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("error while deleting 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..1987a22453 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("error while restoring 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 457577b974..408630e4e0 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("error while getting image data") 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(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 verify signatures 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("error while setting repo meta") return err } diff --git a/pkg/storage/common/common.go b/pkg/storage/common/common.go index 31bc12fb40..4a8efe0d94 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 } @@ -1128,7 +1128,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 0dace3d7b9..07d9ac73e2 100644 --- a/pkg/storage/gc/gc.go +++ b/pkg/storage/gc/gc.go @@ -427,14 +427,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 578f69332e..eea48af862 100644 --- a/pkg/storage/imagestore/imagestore.go +++ b/pkg/storage/imagestore/imagestore.go @@ -1011,11 +1011,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 } @@ -1023,19 +1023,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 @@ -1045,12 +1047,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 } @@ -1061,13 +1064,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 } @@ -1077,12 +1082,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 } @@ -1091,12 +1097,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 @@ -1187,7 +1194,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 } @@ -1268,7 +1275,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 } @@ -1283,7 +1291,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 } @@ -1630,7 +1639,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 } @@ -1650,7 +1660,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 } @@ -1661,14 +1672,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 } diff --git a/pkg/storage/scrub_test.go b/pkg/storage/scrub_test.go index 80d403af00..4b7b005d77 100644 --- a/pkg/storage/scrub_test.go +++ b/pkg/storage/scrub_test.go @@ -154,7 +154,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) @@ -164,7 +164,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) @@ -179,7 +179,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 manifest invalid contents", manifestDig)) index, err = common.GetIndex(imgStore, repoName, log) So(err, ShouldBeNil) @@ -189,7 +189,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, "manifest invalid contents") }) Convey("Config integrity affected", func() { @@ -219,7 +219,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) @@ -233,7 +233,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() { @@ -263,7 +263,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() { @@ -291,7 +291,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("") @@ -303,7 +303,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() { @@ -455,7 +455,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) @@ -465,7 +465,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()