57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package zipartifacts
|
|
|
|
import (
|
|
"errors"
|
|
)
|
|
|
|
// These are exit codes used by subprocesses in cmd/gitlab-zip-xxx. We also use
|
|
// them to map errors and error messages that we use as label in Prometheus.
|
|
const (
|
|
CodeNotZip = 10 + iota
|
|
CodeEntryNotFound
|
|
CodeArchiveNotFound
|
|
CodeLimitsReached
|
|
CodeUnknownError
|
|
)
|
|
|
|
var (
|
|
ErrorCode = map[int]error{
|
|
CodeNotZip: errors.New("zip archive format invalid"),
|
|
CodeEntryNotFound: errors.New("zip entry not found"),
|
|
CodeArchiveNotFound: errors.New("zip archive not found"),
|
|
CodeLimitsReached: errors.New("zip processing limits reached"),
|
|
CodeUnknownError: errors.New("zip processing unknown error"),
|
|
}
|
|
|
|
ErrorLabel = map[int]string{
|
|
CodeNotZip: "archive_invalid",
|
|
CodeEntryNotFound: "entry_not_found",
|
|
CodeArchiveNotFound: "archive_not_found",
|
|
CodeLimitsReached: "limits_reached",
|
|
CodeUnknownError: "unknown_error",
|
|
}
|
|
|
|
ErrBadMetadata = errors.New("zip artifacts metadata invalid")
|
|
)
|
|
|
|
// ExitCodeByError find an os.Exit code for a corresponding error.
|
|
// CodeUnkownError in case it can not be found.
|
|
func ExitCodeByError(err error) int {
|
|
for c, e := range ErrorCode {
|
|
if err == e {
|
|
return c
|
|
}
|
|
}
|
|
|
|
return CodeUnknownError
|
|
}
|
|
|
|
// ErrorLabelByCode returns a Prometheus counter label associated with an exit code.
|
|
func ErrorLabelByCode(code int) string {
|
|
label, ok := ErrorLabel[code]
|
|
if ok {
|
|
return label
|
|
}
|
|
|
|
return ErrorLabel[CodeUnknownError]
|
|
}
|