debian-mirror-gitlab/workhorse/internal/zipartifacts/errors.go
2021-02-22 17:27:13 +05:30

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]
}