diff --git a/cmd/api-errors.go b/cmd/api-errors.go index 7b570be6e..aebae1a4d 100644 --- a/cmd/api-errors.go +++ b/cmd/api-errors.go @@ -184,6 +184,7 @@ const ( ErrBucketAlreadyExists ErrMetadataTooLarge ErrUnsupportedMetadata + ErrUnsupportedHostHeader ErrMaximumExpires ErrSlowDownRead ErrSlowDownWrite @@ -1442,6 +1443,11 @@ var errorCodes = errorCodeMap{ Description: "Your metadata headers are not supported.", HTTPStatusCode: http.StatusBadRequest, }, + ErrUnsupportedHostHeader: { + Code: "InvalidArgument", + Description: "Your Host header is malformed.", + HTTPStatusCode: http.StatusBadRequest, + }, ErrObjectTampered: { Code: "XMinioObjectTampered", Description: errObjectTampered.Error(), diff --git a/cmd/apierrorcode_string.go b/cmd/apierrorcode_string.go index ae4b338a7..e974ca755 100644 --- a/cmd/apierrorcode_string.go +++ b/cmd/apierrorcode_string.go @@ -115,219 +115,220 @@ func _() { _ = x[ErrBucketAlreadyExists-104] _ = x[ErrMetadataTooLarge-105] _ = x[ErrUnsupportedMetadata-106] - _ = x[ErrMaximumExpires-107] - _ = x[ErrSlowDownRead-108] - _ = x[ErrSlowDownWrite-109] - _ = x[ErrInvalidPrefixMarker-110] - _ = x[ErrBadRequest-111] - _ = x[ErrKeyTooLongError-112] - _ = x[ErrInvalidBucketObjectLockConfiguration-113] - _ = x[ErrObjectLockConfigurationNotFound-114] - _ = x[ErrObjectLockConfigurationNotAllowed-115] - _ = x[ErrNoSuchObjectLockConfiguration-116] - _ = x[ErrObjectLocked-117] - _ = x[ErrInvalidRetentionDate-118] - _ = x[ErrPastObjectLockRetainDate-119] - _ = x[ErrUnknownWORMModeDirective-120] - _ = x[ErrBucketTaggingNotFound-121] - _ = x[ErrObjectLockInvalidHeaders-122] - _ = x[ErrInvalidTagDirective-123] - _ = x[ErrPolicyAlreadyAttached-124] - _ = x[ErrPolicyNotAttached-125] - _ = x[ErrExcessData-126] - _ = x[ErrInvalidEncryptionMethod-127] - _ = x[ErrInvalidEncryptionKeyID-128] - _ = x[ErrInsecureSSECustomerRequest-129] - _ = x[ErrSSEMultipartEncrypted-130] - _ = x[ErrSSEEncryptedObject-131] - _ = x[ErrInvalidEncryptionParameters-132] - _ = x[ErrInvalidEncryptionParametersSSEC-133] - _ = x[ErrInvalidSSECustomerAlgorithm-134] - _ = x[ErrInvalidSSECustomerKey-135] - _ = x[ErrMissingSSECustomerKey-136] - _ = x[ErrMissingSSECustomerKeyMD5-137] - _ = x[ErrSSECustomerKeyMD5Mismatch-138] - _ = x[ErrInvalidSSECustomerParameters-139] - _ = x[ErrIncompatibleEncryptionMethod-140] - _ = x[ErrKMSNotConfigured-141] - _ = x[ErrKMSKeyNotFoundException-142] - _ = x[ErrKMSDefaultKeyAlreadyConfigured-143] - _ = x[ErrNoAccessKey-144] - _ = x[ErrInvalidToken-145] - _ = x[ErrEventNotification-146] - _ = x[ErrARNNotification-147] - _ = x[ErrRegionNotification-148] - _ = x[ErrOverlappingFilterNotification-149] - _ = x[ErrFilterNameInvalid-150] - _ = x[ErrFilterNamePrefix-151] - _ = x[ErrFilterNameSuffix-152] - _ = x[ErrFilterValueInvalid-153] - _ = x[ErrOverlappingConfigs-154] - _ = x[ErrUnsupportedNotification-155] - _ = x[ErrContentSHA256Mismatch-156] - _ = x[ErrContentChecksumMismatch-157] - _ = x[ErrStorageFull-158] - _ = x[ErrRequestBodyParse-159] - _ = x[ErrObjectExistsAsDirectory-160] - _ = x[ErrInvalidObjectName-161] - _ = x[ErrInvalidObjectNamePrefixSlash-162] - _ = x[ErrInvalidResourceName-163] - _ = x[ErrInvalidLifecycleQueryParameter-164] - _ = x[ErrServerNotInitialized-165] - _ = x[ErrRequestTimedout-166] - _ = x[ErrClientDisconnected-167] - _ = x[ErrTooManyRequests-168] - _ = x[ErrInvalidRequest-169] - _ = x[ErrTransitionStorageClassNotFoundError-170] - _ = x[ErrInvalidStorageClass-171] - _ = x[ErrBackendDown-172] - _ = x[ErrMalformedJSON-173] - _ = x[ErrAdminNoSuchUser-174] - _ = x[ErrAdminNoSuchUserLDAPWarn-175] - _ = x[ErrAdminNoSuchGroup-176] - _ = x[ErrAdminGroupNotEmpty-177] - _ = x[ErrAdminGroupDisabled-178] - _ = x[ErrAdminNoSuchJob-179] - _ = x[ErrAdminNoSuchPolicy-180] - _ = x[ErrAdminPolicyChangeAlreadyApplied-181] - _ = x[ErrAdminInvalidArgument-182] - _ = x[ErrAdminInvalidAccessKey-183] - _ = x[ErrAdminInvalidSecretKey-184] - _ = x[ErrAdminConfigNoQuorum-185] - _ = x[ErrAdminConfigTooLarge-186] - _ = x[ErrAdminConfigBadJSON-187] - _ = x[ErrAdminNoSuchConfigTarget-188] - _ = x[ErrAdminConfigEnvOverridden-189] - _ = x[ErrAdminConfigDuplicateKeys-190] - _ = x[ErrAdminConfigInvalidIDPType-191] - _ = x[ErrAdminConfigLDAPNonDefaultConfigName-192] - _ = x[ErrAdminConfigLDAPValidation-193] - _ = x[ErrAdminConfigIDPCfgNameAlreadyExists-194] - _ = x[ErrAdminConfigIDPCfgNameDoesNotExist-195] - _ = x[ErrAdminCredentialsMismatch-196] - _ = x[ErrInsecureClientRequest-197] - _ = x[ErrObjectTampered-198] - _ = x[ErrSiteReplicationInvalidRequest-199] - _ = x[ErrSiteReplicationPeerResp-200] - _ = x[ErrSiteReplicationBackendIssue-201] - _ = x[ErrSiteReplicationServiceAccountError-202] - _ = x[ErrSiteReplicationBucketConfigError-203] - _ = x[ErrSiteReplicationBucketMetaError-204] - _ = x[ErrSiteReplicationIAMError-205] - _ = x[ErrSiteReplicationConfigMissing-206] - _ = x[ErrAdminRebalanceAlreadyStarted-207] - _ = x[ErrAdminRebalanceNotStarted-208] - _ = x[ErrAdminBucketQuotaExceeded-209] - _ = x[ErrAdminNoSuchQuotaConfiguration-210] - _ = x[ErrHealNotImplemented-211] - _ = x[ErrHealNoSuchProcess-212] - _ = x[ErrHealInvalidClientToken-213] - _ = x[ErrHealMissingBucket-214] - _ = x[ErrHealAlreadyRunning-215] - _ = x[ErrHealOverlappingPaths-216] - _ = x[ErrIncorrectContinuationToken-217] - _ = x[ErrEmptyRequestBody-218] - _ = x[ErrUnsupportedFunction-219] - _ = x[ErrInvalidExpressionType-220] - _ = x[ErrBusy-221] - _ = x[ErrUnauthorizedAccess-222] - _ = x[ErrExpressionTooLong-223] - _ = x[ErrIllegalSQLFunctionArgument-224] - _ = x[ErrInvalidKeyPath-225] - _ = x[ErrInvalidCompressionFormat-226] - _ = x[ErrInvalidFileHeaderInfo-227] - _ = x[ErrInvalidJSONType-228] - _ = x[ErrInvalidQuoteFields-229] - _ = x[ErrInvalidRequestParameter-230] - _ = x[ErrInvalidDataType-231] - _ = x[ErrInvalidTextEncoding-232] - _ = x[ErrInvalidDataSource-233] - _ = x[ErrInvalidTableAlias-234] - _ = x[ErrMissingRequiredParameter-235] - _ = x[ErrObjectSerializationConflict-236] - _ = x[ErrUnsupportedSQLOperation-237] - _ = x[ErrUnsupportedSQLStructure-238] - _ = x[ErrUnsupportedSyntax-239] - _ = x[ErrUnsupportedRangeHeader-240] - _ = x[ErrLexerInvalidChar-241] - _ = x[ErrLexerInvalidOperator-242] - _ = x[ErrLexerInvalidLiteral-243] - _ = x[ErrLexerInvalidIONLiteral-244] - _ = x[ErrParseExpectedDatePart-245] - _ = x[ErrParseExpectedKeyword-246] - _ = x[ErrParseExpectedTokenType-247] - _ = x[ErrParseExpected2TokenTypes-248] - _ = x[ErrParseExpectedNumber-249] - _ = x[ErrParseExpectedRightParenBuiltinFunctionCall-250] - _ = x[ErrParseExpectedTypeName-251] - _ = x[ErrParseExpectedWhenClause-252] - _ = x[ErrParseUnsupportedToken-253] - _ = x[ErrParseUnsupportedLiteralsGroupBy-254] - _ = x[ErrParseExpectedMember-255] - _ = x[ErrParseUnsupportedSelect-256] - _ = x[ErrParseUnsupportedCase-257] - _ = x[ErrParseUnsupportedCaseClause-258] - _ = x[ErrParseUnsupportedAlias-259] - _ = x[ErrParseUnsupportedSyntax-260] - _ = x[ErrParseUnknownOperator-261] - _ = x[ErrParseMissingIdentAfterAt-262] - _ = x[ErrParseUnexpectedOperator-263] - _ = x[ErrParseUnexpectedTerm-264] - _ = x[ErrParseUnexpectedToken-265] - _ = x[ErrParseUnexpectedKeyword-266] - _ = x[ErrParseExpectedExpression-267] - _ = x[ErrParseExpectedLeftParenAfterCast-268] - _ = x[ErrParseExpectedLeftParenValueConstructor-269] - _ = x[ErrParseExpectedLeftParenBuiltinFunctionCall-270] - _ = x[ErrParseExpectedArgumentDelimiter-271] - _ = x[ErrParseCastArity-272] - _ = x[ErrParseInvalidTypeParam-273] - _ = x[ErrParseEmptySelect-274] - _ = x[ErrParseSelectMissingFrom-275] - _ = x[ErrParseExpectedIdentForGroupName-276] - _ = x[ErrParseExpectedIdentForAlias-277] - _ = x[ErrParseUnsupportedCallWithStar-278] - _ = x[ErrParseNonUnaryAgregateFunctionCall-279] - _ = x[ErrParseMalformedJoin-280] - _ = x[ErrParseExpectedIdentForAt-281] - _ = x[ErrParseAsteriskIsNotAloneInSelectList-282] - _ = x[ErrParseCannotMixSqbAndWildcardInSelectList-283] - _ = x[ErrParseInvalidContextForWildcardInSelectList-284] - _ = x[ErrIncorrectSQLFunctionArgumentType-285] - _ = x[ErrValueParseFailure-286] - _ = x[ErrEvaluatorInvalidArguments-287] - _ = x[ErrIntegerOverflow-288] - _ = x[ErrLikeInvalidInputs-289] - _ = x[ErrCastFailed-290] - _ = x[ErrInvalidCast-291] - _ = x[ErrEvaluatorInvalidTimestampFormatPattern-292] - _ = x[ErrEvaluatorInvalidTimestampFormatPatternSymbolForParsing-293] - _ = x[ErrEvaluatorTimestampFormatPatternDuplicateFields-294] - _ = x[ErrEvaluatorTimestampFormatPatternHourClockAmPmMismatch-295] - _ = x[ErrEvaluatorUnterminatedTimestampFormatPatternToken-296] - _ = x[ErrEvaluatorInvalidTimestampFormatPatternToken-297] - _ = x[ErrEvaluatorInvalidTimestampFormatPatternSymbol-298] - _ = x[ErrEvaluatorBindingDoesNotExist-299] - _ = x[ErrMissingHeaders-300] - _ = x[ErrInvalidColumnIndex-301] - _ = x[ErrAdminConfigNotificationTargetsFailed-302] - _ = x[ErrAdminProfilerNotEnabled-303] - _ = x[ErrInvalidDecompressedSize-304] - _ = x[ErrAddUserInvalidArgument-305] - _ = x[ErrAdminResourceInvalidArgument-306] - _ = x[ErrAdminAccountNotEligible-307] - _ = x[ErrAccountNotEligible-308] - _ = x[ErrAdminServiceAccountNotFound-309] - _ = x[ErrPostPolicyConditionInvalidFormat-310] - _ = x[ErrInvalidChecksum-311] - _ = x[ErrLambdaARNInvalid-312] - _ = x[ErrLambdaARNNotFound-313] - _ = x[apiErrCodeEnd-314] + _ = x[ErrUnsupportedHostHeader-107] + _ = x[ErrMaximumExpires-108] + _ = x[ErrSlowDownRead-109] + _ = x[ErrSlowDownWrite-110] + _ = x[ErrInvalidPrefixMarker-111] + _ = x[ErrBadRequest-112] + _ = x[ErrKeyTooLongError-113] + _ = x[ErrInvalidBucketObjectLockConfiguration-114] + _ = x[ErrObjectLockConfigurationNotFound-115] + _ = x[ErrObjectLockConfigurationNotAllowed-116] + _ = x[ErrNoSuchObjectLockConfiguration-117] + _ = x[ErrObjectLocked-118] + _ = x[ErrInvalidRetentionDate-119] + _ = x[ErrPastObjectLockRetainDate-120] + _ = x[ErrUnknownWORMModeDirective-121] + _ = x[ErrBucketTaggingNotFound-122] + _ = x[ErrObjectLockInvalidHeaders-123] + _ = x[ErrInvalidTagDirective-124] + _ = x[ErrPolicyAlreadyAttached-125] + _ = x[ErrPolicyNotAttached-126] + _ = x[ErrExcessData-127] + _ = x[ErrInvalidEncryptionMethod-128] + _ = x[ErrInvalidEncryptionKeyID-129] + _ = x[ErrInsecureSSECustomerRequest-130] + _ = x[ErrSSEMultipartEncrypted-131] + _ = x[ErrSSEEncryptedObject-132] + _ = x[ErrInvalidEncryptionParameters-133] + _ = x[ErrInvalidEncryptionParametersSSEC-134] + _ = x[ErrInvalidSSECustomerAlgorithm-135] + _ = x[ErrInvalidSSECustomerKey-136] + _ = x[ErrMissingSSECustomerKey-137] + _ = x[ErrMissingSSECustomerKeyMD5-138] + _ = x[ErrSSECustomerKeyMD5Mismatch-139] + _ = x[ErrInvalidSSECustomerParameters-140] + _ = x[ErrIncompatibleEncryptionMethod-141] + _ = x[ErrKMSNotConfigured-142] + _ = x[ErrKMSKeyNotFoundException-143] + _ = x[ErrKMSDefaultKeyAlreadyConfigured-144] + _ = x[ErrNoAccessKey-145] + _ = x[ErrInvalidToken-146] + _ = x[ErrEventNotification-147] + _ = x[ErrARNNotification-148] + _ = x[ErrRegionNotification-149] + _ = x[ErrOverlappingFilterNotification-150] + _ = x[ErrFilterNameInvalid-151] + _ = x[ErrFilterNamePrefix-152] + _ = x[ErrFilterNameSuffix-153] + _ = x[ErrFilterValueInvalid-154] + _ = x[ErrOverlappingConfigs-155] + _ = x[ErrUnsupportedNotification-156] + _ = x[ErrContentSHA256Mismatch-157] + _ = x[ErrContentChecksumMismatch-158] + _ = x[ErrStorageFull-159] + _ = x[ErrRequestBodyParse-160] + _ = x[ErrObjectExistsAsDirectory-161] + _ = x[ErrInvalidObjectName-162] + _ = x[ErrInvalidObjectNamePrefixSlash-163] + _ = x[ErrInvalidResourceName-164] + _ = x[ErrInvalidLifecycleQueryParameter-165] + _ = x[ErrServerNotInitialized-166] + _ = x[ErrRequestTimedout-167] + _ = x[ErrClientDisconnected-168] + _ = x[ErrTooManyRequests-169] + _ = x[ErrInvalidRequest-170] + _ = x[ErrTransitionStorageClassNotFoundError-171] + _ = x[ErrInvalidStorageClass-172] + _ = x[ErrBackendDown-173] + _ = x[ErrMalformedJSON-174] + _ = x[ErrAdminNoSuchUser-175] + _ = x[ErrAdminNoSuchUserLDAPWarn-176] + _ = x[ErrAdminNoSuchGroup-177] + _ = x[ErrAdminGroupNotEmpty-178] + _ = x[ErrAdminGroupDisabled-179] + _ = x[ErrAdminNoSuchJob-180] + _ = x[ErrAdminNoSuchPolicy-181] + _ = x[ErrAdminPolicyChangeAlreadyApplied-182] + _ = x[ErrAdminInvalidArgument-183] + _ = x[ErrAdminInvalidAccessKey-184] + _ = x[ErrAdminInvalidSecretKey-185] + _ = x[ErrAdminConfigNoQuorum-186] + _ = x[ErrAdminConfigTooLarge-187] + _ = x[ErrAdminConfigBadJSON-188] + _ = x[ErrAdminNoSuchConfigTarget-189] + _ = x[ErrAdminConfigEnvOverridden-190] + _ = x[ErrAdminConfigDuplicateKeys-191] + _ = x[ErrAdminConfigInvalidIDPType-192] + _ = x[ErrAdminConfigLDAPNonDefaultConfigName-193] + _ = x[ErrAdminConfigLDAPValidation-194] + _ = x[ErrAdminConfigIDPCfgNameAlreadyExists-195] + _ = x[ErrAdminConfigIDPCfgNameDoesNotExist-196] + _ = x[ErrAdminCredentialsMismatch-197] + _ = x[ErrInsecureClientRequest-198] + _ = x[ErrObjectTampered-199] + _ = x[ErrSiteReplicationInvalidRequest-200] + _ = x[ErrSiteReplicationPeerResp-201] + _ = x[ErrSiteReplicationBackendIssue-202] + _ = x[ErrSiteReplicationServiceAccountError-203] + _ = x[ErrSiteReplicationBucketConfigError-204] + _ = x[ErrSiteReplicationBucketMetaError-205] + _ = x[ErrSiteReplicationIAMError-206] + _ = x[ErrSiteReplicationConfigMissing-207] + _ = x[ErrAdminRebalanceAlreadyStarted-208] + _ = x[ErrAdminRebalanceNotStarted-209] + _ = x[ErrAdminBucketQuotaExceeded-210] + _ = x[ErrAdminNoSuchQuotaConfiguration-211] + _ = x[ErrHealNotImplemented-212] + _ = x[ErrHealNoSuchProcess-213] + _ = x[ErrHealInvalidClientToken-214] + _ = x[ErrHealMissingBucket-215] + _ = x[ErrHealAlreadyRunning-216] + _ = x[ErrHealOverlappingPaths-217] + _ = x[ErrIncorrectContinuationToken-218] + _ = x[ErrEmptyRequestBody-219] + _ = x[ErrUnsupportedFunction-220] + _ = x[ErrInvalidExpressionType-221] + _ = x[ErrBusy-222] + _ = x[ErrUnauthorizedAccess-223] + _ = x[ErrExpressionTooLong-224] + _ = x[ErrIllegalSQLFunctionArgument-225] + _ = x[ErrInvalidKeyPath-226] + _ = x[ErrInvalidCompressionFormat-227] + _ = x[ErrInvalidFileHeaderInfo-228] + _ = x[ErrInvalidJSONType-229] + _ = x[ErrInvalidQuoteFields-230] + _ = x[ErrInvalidRequestParameter-231] + _ = x[ErrInvalidDataType-232] + _ = x[ErrInvalidTextEncoding-233] + _ = x[ErrInvalidDataSource-234] + _ = x[ErrInvalidTableAlias-235] + _ = x[ErrMissingRequiredParameter-236] + _ = x[ErrObjectSerializationConflict-237] + _ = x[ErrUnsupportedSQLOperation-238] + _ = x[ErrUnsupportedSQLStructure-239] + _ = x[ErrUnsupportedSyntax-240] + _ = x[ErrUnsupportedRangeHeader-241] + _ = x[ErrLexerInvalidChar-242] + _ = x[ErrLexerInvalidOperator-243] + _ = x[ErrLexerInvalidLiteral-244] + _ = x[ErrLexerInvalidIONLiteral-245] + _ = x[ErrParseExpectedDatePart-246] + _ = x[ErrParseExpectedKeyword-247] + _ = x[ErrParseExpectedTokenType-248] + _ = x[ErrParseExpected2TokenTypes-249] + _ = x[ErrParseExpectedNumber-250] + _ = x[ErrParseExpectedRightParenBuiltinFunctionCall-251] + _ = x[ErrParseExpectedTypeName-252] + _ = x[ErrParseExpectedWhenClause-253] + _ = x[ErrParseUnsupportedToken-254] + _ = x[ErrParseUnsupportedLiteralsGroupBy-255] + _ = x[ErrParseExpectedMember-256] + _ = x[ErrParseUnsupportedSelect-257] + _ = x[ErrParseUnsupportedCase-258] + _ = x[ErrParseUnsupportedCaseClause-259] + _ = x[ErrParseUnsupportedAlias-260] + _ = x[ErrParseUnsupportedSyntax-261] + _ = x[ErrParseUnknownOperator-262] + _ = x[ErrParseMissingIdentAfterAt-263] + _ = x[ErrParseUnexpectedOperator-264] + _ = x[ErrParseUnexpectedTerm-265] + _ = x[ErrParseUnexpectedToken-266] + _ = x[ErrParseUnexpectedKeyword-267] + _ = x[ErrParseExpectedExpression-268] + _ = x[ErrParseExpectedLeftParenAfterCast-269] + _ = x[ErrParseExpectedLeftParenValueConstructor-270] + _ = x[ErrParseExpectedLeftParenBuiltinFunctionCall-271] + _ = x[ErrParseExpectedArgumentDelimiter-272] + _ = x[ErrParseCastArity-273] + _ = x[ErrParseInvalidTypeParam-274] + _ = x[ErrParseEmptySelect-275] + _ = x[ErrParseSelectMissingFrom-276] + _ = x[ErrParseExpectedIdentForGroupName-277] + _ = x[ErrParseExpectedIdentForAlias-278] + _ = x[ErrParseUnsupportedCallWithStar-279] + _ = x[ErrParseNonUnaryAgregateFunctionCall-280] + _ = x[ErrParseMalformedJoin-281] + _ = x[ErrParseExpectedIdentForAt-282] + _ = x[ErrParseAsteriskIsNotAloneInSelectList-283] + _ = x[ErrParseCannotMixSqbAndWildcardInSelectList-284] + _ = x[ErrParseInvalidContextForWildcardInSelectList-285] + _ = x[ErrIncorrectSQLFunctionArgumentType-286] + _ = x[ErrValueParseFailure-287] + _ = x[ErrEvaluatorInvalidArguments-288] + _ = x[ErrIntegerOverflow-289] + _ = x[ErrLikeInvalidInputs-290] + _ = x[ErrCastFailed-291] + _ = x[ErrInvalidCast-292] + _ = x[ErrEvaluatorInvalidTimestampFormatPattern-293] + _ = x[ErrEvaluatorInvalidTimestampFormatPatternSymbolForParsing-294] + _ = x[ErrEvaluatorTimestampFormatPatternDuplicateFields-295] + _ = x[ErrEvaluatorTimestampFormatPatternHourClockAmPmMismatch-296] + _ = x[ErrEvaluatorUnterminatedTimestampFormatPatternToken-297] + _ = x[ErrEvaluatorInvalidTimestampFormatPatternToken-298] + _ = x[ErrEvaluatorInvalidTimestampFormatPatternSymbol-299] + _ = x[ErrEvaluatorBindingDoesNotExist-300] + _ = x[ErrMissingHeaders-301] + _ = x[ErrInvalidColumnIndex-302] + _ = x[ErrAdminConfigNotificationTargetsFailed-303] + _ = x[ErrAdminProfilerNotEnabled-304] + _ = x[ErrInvalidDecompressedSize-305] + _ = x[ErrAddUserInvalidArgument-306] + _ = x[ErrAdminResourceInvalidArgument-307] + _ = x[ErrAdminAccountNotEligible-308] + _ = x[ErrAccountNotEligible-309] + _ = x[ErrAdminServiceAccountNotFound-310] + _ = x[ErrPostPolicyConditionInvalidFormat-311] + _ = x[ErrInvalidChecksum-312] + _ = x[ErrLambdaARNInvalid-313] + _ = x[ErrLambdaARNNotFound-314] + _ = x[apiErrCodeEnd-315] } -const _APIErrorCode_name = "NoneAccessDeniedBadDigestEntityTooSmallEntityTooLargePolicyTooLargeIncompleteBodyInternalErrorInvalidAccessKeyIDAccessKeyDisabledInvalidArgumentInvalidBucketNameInvalidDigestInvalidRangeInvalidRangePartNumberInvalidCopyPartRangeInvalidCopyPartRangeSourceInvalidMaxKeysInvalidEncodingMethodInvalidMaxUploadsInvalidMaxPartsInvalidPartNumberMarkerInvalidPartNumberInvalidRequestBodyInvalidCopySourceInvalidMetadataDirectiveInvalidCopyDestInvalidPolicyDocumentInvalidObjectStateMalformedXMLMissingContentLengthMissingContentMD5MissingRequestBodyErrorMissingSecurityHeaderNoSuchBucketNoSuchBucketPolicyNoSuchBucketLifecycleNoSuchLifecycleConfigurationInvalidLifecycleWithObjectLockNoSuchBucketSSEConfigNoSuchCORSConfigurationNoSuchWebsiteConfigurationReplicationConfigurationNotFoundErrorRemoteDestinationNotFoundErrorReplicationDestinationMissingLockRemoteTargetNotFoundErrorReplicationRemoteConnectionErrorReplicationBandwidthLimitErrorBucketRemoteIdenticalToSourceBucketRemoteAlreadyExistsBucketRemoteLabelInUseBucketRemoteArnTypeInvalidBucketRemoteArnInvalidBucketRemoteRemoveDisallowedRemoteTargetNotVersionedErrorReplicationSourceNotVersionedErrorReplicationNeedsVersioningErrorReplicationBucketNeedsVersioningErrorReplicationDenyEditErrorRemoteTargetDenyAddErrorReplicationNoExistingObjectsObjectRestoreAlreadyInProgressNoSuchKeyNoSuchUploadInvalidVersionIDNoSuchVersionNotImplementedPreconditionFailedRequestTimeTooSkewedSignatureDoesNotMatchMethodNotAllowedInvalidPartInvalidPartOrderMissingPartAuthorizationHeaderMalformedMalformedPOSTRequestPOSTFileRequiredSignatureVersionNotSupportedBucketNotEmptyAllAccessDisabledPolicyInvalidVersionMissingFieldsMissingCredTagCredMalformedInvalidRegionInvalidServiceS3InvalidServiceSTSInvalidRequestVersionMissingSignTagMissingSignHeadersTagMalformedDateMalformedPresignedDateMalformedCredentialDateMalformedExpiresNegativeExpiresAuthHeaderEmptyExpiredPresignRequestRequestNotReadyYetUnsignedHeadersMissingDateHeaderInvalidQuerySignatureAlgoInvalidQueryParamsBucketAlreadyOwnedByYouInvalidDurationBucketAlreadyExistsMetadataTooLargeUnsupportedMetadataMaximumExpiresSlowDownReadSlowDownWriteInvalidPrefixMarkerBadRequestKeyTooLongErrorInvalidBucketObjectLockConfigurationObjectLockConfigurationNotFoundObjectLockConfigurationNotAllowedNoSuchObjectLockConfigurationObjectLockedInvalidRetentionDatePastObjectLockRetainDateUnknownWORMModeDirectiveBucketTaggingNotFoundObjectLockInvalidHeadersInvalidTagDirectivePolicyAlreadyAttachedPolicyNotAttachedExcessDataInvalidEncryptionMethodInvalidEncryptionKeyIDInsecureSSECustomerRequestSSEMultipartEncryptedSSEEncryptedObjectInvalidEncryptionParametersInvalidEncryptionParametersSSECInvalidSSECustomerAlgorithmInvalidSSECustomerKeyMissingSSECustomerKeyMissingSSECustomerKeyMD5SSECustomerKeyMD5MismatchInvalidSSECustomerParametersIncompatibleEncryptionMethodKMSNotConfiguredKMSKeyNotFoundExceptionKMSDefaultKeyAlreadyConfiguredNoAccessKeyInvalidTokenEventNotificationARNNotificationRegionNotificationOverlappingFilterNotificationFilterNameInvalidFilterNamePrefixFilterNameSuffixFilterValueInvalidOverlappingConfigsUnsupportedNotificationContentSHA256MismatchContentChecksumMismatchStorageFullRequestBodyParseObjectExistsAsDirectoryInvalidObjectNameInvalidObjectNamePrefixSlashInvalidResourceNameInvalidLifecycleQueryParameterServerNotInitializedRequestTimedoutClientDisconnectedTooManyRequestsInvalidRequestTransitionStorageClassNotFoundErrorInvalidStorageClassBackendDownMalformedJSONAdminNoSuchUserAdminNoSuchUserLDAPWarnAdminNoSuchGroupAdminGroupNotEmptyAdminGroupDisabledAdminNoSuchJobAdminNoSuchPolicyAdminPolicyChangeAlreadyAppliedAdminInvalidArgumentAdminInvalidAccessKeyAdminInvalidSecretKeyAdminConfigNoQuorumAdminConfigTooLargeAdminConfigBadJSONAdminNoSuchConfigTargetAdminConfigEnvOverriddenAdminConfigDuplicateKeysAdminConfigInvalidIDPTypeAdminConfigLDAPNonDefaultConfigNameAdminConfigLDAPValidationAdminConfigIDPCfgNameAlreadyExistsAdminConfigIDPCfgNameDoesNotExistAdminCredentialsMismatchInsecureClientRequestObjectTamperedSiteReplicationInvalidRequestSiteReplicationPeerRespSiteReplicationBackendIssueSiteReplicationServiceAccountErrorSiteReplicationBucketConfigErrorSiteReplicationBucketMetaErrorSiteReplicationIAMErrorSiteReplicationConfigMissingAdminRebalanceAlreadyStartedAdminRebalanceNotStartedAdminBucketQuotaExceededAdminNoSuchQuotaConfigurationHealNotImplementedHealNoSuchProcessHealInvalidClientTokenHealMissingBucketHealAlreadyRunningHealOverlappingPathsIncorrectContinuationTokenEmptyRequestBodyUnsupportedFunctionInvalidExpressionTypeBusyUnauthorizedAccessExpressionTooLongIllegalSQLFunctionArgumentInvalidKeyPathInvalidCompressionFormatInvalidFileHeaderInfoInvalidJSONTypeInvalidQuoteFieldsInvalidRequestParameterInvalidDataTypeInvalidTextEncodingInvalidDataSourceInvalidTableAliasMissingRequiredParameterObjectSerializationConflictUnsupportedSQLOperationUnsupportedSQLStructureUnsupportedSyntaxUnsupportedRangeHeaderLexerInvalidCharLexerInvalidOperatorLexerInvalidLiteralLexerInvalidIONLiteralParseExpectedDatePartParseExpectedKeywordParseExpectedTokenTypeParseExpected2TokenTypesParseExpectedNumberParseExpectedRightParenBuiltinFunctionCallParseExpectedTypeNameParseExpectedWhenClauseParseUnsupportedTokenParseUnsupportedLiteralsGroupByParseExpectedMemberParseUnsupportedSelectParseUnsupportedCaseParseUnsupportedCaseClauseParseUnsupportedAliasParseUnsupportedSyntaxParseUnknownOperatorParseMissingIdentAfterAtParseUnexpectedOperatorParseUnexpectedTermParseUnexpectedTokenParseUnexpectedKeywordParseExpectedExpressionParseExpectedLeftParenAfterCastParseExpectedLeftParenValueConstructorParseExpectedLeftParenBuiltinFunctionCallParseExpectedArgumentDelimiterParseCastArityParseInvalidTypeParamParseEmptySelectParseSelectMissingFromParseExpectedIdentForGroupNameParseExpectedIdentForAliasParseUnsupportedCallWithStarParseNonUnaryAgregateFunctionCallParseMalformedJoinParseExpectedIdentForAtParseAsteriskIsNotAloneInSelectListParseCannotMixSqbAndWildcardInSelectListParseInvalidContextForWildcardInSelectListIncorrectSQLFunctionArgumentTypeValueParseFailureEvaluatorInvalidArgumentsIntegerOverflowLikeInvalidInputsCastFailedInvalidCastEvaluatorInvalidTimestampFormatPatternEvaluatorInvalidTimestampFormatPatternSymbolForParsingEvaluatorTimestampFormatPatternDuplicateFieldsEvaluatorTimestampFormatPatternHourClockAmPmMismatchEvaluatorUnterminatedTimestampFormatPatternTokenEvaluatorInvalidTimestampFormatPatternTokenEvaluatorInvalidTimestampFormatPatternSymbolEvaluatorBindingDoesNotExistMissingHeadersInvalidColumnIndexAdminConfigNotificationTargetsFailedAdminProfilerNotEnabledInvalidDecompressedSizeAddUserInvalidArgumentAdminResourceInvalidArgumentAdminAccountNotEligibleAccountNotEligibleAdminServiceAccountNotFoundPostPolicyConditionInvalidFormatInvalidChecksumLambdaARNInvalidLambdaARNNotFoundapiErrCodeEnd" +const _APIErrorCode_name = "NoneAccessDeniedBadDigestEntityTooSmallEntityTooLargePolicyTooLargeIncompleteBodyInternalErrorInvalidAccessKeyIDAccessKeyDisabledInvalidArgumentInvalidBucketNameInvalidDigestInvalidRangeInvalidRangePartNumberInvalidCopyPartRangeInvalidCopyPartRangeSourceInvalidMaxKeysInvalidEncodingMethodInvalidMaxUploadsInvalidMaxPartsInvalidPartNumberMarkerInvalidPartNumberInvalidRequestBodyInvalidCopySourceInvalidMetadataDirectiveInvalidCopyDestInvalidPolicyDocumentInvalidObjectStateMalformedXMLMissingContentLengthMissingContentMD5MissingRequestBodyErrorMissingSecurityHeaderNoSuchBucketNoSuchBucketPolicyNoSuchBucketLifecycleNoSuchLifecycleConfigurationInvalidLifecycleWithObjectLockNoSuchBucketSSEConfigNoSuchCORSConfigurationNoSuchWebsiteConfigurationReplicationConfigurationNotFoundErrorRemoteDestinationNotFoundErrorReplicationDestinationMissingLockRemoteTargetNotFoundErrorReplicationRemoteConnectionErrorReplicationBandwidthLimitErrorBucketRemoteIdenticalToSourceBucketRemoteAlreadyExistsBucketRemoteLabelInUseBucketRemoteArnTypeInvalidBucketRemoteArnInvalidBucketRemoteRemoveDisallowedRemoteTargetNotVersionedErrorReplicationSourceNotVersionedErrorReplicationNeedsVersioningErrorReplicationBucketNeedsVersioningErrorReplicationDenyEditErrorRemoteTargetDenyAddErrorReplicationNoExistingObjectsObjectRestoreAlreadyInProgressNoSuchKeyNoSuchUploadInvalidVersionIDNoSuchVersionNotImplementedPreconditionFailedRequestTimeTooSkewedSignatureDoesNotMatchMethodNotAllowedInvalidPartInvalidPartOrderMissingPartAuthorizationHeaderMalformedMalformedPOSTRequestPOSTFileRequiredSignatureVersionNotSupportedBucketNotEmptyAllAccessDisabledPolicyInvalidVersionMissingFieldsMissingCredTagCredMalformedInvalidRegionInvalidServiceS3InvalidServiceSTSInvalidRequestVersionMissingSignTagMissingSignHeadersTagMalformedDateMalformedPresignedDateMalformedCredentialDateMalformedExpiresNegativeExpiresAuthHeaderEmptyExpiredPresignRequestRequestNotReadyYetUnsignedHeadersMissingDateHeaderInvalidQuerySignatureAlgoInvalidQueryParamsBucketAlreadyOwnedByYouInvalidDurationBucketAlreadyExistsMetadataTooLargeUnsupportedMetadataUnsupportedHostHeaderMaximumExpiresSlowDownReadSlowDownWriteInvalidPrefixMarkerBadRequestKeyTooLongErrorInvalidBucketObjectLockConfigurationObjectLockConfigurationNotFoundObjectLockConfigurationNotAllowedNoSuchObjectLockConfigurationObjectLockedInvalidRetentionDatePastObjectLockRetainDateUnknownWORMModeDirectiveBucketTaggingNotFoundObjectLockInvalidHeadersInvalidTagDirectivePolicyAlreadyAttachedPolicyNotAttachedExcessDataInvalidEncryptionMethodInvalidEncryptionKeyIDInsecureSSECustomerRequestSSEMultipartEncryptedSSEEncryptedObjectInvalidEncryptionParametersInvalidEncryptionParametersSSECInvalidSSECustomerAlgorithmInvalidSSECustomerKeyMissingSSECustomerKeyMissingSSECustomerKeyMD5SSECustomerKeyMD5MismatchInvalidSSECustomerParametersIncompatibleEncryptionMethodKMSNotConfiguredKMSKeyNotFoundExceptionKMSDefaultKeyAlreadyConfiguredNoAccessKeyInvalidTokenEventNotificationARNNotificationRegionNotificationOverlappingFilterNotificationFilterNameInvalidFilterNamePrefixFilterNameSuffixFilterValueInvalidOverlappingConfigsUnsupportedNotificationContentSHA256MismatchContentChecksumMismatchStorageFullRequestBodyParseObjectExistsAsDirectoryInvalidObjectNameInvalidObjectNamePrefixSlashInvalidResourceNameInvalidLifecycleQueryParameterServerNotInitializedRequestTimedoutClientDisconnectedTooManyRequestsInvalidRequestTransitionStorageClassNotFoundErrorInvalidStorageClassBackendDownMalformedJSONAdminNoSuchUserAdminNoSuchUserLDAPWarnAdminNoSuchGroupAdminGroupNotEmptyAdminGroupDisabledAdminNoSuchJobAdminNoSuchPolicyAdminPolicyChangeAlreadyAppliedAdminInvalidArgumentAdminInvalidAccessKeyAdminInvalidSecretKeyAdminConfigNoQuorumAdminConfigTooLargeAdminConfigBadJSONAdminNoSuchConfigTargetAdminConfigEnvOverriddenAdminConfigDuplicateKeysAdminConfigInvalidIDPTypeAdminConfigLDAPNonDefaultConfigNameAdminConfigLDAPValidationAdminConfigIDPCfgNameAlreadyExistsAdminConfigIDPCfgNameDoesNotExistAdminCredentialsMismatchInsecureClientRequestObjectTamperedSiteReplicationInvalidRequestSiteReplicationPeerRespSiteReplicationBackendIssueSiteReplicationServiceAccountErrorSiteReplicationBucketConfigErrorSiteReplicationBucketMetaErrorSiteReplicationIAMErrorSiteReplicationConfigMissingAdminRebalanceAlreadyStartedAdminRebalanceNotStartedAdminBucketQuotaExceededAdminNoSuchQuotaConfigurationHealNotImplementedHealNoSuchProcessHealInvalidClientTokenHealMissingBucketHealAlreadyRunningHealOverlappingPathsIncorrectContinuationTokenEmptyRequestBodyUnsupportedFunctionInvalidExpressionTypeBusyUnauthorizedAccessExpressionTooLongIllegalSQLFunctionArgumentInvalidKeyPathInvalidCompressionFormatInvalidFileHeaderInfoInvalidJSONTypeInvalidQuoteFieldsInvalidRequestParameterInvalidDataTypeInvalidTextEncodingInvalidDataSourceInvalidTableAliasMissingRequiredParameterObjectSerializationConflictUnsupportedSQLOperationUnsupportedSQLStructureUnsupportedSyntaxUnsupportedRangeHeaderLexerInvalidCharLexerInvalidOperatorLexerInvalidLiteralLexerInvalidIONLiteralParseExpectedDatePartParseExpectedKeywordParseExpectedTokenTypeParseExpected2TokenTypesParseExpectedNumberParseExpectedRightParenBuiltinFunctionCallParseExpectedTypeNameParseExpectedWhenClauseParseUnsupportedTokenParseUnsupportedLiteralsGroupByParseExpectedMemberParseUnsupportedSelectParseUnsupportedCaseParseUnsupportedCaseClauseParseUnsupportedAliasParseUnsupportedSyntaxParseUnknownOperatorParseMissingIdentAfterAtParseUnexpectedOperatorParseUnexpectedTermParseUnexpectedTokenParseUnexpectedKeywordParseExpectedExpressionParseExpectedLeftParenAfterCastParseExpectedLeftParenValueConstructorParseExpectedLeftParenBuiltinFunctionCallParseExpectedArgumentDelimiterParseCastArityParseInvalidTypeParamParseEmptySelectParseSelectMissingFromParseExpectedIdentForGroupNameParseExpectedIdentForAliasParseUnsupportedCallWithStarParseNonUnaryAgregateFunctionCallParseMalformedJoinParseExpectedIdentForAtParseAsteriskIsNotAloneInSelectListParseCannotMixSqbAndWildcardInSelectListParseInvalidContextForWildcardInSelectListIncorrectSQLFunctionArgumentTypeValueParseFailureEvaluatorInvalidArgumentsIntegerOverflowLikeInvalidInputsCastFailedInvalidCastEvaluatorInvalidTimestampFormatPatternEvaluatorInvalidTimestampFormatPatternSymbolForParsingEvaluatorTimestampFormatPatternDuplicateFieldsEvaluatorTimestampFormatPatternHourClockAmPmMismatchEvaluatorUnterminatedTimestampFormatPatternTokenEvaluatorInvalidTimestampFormatPatternTokenEvaluatorInvalidTimestampFormatPatternSymbolEvaluatorBindingDoesNotExistMissingHeadersInvalidColumnIndexAdminConfigNotificationTargetsFailedAdminProfilerNotEnabledInvalidDecompressedSizeAddUserInvalidArgumentAdminResourceInvalidArgumentAdminAccountNotEligibleAccountNotEligibleAdminServiceAccountNotFoundPostPolicyConditionInvalidFormatInvalidChecksumLambdaARNInvalidLambdaARNNotFoundapiErrCodeEnd" -var _APIErrorCode_index = [...]uint16{0, 4, 16, 25, 39, 53, 67, 81, 94, 112, 129, 144, 161, 174, 186, 208, 228, 254, 268, 289, 306, 321, 344, 361, 379, 396, 420, 435, 456, 474, 486, 506, 523, 546, 567, 579, 597, 618, 646, 676, 697, 720, 746, 783, 813, 846, 871, 903, 933, 962, 987, 1009, 1035, 1057, 1085, 1114, 1148, 1179, 1216, 1240, 1264, 1292, 1322, 1331, 1343, 1359, 1372, 1386, 1404, 1424, 1445, 1461, 1472, 1488, 1499, 1527, 1547, 1563, 1591, 1605, 1622, 1642, 1655, 1669, 1682, 1695, 1711, 1728, 1749, 1763, 1784, 1797, 1819, 1842, 1858, 1873, 1888, 1909, 1927, 1942, 1959, 1984, 2002, 2025, 2040, 2059, 2075, 2094, 2108, 2120, 2133, 2152, 2162, 2177, 2213, 2244, 2277, 2306, 2318, 2338, 2362, 2386, 2407, 2431, 2450, 2471, 2488, 2498, 2521, 2543, 2569, 2590, 2608, 2635, 2666, 2693, 2714, 2735, 2759, 2784, 2812, 2840, 2856, 2879, 2909, 2920, 2932, 2949, 2964, 2982, 3011, 3028, 3044, 3060, 3078, 3096, 3119, 3140, 3163, 3174, 3190, 3213, 3230, 3258, 3277, 3307, 3327, 3342, 3360, 3375, 3389, 3424, 3443, 3454, 3467, 3482, 3505, 3521, 3539, 3557, 3571, 3588, 3619, 3639, 3660, 3681, 3700, 3719, 3737, 3760, 3784, 3808, 3833, 3868, 3893, 3927, 3960, 3984, 4005, 4019, 4048, 4071, 4098, 4132, 4164, 4194, 4217, 4245, 4273, 4297, 4321, 4350, 4368, 4385, 4407, 4424, 4442, 4462, 4488, 4504, 4523, 4544, 4548, 4566, 4583, 4609, 4623, 4647, 4668, 4683, 4701, 4724, 4739, 4758, 4775, 4792, 4816, 4843, 4866, 4889, 4906, 4928, 4944, 4964, 4983, 5005, 5026, 5046, 5068, 5092, 5111, 5153, 5174, 5197, 5218, 5249, 5268, 5290, 5310, 5336, 5357, 5379, 5399, 5423, 5446, 5465, 5485, 5507, 5530, 5561, 5599, 5640, 5670, 5684, 5705, 5721, 5743, 5773, 5799, 5827, 5860, 5878, 5901, 5936, 5976, 6018, 6050, 6067, 6092, 6107, 6124, 6134, 6145, 6183, 6237, 6283, 6335, 6383, 6426, 6470, 6498, 6512, 6530, 6566, 6589, 6612, 6634, 6662, 6685, 6703, 6730, 6762, 6777, 6793, 6810, 6823} +var _APIErrorCode_index = [...]uint16{0, 4, 16, 25, 39, 53, 67, 81, 94, 112, 129, 144, 161, 174, 186, 208, 228, 254, 268, 289, 306, 321, 344, 361, 379, 396, 420, 435, 456, 474, 486, 506, 523, 546, 567, 579, 597, 618, 646, 676, 697, 720, 746, 783, 813, 846, 871, 903, 933, 962, 987, 1009, 1035, 1057, 1085, 1114, 1148, 1179, 1216, 1240, 1264, 1292, 1322, 1331, 1343, 1359, 1372, 1386, 1404, 1424, 1445, 1461, 1472, 1488, 1499, 1527, 1547, 1563, 1591, 1605, 1622, 1642, 1655, 1669, 1682, 1695, 1711, 1728, 1749, 1763, 1784, 1797, 1819, 1842, 1858, 1873, 1888, 1909, 1927, 1942, 1959, 1984, 2002, 2025, 2040, 2059, 2075, 2094, 2115, 2129, 2141, 2154, 2173, 2183, 2198, 2234, 2265, 2298, 2327, 2339, 2359, 2383, 2407, 2428, 2452, 2471, 2492, 2509, 2519, 2542, 2564, 2590, 2611, 2629, 2656, 2687, 2714, 2735, 2756, 2780, 2805, 2833, 2861, 2877, 2900, 2930, 2941, 2953, 2970, 2985, 3003, 3032, 3049, 3065, 3081, 3099, 3117, 3140, 3161, 3184, 3195, 3211, 3234, 3251, 3279, 3298, 3328, 3348, 3363, 3381, 3396, 3410, 3445, 3464, 3475, 3488, 3503, 3526, 3542, 3560, 3578, 3592, 3609, 3640, 3660, 3681, 3702, 3721, 3740, 3758, 3781, 3805, 3829, 3854, 3889, 3914, 3948, 3981, 4005, 4026, 4040, 4069, 4092, 4119, 4153, 4185, 4215, 4238, 4266, 4294, 4318, 4342, 4371, 4389, 4406, 4428, 4445, 4463, 4483, 4509, 4525, 4544, 4565, 4569, 4587, 4604, 4630, 4644, 4668, 4689, 4704, 4722, 4745, 4760, 4779, 4796, 4813, 4837, 4864, 4887, 4910, 4927, 4949, 4965, 4985, 5004, 5026, 5047, 5067, 5089, 5113, 5132, 5174, 5195, 5218, 5239, 5270, 5289, 5311, 5331, 5357, 5378, 5400, 5420, 5444, 5467, 5486, 5506, 5528, 5551, 5582, 5620, 5661, 5691, 5705, 5726, 5742, 5764, 5794, 5820, 5848, 5881, 5899, 5922, 5957, 5997, 6039, 6071, 6088, 6113, 6128, 6145, 6155, 6166, 6204, 6258, 6304, 6356, 6404, 6447, 6491, 6519, 6533, 6551, 6587, 6610, 6633, 6655, 6683, 6706, 6724, 6751, 6783, 6798, 6814, 6831, 6844} func (i APIErrorCode) String() string { if i < 0 || i >= APIErrorCode(len(_APIErrorCode_index)-1) { diff --git a/cmd/globals.go b/cmd/globals.go index 6e86192a7..55edd12eb 100644 --- a/cmd/globals.go +++ b/cmd/globals.go @@ -245,8 +245,9 @@ var ( // Global HTTP request statisitics globalHTTPStats = newHTTPStats() - // Global bucket network statistics + // Global bucket network and API statistics globalBucketConnStats = newBucketConnStats() + globalBucketHTTPStats = newBucketHTTPStats() // Time when the server is started globalBootTime = UTCNow() diff --git a/cmd/handler-utils.go b/cmd/handler-utils.go index 1b7ff0717..5d0fcdac0 100644 --- a/cmd/handler-utils.go +++ b/cmd/handler-utils.go @@ -269,9 +269,26 @@ func trimAwsChunkedContentEncoding(contentEnc string) (trimmedContentEnc string) func collectAPIStats(api string, f http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + resource, err := getResource(r.URL.Path, r.Host, globalDomainNames) + if err != nil { + defer logger.AuditLog(r.Context(), w, r, mustGetClaimsFromToken(r)) + + apiErr := errorCodes.ToAPIErr(ErrUnsupportedHostHeader) + apiErr.Description = fmt.Sprintf("%s: %v", apiErr.Description, err) + + writeErrorResponse(r.Context(), w, apiErr, r.URL) + return + } + + bucket, _ := path2BucketObject(resource) + globalHTTPStats.currentS3Requests.Inc(api) defer globalHTTPStats.currentS3Requests.Dec(api) + if bucket != "" && bucket != minioReservedBucket { + globalBucketHTTPStats.updateHTTPStats(bucket, api, nil) + } + f.ServeHTTP(w, r) tc, ok := r.Context().Value(mcontext.ContextTraceKey).(*mcontext.TraceCtxt) @@ -299,16 +316,10 @@ func collectAPIStats(api string, f http.HandlerFunc) http.HandlerFunc { globalConnStats.incS3InputBytes(int64(tc.RequestRecorder.Size())) globalConnStats.incS3OutputBytes(int64(tc.ResponseRecorder.Size())) - resource, err := getResource(r.URL.Path, r.Host, globalDomainNames) - if err != nil { - logger.LogIf(r.Context(), fmt.Errorf("Unable to get the actual resource in the incoming request: %v", err)) - return - } - - bucket, _ := path2BucketObject(resource) if bucket != "" && bucket != minioReservedBucket { globalBucketConnStats.incS3InputBytes(bucket, int64(tc.RequestRecorder.Size())) globalBucketConnStats.incS3OutputBytes(bucket, int64(tc.ResponseRecorder.Size())) + globalBucketHTTPStats.updateHTTPStats(bucket, api, tc.ResponseRecorder) } } } diff --git a/cmd/http-stats.go b/cmd/http-stats.go index 5e3bbbb63..de4f2058a 100644 --- a/cmd/http-stats.go +++ b/cmd/http-stats.go @@ -120,6 +120,105 @@ type bucketS3RXTX struct { s3OutputBytes uint64 } +type bucketHTTPAPIStats struct { + currentS3Requests *HTTPAPIStats + totalS3Requests *HTTPAPIStats + totalS34xxErrors *HTTPAPIStats + totalS35xxErrors *HTTPAPIStats + totalS3Canceled *HTTPAPIStats +} + +type bucketHTTPStats struct { + sync.RWMutex + httpStats map[string]bucketHTTPAPIStats +} + +func newBucketHTTPStats() *bucketHTTPStats { + return &bucketHTTPStats{ + httpStats: make(map[string]bucketHTTPAPIStats), + } +} + +func (bh *bucketHTTPStats) delete(bucket string) { + bh.Lock() + defer bh.Unlock() + + delete(bh.httpStats, bucket) +} + +func (bh *bucketHTTPStats) updateHTTPStats(bucket, api string, w *xhttp.ResponseRecorder) { + if bh == nil { + return + } + + bh.Lock() + defer bh.Unlock() + + hstats, ok := bh.httpStats[bucket] + if !ok { + hstats = bucketHTTPAPIStats{ + currentS3Requests: &HTTPAPIStats{}, + totalS3Requests: &HTTPAPIStats{}, + totalS3Canceled: &HTTPAPIStats{}, + totalS34xxErrors: &HTTPAPIStats{}, + totalS35xxErrors: &HTTPAPIStats{}, + } + } + + if w == nil { // when response recorder nil, this is an active request + hstats.currentS3Requests.Inc(api) + bh.httpStats[bucket] = hstats + return + } // else { + hstats.currentS3Requests.Dec(api) // decrement this once we have the response recorder. + + hstats.totalS3Requests.Inc(api) + code := w.StatusCode + + switch { + case code == 0: + case code == 499: + // 499 is a good error, shall be counted as canceled. + hstats.totalS3Canceled.Inc(api) + case code >= http.StatusBadRequest: + if code >= http.StatusInternalServerError { + hstats.totalS35xxErrors.Inc(api) + } else { + hstats.totalS34xxErrors.Inc(api) + } + } + + bh.httpStats[bucket] = hstats +} + +func (bh *bucketHTTPStats) load(bucket string) bucketHTTPAPIStats { + if bh == nil { + return bucketHTTPAPIStats{ + currentS3Requests: &HTTPAPIStats{}, + totalS3Requests: &HTTPAPIStats{}, + totalS3Canceled: &HTTPAPIStats{}, + totalS34xxErrors: &HTTPAPIStats{}, + totalS35xxErrors: &HTTPAPIStats{}, + } + } + + bh.RLock() + defer bh.RUnlock() + + val, ok := bh.httpStats[bucket] + if ok { + return val + } + + return bucketHTTPAPIStats{ + currentS3Requests: &HTTPAPIStats{}, + totalS3Requests: &HTTPAPIStats{}, + totalS3Canceled: &HTTPAPIStats{}, + totalS34xxErrors: &HTTPAPIStats{}, + totalS35xxErrors: &HTTPAPIStats{}, + } +} + type bucketConnStats struct { sync.RWMutex stats map[string]*bucketS3RXTX @@ -225,10 +324,32 @@ func (stats *HTTPAPIStats) Dec(api string) { } } +// Get returns the current counter on input API string +func (stats *HTTPAPIStats) Get(api string) int { + if stats == nil { + return 0 + } + + stats.RLock() + defer stats.RUnlock() + + val, ok := stats.apiStats[api] + if ok { + return val + } + + return 0 +} + // Load returns the recorded stats. func (stats *HTTPAPIStats) Load() map[string]int { - stats.Lock() - defer stats.Unlock() + if stats == nil { + return map[string]int{} + } + + stats.RLock() + defer stats.RUnlock() + apiStats := make(map[string]int, len(stats.apiStats)) for k, v := range stats.apiStats { apiStats[k] = v diff --git a/cmd/metrics-v2.go b/cmd/metrics-v2.go index 36fcb0434..96137ceaa 100644 --- a/cmd/metrics-v2.go +++ b/cmd/metrics-v2.go @@ -483,7 +483,7 @@ func getUsageLastScanActivityMD() MetricDescription { Namespace: minioMetricNamespace, Subsystem: usageSubsystem, Name: lastActivityTime, - Help: "Time elapsed (in nano seconds) since last scan activity. This is set to 0 until first scan cycle", + Help: "Time elapsed (in nano seconds) since last scan activity.", Type: gaugeMetric, } } @@ -703,7 +703,7 @@ func getS3RequestsInQueueMD() MetricDescription { Namespace: s3MetricNamespace, Subsystem: requestsSubsystem, Name: waitingTotal, - Help: "Number of S3 requests in the waiting queue", + Help: "Total number of S3 requests in the waiting queue", Type: gaugeMetric, } } @@ -713,7 +713,7 @@ func getIncomingS3RequestsMD() MetricDescription { Namespace: s3MetricNamespace, Subsystem: requestsSubsystem, Name: incomingTotal, - Help: "Volatile number of total incoming S3 requests", + Help: "Total number of incoming S3 requests", Type: gaugeMetric, } } @@ -723,7 +723,7 @@ func getS3RequestsTotalMD() MetricDescription { Namespace: s3MetricNamespace, Subsystem: requestsSubsystem, Name: total, - Help: "Total number S3 requests", + Help: "Total number of S3 requests", Type: counterMetric, } } @@ -733,7 +733,7 @@ func getS3RequestsErrorsMD() MetricDescription { Namespace: s3MetricNamespace, Subsystem: requestsSubsystem, Name: errorsTotal, - Help: "Total number S3 requests with (4xx and 5xx) errors", + Help: "Total number of S3 requests with (4xx and 5xx) errors", Type: counterMetric, } } @@ -743,7 +743,7 @@ func getS3Requests4xxErrorsMD() MetricDescription { Namespace: s3MetricNamespace, Subsystem: requestsSubsystem, Name: "4xx_" + errorsTotal, - Help: "Total number S3 requests with (4xx) errors", + Help: "Total number of S3 requests with (4xx) errors", Type: counterMetric, } } @@ -753,7 +753,7 @@ func getS3Requests5xxErrorsMD() MetricDescription { Namespace: s3MetricNamespace, Subsystem: requestsSubsystem, Name: "5xx_" + errorsTotal, - Help: "Total number S3 requests with (5xx) errors", + Help: "Total number of S3 requests with (5xx) errors", Type: counterMetric, } } @@ -763,7 +763,7 @@ func getS3RequestsCanceledMD() MetricDescription { Namespace: s3MetricNamespace, Subsystem: requestsSubsystem, Name: canceledTotal, - Help: "Total number S3 requests that were canceled from the client while processing", + Help: "Total number of S3 requests that were canceled by the client", Type: counterMetric, } } @@ -773,7 +773,7 @@ func getS3RejectedAuthRequestsTotalMD() MetricDescription { Namespace: s3MetricNamespace, Subsystem: requestsRejectedSubsystem, Name: authTotal, - Help: "Total number S3 requests rejected for auth failure", + Help: "Total number of S3 requests rejected for auth failure", Type: counterMetric, } } @@ -783,7 +783,7 @@ func getS3RejectedHeaderRequestsTotalMD() MetricDescription { Namespace: s3MetricNamespace, Subsystem: requestsRejectedSubsystem, Name: headerTotal, - Help: "Total number S3 requests rejected for invalid header", + Help: "Total number of S3 requests rejected for invalid header", Type: counterMetric, } } @@ -793,7 +793,7 @@ func getS3RejectedTimestampRequestsTotalMD() MetricDescription { Namespace: s3MetricNamespace, Subsystem: requestsRejectedSubsystem, Name: timestampTotal, - Help: "Total number S3 requests rejected for invalid timestamp", + Help: "Total number of S3 requests rejected for invalid timestamp", Type: counterMetric, } } @@ -803,7 +803,7 @@ func getS3RejectedInvalidRequestsTotalMD() MetricDescription { Namespace: s3MetricNamespace, Subsystem: requestsRejectedSubsystem, Name: invalidTotal, - Help: "Total number S3 invalid requests", + Help: "Total number of invalid S3 requests", Type: counterMetric, } } @@ -913,7 +913,7 @@ func getHealLastActivityTimeMD() MetricDescription { Namespace: healMetricNamespace, Subsystem: timeSubsystem, Name: lastActivityTime, - Help: "Time elapsed (in nano seconds) since last self healing activity. This is set to -1 until initial self heal activity", + Help: "Time elapsed (in nano seconds) since last self healing activity.", Type: gaugeMetric, } } @@ -1309,6 +1309,56 @@ func getExpiryPendingTasksMD() MetricDescription { } } +func getBucketS3RequestsInFlightMD() MetricDescription { + return MetricDescription{ + Namespace: bucketMetricNamespace, + Subsystem: requestsSubsystem, + Name: inflightTotal, + Help: "Total number of S3 requests currently in flight on a bucket", + Type: gaugeMetric, + } +} + +func getBucketS3RequestsTotalMD() MetricDescription { + return MetricDescription{ + Namespace: bucketMetricNamespace, + Subsystem: requestsSubsystem, + Name: total, + Help: "Total number of S3 requests on a bucket", + Type: counterMetric, + } +} + +func getBucketS3Requests4xxErrorsMD() MetricDescription { + return MetricDescription{ + Namespace: bucketMetricNamespace, + Subsystem: requestsSubsystem, + Name: "4xx_" + errorsTotal, + Help: "Total number of S3 requests with (4xx) errors on a bucket", + Type: counterMetric, + } +} + +func getBucketS3Requests5xxErrorsMD() MetricDescription { + return MetricDescription{ + Namespace: bucketMetricNamespace, + Subsystem: requestsSubsystem, + Name: "5xx_" + errorsTotal, + Help: "Total number of S3 requests with (5xx) errors on a bucket", + Type: counterMetric, + } +} + +func getBucketS3RequestsCanceledMD() MetricDescription { + return MetricDescription{ + Namespace: bucketMetricNamespace, + Subsystem: requestsSubsystem, + Name: canceledTotal, + Help: "Total number of S3 requests that were canceled from the client while processing on a bucket", + Type: counterMetric, + } +} + func getILMNodeMetrics() *MetricsGroup { mg := &MetricsGroup{ cacheInterval: 10 * time.Second, @@ -1456,7 +1506,7 @@ func getIAMNodeMetrics() *MetricsGroup { Namespace: nodeMetricNamespace, Subsystem: iamSubsystem, Name: "since_last_sync_millis", - Help: "Time (in milliseconds) since last successful IAM data sync. This is set to 0 until the first sync after server start.", + Help: "Time (in milliseconds) since last successful IAM data sync.", Type: gaugeMetric, }, Value: float64(sinceLastSyncMillis), @@ -2072,6 +2122,47 @@ func getBucketUsageMetrics() *MetricsGroup { }) } + httpStats := globalBucketHTTPStats.load(bucket) + for k, v := range httpStats.currentS3Requests.Load() { + metrics = append(metrics, Metric{ + Description: getBucketS3RequestsInFlightMD(), + Value: float64(v), + VariableLabels: map[string]string{"bucket": bucket, "api": k}, + }) + } + + for k, v := range httpStats.totalS3Requests.Load() { + metrics = append(metrics, Metric{ + Description: getBucketS3RequestsTotalMD(), + Value: float64(v), + VariableLabels: map[string]string{"bucket": bucket, "api": k}, + }) + } + + for k, v := range httpStats.totalS3Canceled.Load() { + metrics = append(metrics, Metric{ + Description: getBucketS3RequestsCanceledMD(), + Value: float64(v), + VariableLabels: map[string]string{"bucket": bucket, "api": k}, + }) + } + + for k, v := range httpStats.totalS34xxErrors.Load() { + metrics = append(metrics, Metric{ + Description: getBucketS3Requests4xxErrorsMD(), + Value: float64(v), + VariableLabels: map[string]string{"bucket": bucket, "api": k}, + }) + } + + for k, v := range httpStats.totalS35xxErrors.Load() { + metrics = append(metrics, Metric{ + Description: getBucketS3Requests5xxErrorsMD(), + Value: float64(v), + VariableLabels: map[string]string{"bucket": bucket, "api": k}, + }) + } + if stats.hasReplicationUsage() { for arn, stat := range stats.Stats { metrics = append(metrics, Metric{ diff --git a/cmd/notification.go b/cmd/notification.go index 4a0c3970e..c27c415f1 100644 --- a/cmd/notification.go +++ b/cmd/notification.go @@ -453,6 +453,7 @@ func (sys *NotificationSys) DeleteBucketMetadata(ctx context.Context, bucketName globalBucketTargetSys.Delete(bucketName) globalEventNotifier.RemoveNotification(bucketName) globalBucketConnStats.delete(bucketName) + globalBucketHTTPStats.delete(bucketName) if localMetacacheMgr != nil { localMetacacheMgr.deleteBucketCache(bucketName) } diff --git a/cmd/peer-rest-server.go b/cmd/peer-rest-server.go index e146dff50..ed45c3ce8 100644 --- a/cmd/peer-rest-server.go +++ b/cmd/peer-rest-server.go @@ -533,6 +533,7 @@ func (s *peerRESTServer) DeleteBucketMetadataHandler(w http.ResponseWriter, r *h globalBucketTargetSys.Delete(bucketName) globalEventNotifier.RemoveNotification(bucketName) globalBucketConnStats.delete(bucketName) + globalBucketHTTPStats.delete(bucketName) if localMetacacheMgr != nil { localMetacacheMgr.deleteBucketCache(bucketName) } diff --git a/docs/metrics/prometheus/list.md b/docs/metrics/prometheus/list.md index d79396e4e..5b476d21c 100644 --- a/docs/metrics/prometheus/list.md +++ b/docs/metrics/prometheus/list.md @@ -1,111 +1,116 @@ # List of metrics reported cluster wide -Each metric includes a label for the server that calculated the metric. -Each metric has a label for the server that generated the metric. +Each metric includes a label for the server that calculated the metric. Each metric has a label for the server that generated the metric. -These metrics can be from any MinIO server once per collection. +These metrics can be obtained from any MinIO server once per collection. + +| Name | Description | +|:---------------------------------------------|:----------------------------------------------------------------------------------------------------------------| +| `minio_audit_failed_messages` | Total number of messages that failed to send since start. | +| `minio_audit_target_queue_length` | Number of unsent messages in queue for target. | +| `minio_audit_total_messages` | Total number of messages sent since start. | +| `minio_bucket_objects_size_distribution` | Distribution of object sizes in the bucket, includes label for the bucket name. | +| `minio_bucket_quota_total_bytes` | Total bucket quota size in bytes. | +| `minio_bucket_replication_failed_bytes` | Total number of bytes failed at least once to replicate. | +| `minio_bucket_replication_failed_count` | Total number of objects which failed replication. | +| `minio_bucket_replication_latency_ms` | Replication latency in milliseconds. | +| `minio_bucket_replication_received_bytes` | Total number of bytes replicated to this bucket from another source bucket. | +| `minio_bucket_replication_sent_bytes` | Total number of bytes replicated to the target bucket. | +| `minio_bucket_traffic_received_bytes` | Total number of S3 bytes received for this bucket. | +| `minio_bucket_traffic_sent_bytes` | Total number of S3 bytes sent for this bucket. | +| `minio_bucket_usage_object_total` | Total number of objects. | +| `minio_bucket_usage_total_bytes` | Total bucket size in bytes. | +| `minio_bucket_requests_4xx_errors_total` | Total number of S3 requests with (4xx) errors on a bucket. | +| `minio_bucket_requests_5xx_errors_total` | Total number of S3 requests with (5xx) errors on a bucket. | +| `minio_bucket_requests_inflight_total` | Total number of S3 requests currently in flight on a bucket. | +| `minio_bucket_requests_total` | Total number of S3 requests on a bucket. | +| `minio_bucket_requests_canceled_total` | Total number S3 requests canceled by the client. | +| `minio_cache_hits_total` | Total number of drive cache hits. | +| `minio_cache_missed_total` | Total number of drive cache misses. | +| `minio_cache_sent_bytes` | Total number of bytes served from cache. | +| `minio_cache_total_bytes` | Total size of cache drive in bytes. | +| `minio_cache_usage_info` | Total percentage cache usage, value of 1 indicates high and 0 low, label level is set as well. | +| `minio_cache_used_bytes` | Current cache usage in bytes. | +| `minio_cluster_capacity_raw_free_bytes` | Total free capacity online in the cluster. | +| `minio_cluster_capacity_raw_total_bytes` | Total capacity online in the cluster. | +| `minio_cluster_capacity_usable_free_bytes` | Total free usable capacity online in the cluster. | +| `minio_cluster_capacity_usable_total_bytes` | Total usable capacity online in the cluster. | +| `minio_cluster_disk_offline_total` | Total drives offline. | +| `minio_cluster_disk_online_total` | Total drives online. | +| `minio_cluster_disk_total` | Total drives. | +| `minio_cluster_ilm_transitioned_bytes` | Total bytes transitioned to a tier. | +| `minio_cluster_ilm_transitioned_objects` | Total number of objects transitioned to a tier. | +| `minio_cluster_ilm_transitioned_versions` | Total number of versions transitioned to a tier. | +| `minio_cluster_kms_online` | Reports whether the KMS is online (1) or offline (0). | +| `minio_cluster_kms_request_error` | Number of KMS requests that failed due to some error. (HTTP 4xx status code). | +| `minio_cluster_kms_request_failure` | Number of KMS requests that failed due to some internal failure. (HTTP 5xx status code). | +| `minio_cluster_kms_request_success` | Number of KMS requests that succeeded. | +| `minio_cluster_kms_uptime` | The time the KMS has been up and running in seconds. | +| `minio_cluster_nodes_offline_total` | Total number of MinIO nodes offline. | +| `minio_cluster_nodes_online_total` | Total number of MinIO nodes online. | +| `minio_heal_objects_errors_total` | Objects for which healing failed in current self healing run. | +| `minio_heal_objects_heal_total` | Objects healed in current self healing run. | +| `minio_heal_objects_total` | Objects scanned in current self healing run. | +| `minio_heal_time_last_activity_nano_seconds` | Time elapsed (in nano seconds) since last self healing activity. | +| `minio_inter_node_traffic_dial_avg_time` | Average time of internodes TCP dial calls. | +| `minio_inter_node_traffic_dial_errors` | Total number of internode TCP dial timeouts and errors. | +| `minio_inter_node_traffic_errors_total` | Total number of failed internode calls. | +| `minio_inter_node_traffic_received_bytes` | Total number of bytes received from other peer nodes. | +| `minio_inter_node_traffic_sent_bytes` | Total number of bytes sent to the other peer nodes. | +| `minio_minio_update_percent` | Total percentage cache usage. | +| `minio_node_disk_free_bytes` | Total storage available on a drive. | +| `minio_node_disk_free_inodes` | Total free inodes. | +| `minio_node_disk_latency_us` | Average last minute latency in µs for drive API storage operations. | +| `minio_node_disk_offline_total` | Total drives offline. | +| `minio_node_disk_online_total` | Total drives online. | +| `minio_node_disk_total` | Total drives. | +| `minio_node_disk_total_bytes` | Total storage on a drive. | +| `minio_node_disk_used_bytes` | Total storage used on a drive. | +| `minio_node_file_descriptor_limit_total` | Limit on total number of open file descriptors for the MinIO Server process. | +| `minio_node_file_descriptor_open_total` | Total number of open file descriptors by the MinIO Server process. | +| `minio_node_go_routine_total` | Total number of go routines running. | +| `minio_node_iam_last_sync_duration_millis` | Last successful IAM data sync duration in milliseconds. | +| `minio_node_iam_since_last_sync_millis` | Time (in milliseconds) since last successful IAM data sync. | +| `minio_node_iam_sync_failures` | Number of failed IAM data syncs since server start. | +| `minio_node_iam_sync_successes` | Number of successful IAM data syncs since server start. | +| `minio_node_ilm_expiry_pending_tasks` | Number of pending ILM expiry tasks in the queue. | +| `minio_node_ilm_transition_active_tasks` | Number of active ILM transition tasks. | +| `minio_node_ilm_transition_pending_tasks` | Number of pending ILM transition tasks in the queue. | +| `minio_node_ilm_versions_scanned` | Total number of object versions checked for ilm actions since server start. | +| `minio_node_io_rchar_bytes` | Total bytes read by the process from the underlying storage system including cache, /proc/[pid]/io rchar. | +| `minio_node_io_read_bytes` | Total bytes read by the process from the underlying storage system, /proc/[pid]/io read_bytes. | +| `minio_node_io_wchar_bytes` | Total bytes written by the process to the underlying storage system including page cache, /proc/[pid]/io wchar. | +| `minio_node_io_write_bytes` | Total bytes written by the process to the underlying storage system, /proc/[pid]/io write_bytes. | +| `minio_node_process_cpu_total_seconds` | Total user and system CPU time spent in seconds. | +| `minio_node_process_resident_memory_bytes` | Resident memory size in bytes. | +| `minio_node_process_starttime_seconds` | Start time for MinIO process per node, time in seconds since Unix epoc. | +| `minio_node_process_uptime_seconds` | Uptime for MinIO process per node in seconds. | +| `minio_node_scanner_bucket_scans_finished` | Total number of bucket scans finished since server start. | +| `minio_node_scanner_bucket_scans_started` | Total number of bucket scans started since server start. | +| `minio_node_scanner_directories_scanned` | Total number of directories scanned since server start. | +| `minio_node_scanner_objects_scanned` | Total number of unique objects scanned since server start. | +| `minio_node_scanner_versions_scanned` | Total number of object versions scanned since server start. | +| `minio_node_syscall_read_total` | Total read SysCalls to the kernel. /proc/[pid]/io syscr. | +| `minio_node_syscall_write_total` | Total write SysCalls to the kernel. /proc/[pid]/io syscw. | +| `minio_notify_current_send_in_progress` | Number of concurrent async Send calls active to all targets. | +| `minio_notify_target_queue_length` | Number of unsent notifications in queue for target. | +| `minio_s3_requests_4xx_errors_total` | Total number S3 requests with (4xx) errors. | +| `minio_s3_requests_5xx_errors_total` | Total number S3 requests with (5xx) errors. | +| `minio_s3_requests_canceled_total` | Total number S3 requests canceled by the client. | +| `minio_s3_requests_errors_total` | Total number S3 requests with (4xx and 5xx) errors. | +| `minio_s3_requests_incoming_total` | Volatile number of total incoming S3 requests. | +| `minio_s3_requests_inflight_total` | Total number of S3 requests currently in flight. | +| `minio_s3_requests_rejected_auth_total` | Total number S3 requests rejected for auth failure. | +| `minio_s3_requests_rejected_header_total` | Total number S3 requests rejected for invalid header. | +| `minio_s3_requests_rejected_invalid_total` | Total number S3 invalid requests. | +| `minio_s3_requests_rejected_timestamp_total` | Total number S3 requests rejected for invalid timestamp. | +| `minio_s3_requests_total` | Total number S3 requests. | +| `minio_s3_requests_waiting_total` | Number of S3 requests in the waiting queue. | +| `minio_s3_time_ttfb_seconds_distribution` | Distribution of the time to first byte across API calls. | +| `minio_s3_traffic_received_bytes` | Total number of s3 bytes received. | +| `minio_s3_traffic_sent_bytes` | Total number of s3 bytes sent. | +| `minio_software_commit_info` | Git commit hash for the MinIO release. | +| `minio_software_version_info` | MinIO Release tag for the server. | +| `minio_usage_last_activity_nano_seconds` | Time elapsed (in nano seconds) since last scan activity. | -| Name | Description | -|:------|:------------| -| `minio_audit_failed_messages` | Total number of messages that failed to send since start. | -| `minio_audit_target_queue_length` | Number of unsent messages in queue for target. | -| `minio_audit_total_messages` | Total number of messages sent since start. | -| `minio_bucket_objects_size_distribution` | Distribution of object sizes in the bucket, includes label for the bucket name. | -| `minio_bucket_quota_total_bytes` | Total bucket quota size in bytes. | -| `minio_bucket_replication_failed_bytes` | Total number of bytes failed at least once to replicate. | -| `minio_bucket_replication_failed_count` | Total number of objects which failed replication. | -| `minio_bucket_replication_latency_ms` | Replication latency in milliseconds. | -| `minio_bucket_replication_received_bytes` | Total number of bytes replicated to this bucket from another source bucket. | -| `minio_bucket_replication_sent_bytes` | Total number of bytes replicated to the target bucket. | -| `minio_bucket_traffic_received_bytes` | Total number of S3 bytes received for this bucket. | -| `minio_bucket_traffic_sent_bytes` | Total number of S3 bytes sent for this bucket. | -| `minio_bucket_usage_object_total` | Total number of objects. | -| `minio_bucket_usage_total_bytes` | Total bucket size in bytes. | -| `minio_cache_hits_total` | Total number of drive cache hits. | -| `minio_cache_missed_total` | Total number of drive cache misses. | -| `minio_cache_sent_bytes` | Total number of bytes served from cache. | -| `minio_cache_total_bytes` | Total size of cache drive in bytes. | -| `minio_cache_usage_info` | Total percentage cache usage, value of 1 indicates high and 0 low, label level is set as well. | -| `minio_cache_used_bytes` | Current cache usage in bytes. | -| `minio_cluster_capacity_raw_free_bytes` | Total free capacity online in the cluster. | -| `minio_cluster_capacity_raw_total_bytes` | Total capacity online in the cluster. | -| `minio_cluster_capacity_usable_free_bytes` | Total free usable capacity online in the cluster. | -| `minio_cluster_capacity_usable_total_bytes` | Total usable capacity online in the cluster. | -| `minio_cluster_disk_offline_total` | Total drives offline. | -| `minio_cluster_disk_online_total` | Total drives online. | -| `minio_cluster_disk_total` | Total drives. | -| `minio_cluster_ilm_transitioned_bytes` | Total bytes transitioned to a tier. | -| `minio_cluster_ilm_transitioned_objects` | Total number of objects transitioned to a tier. | -| `minio_cluster_ilm_transitioned_versions` | Total number of versions transitioned to a tier. | -| `minio_cluster_kms_online` | Reports whether the KMS is online (1) or offline (0). | -| `minio_cluster_kms_request_error` | Number of KMS requests that failed due to some error. (HTTP 4xx status code). | -| `minio_cluster_kms_request_failure` | Number of KMS requests that failed due to some internal failure. (HTTP 5xx status code). | -| `minio_cluster_kms_request_success` | Number of KMS requests that succeeded. | -| `minio_cluster_kms_uptime` | The time the KMS has been up and running in seconds. | -| `minio_cluster_nodes_offline_total` | Total number of MinIO nodes offline. | -| `minio_cluster_nodes_online_total` | Total number of MinIO nodes online. | -| `minio_heal_objects_errors_total` | Objects for which healing failed in current self healing run. | -| `minio_heal_objects_heal_total` | Objects healed in current self healing run. | -| `minio_heal_objects_total` | Objects scanned in current self healing run. | -| `minio_heal_time_last_activity_nano_seconds` | Time elapsed (in nano seconds) since last self healing activity. This is set to -1 until initial self heal activity. | -| `minio_inter_node_traffic_dial_avg_time` | Average time of internodes TCP dial calls. | -| `minio_inter_node_traffic_dial_errors` | Total number of internode TCP dial timeouts and errors. | -| `minio_inter_node_traffic_errors_total` | Total number of failed internode calls. | -| `minio_inter_node_traffic_received_bytes` | Total number of bytes received from other peer nodes. | -| `minio_inter_node_traffic_sent_bytes` | Total number of bytes sent to the other peer nodes. | -| `minio_minio_update_percent` | Total percentage cache usage. | -| `minio_node_disk_free_bytes` | Total storage available on a drive. | -| `minio_node_disk_free_inodes` | Total free inodes. | -| `minio_node_disk_latency_us` | Average last minute latency in µs for drive API storage operations. | -| `minio_node_disk_offline_total` | Total drives offline. | -| `minio_node_disk_online_total` | Total drives online. | -| `minio_node_disk_total` | Total drives. | -| `minio_node_disk_total_bytes` | Total storage on a drive. | -| `minio_node_disk_used_bytes` | Total storage used on a drive. | -| `minio_node_file_descriptor_limit_total` | Limit on total number of open file descriptors for the MinIO Server process. | -| `minio_node_file_descriptor_open_total` | Total number of open file descriptors by the MinIO Server process. | -| `minio_node_go_routine_total` | Total number of go routines running. | -| `minio_node_iam_last_sync_duration_millis` | Last successful IAM data sync duration in milliseconds. | -| `minio_node_iam_since_last_sync_millis` | Time (in milliseconds) since last successful IAM data sync. This is set to 0 until the first sync after server start. | -| `minio_node_iam_sync_failures` | Number of failed IAM data syncs since server start. | -| `minio_node_iam_sync_successes` | Number of successful IAM data syncs since server start. | -| `minio_node_ilm_expiry_pending_tasks` | Number of pending ILM expiry tasks in the queue. | -| `minio_node_ilm_transition_active_tasks` | Number of active ILM transition tasks. | -| `minio_node_ilm_transition_pending_tasks` | Number of pending ILM transition tasks in the queue. | -| `minio_node_ilm_versions_scanned` | Total number of object versions checked for ilm actions since server start. | -| `minio_node_io_rchar_bytes` | Total bytes read by the process from the underlying storage system including cache, /proc/[pid]/io rchar. | -| `minio_node_io_read_bytes` | Total bytes read by the process from the underlying storage system, /proc/[pid]/io read_bytes. | -| `minio_node_io_wchar_bytes` | Total bytes written by the process to the underlying storage system including page cache, /proc/[pid]/io wchar. | -| `minio_node_io_write_bytes` | Total bytes written by the process to the underlying storage system, /proc/[pid]/io write_bytes. | -| `minio_node_process_cpu_total_seconds` | Total user and system CPU time spent in seconds. | -| `minio_node_process_resident_memory_bytes` | Resident memory size in bytes. | -| `minio_node_process_starttime_seconds` | Start time for MinIO process per node, time in seconds since Unix epoc. | -| `minio_node_process_uptime_seconds` | Uptime for MinIO process per node in seconds. | -| `minio_node_scanner_bucket_scans_finished` | Total number of bucket scans finished since server start. | -| `minio_node_scanner_bucket_scans_started` | Total number of bucket scans started since server start. | -| `minio_node_scanner_directories_scanned` | Total number of directories scanned since server start. | -| `minio_node_scanner_objects_scanned` | Total number of unique objects scanned since server start. | -| `minio_node_scanner_versions_scanned` | Total number of object versions scanned since server start. | -| `minio_node_syscall_read_total` | Total read SysCalls to the kernel. /proc/[pid]/io syscr. | -| `minio_node_syscall_write_total` | Total write SysCalls to the kernel. /proc/[pid]/io syscw. | -| `minio_notify_current_send_in_progress` | Number of concurrent async Send calls active to all targets. | -| `minio_notify_target_queue_length` | Number of unsent notifications in queue for target. | -| `minio_s3_requests_4xx_errors_total` | Total number S3 requests with (4xx) errors. | -| `minio_s3_requests_5xx_errors_total` | Total number S3 requests with (5xx) errors. | -| `minio_s3_requests_canceled_total` | Total number S3 requests that were canceled from the client while processing. | -| `minio_s3_requests_errors_total` | Total number S3 requests with (4xx and 5xx) errors. | -| `minio_s3_requests_incoming_total` | Volatile number of total incoming S3 requests. | -| `minio_s3_requests_inflight_total` | Total number of S3 requests currently in flight. | -| `minio_s3_requests_rejected_auth_total` | Total number S3 requests rejected for auth failure. | -| `minio_s3_requests_rejected_header_total` | Total number S3 requests rejected for invalid header. | -| `minio_s3_requests_rejected_invalid_total` | Total number S3 invalid requests. | -| `minio_s3_requests_rejected_timestamp_total` | Total number S3 requests rejected for invalid timestamp. | -| `minio_s3_requests_total` | Total number S3 requests. | -| `minio_s3_requests_waiting_total` | Number of S3 requests in the waiting queue. | -| `minio_s3_time_ttfb_seconds_distribution` | Distribution of the time to first byte across API calls. | -| `minio_s3_traffic_received_bytes` | Total number of s3 bytes received. | -| `minio_s3_traffic_sent_bytes` | Total number of s3 bytes sent. | -| `minio_software_commit_info` | Git commit hash for the MinIO release. | -| `minio_software_version_info` | MinIO Release tag for the server. | -| `minio_usage_last_activity_nano_seconds` | Time elapsed (in nano seconds) since last scan activity. This is set to 0 until first scan cycle. |