derrors

package
v0.0.0-...-ddbbf7b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 18, 2024 License: BSD-3-Clause Imports: 4 Imported by: 0

Documentation

Overview

Package derrors defines internal error values to categorize the different types error semantics we support.

Index

Constants

This section is empty.

Variables

View Source
var (
	// Unsupported operation indicates that a requested operation cannot be performed, because it
	// is unsupported. It is used here instead of errors.ErrUnsupported until we are able to depend
	// on Go 1.21 in the pkgsite repo.
	Unsupported = errors.New("unsupported operation")

	// HasIncompletePackages indicates a module containing packages that
	// were processed with a 60x error code.
	HasIncompletePackages = errors.New("has incomplete packages")

	// NotFound indicates that a requested entity was not found (HTTP 404).
	NotFound = errors.New("not found")

	// NotFetched means that the proxy returned "not found" with the
	// Disable-Module-Fetch header set. We don't know if the module really
	// doesn't exist, or the proxy just didn't fetch it.
	NotFetched = errors.New("not fetched by proxy")

	// InvalidArgument indicates that the input into the request is invalid in
	// some way (HTTP 400).
	InvalidArgument = errors.New("invalid argument")
	// BadModule indicates a problem with a module.
	BadModule = errors.New("bad module")
	// Excluded indicates that the module is excluded. (See internal/postgres/excluded.go.)
	Excluded = errors.New("excluded")

	// AlternativeModule indicates that the path of the module zip file differs
	// from the path specified in the go.mod file.
	AlternativeModule = errors.New("alternative module")

	// ModuleTooLarge indicates that the module is too large for us to process.
	// This should be temporary: we should obtain sufficient resources to process
	// any module, up to the max size allowed by the proxy.
	ModuleTooLarge = errors.New("module too large")

	// SheddingLoad indicates that the server is overloaded and cannot process the
	// module at this time.
	SheddingLoad = errors.New("shedding load")

	// Cleaned indicates that the module version was cleaned from the DB and
	// shouldn't be reprocessed.
	Cleaned = errors.New("cleaned")

	// Unknown indicates that the error has unknown semantics.
	Unknown = errors.New("unknown")

	// ProxyTimedOut indicates that a request timed out when fetching from the Module Mirror.
	ProxyTimedOut = errors.New("proxy timed out")

	// ProxyError is used to capture non-actionable server errors returned from the proxy.
	ProxyError = errors.New("proxy error")

	// VulnDBError is used to capture non-actionable server errors returned from vulndb.
	VulnDBError = errors.New("vulndb error")

	// PackageBuildContextNotSupported indicates that the build context for the
	// package is not supported.
	PackageBuildContextNotSupported = errors.New("package build context not supported")
	// PackageMaxImportsLimitExceeded indicates that the package has too many
	// imports.
	PackageMaxImportsLimitExceeded = errors.New("package max imports limit exceeded")
	// PackageMaxFileSizeLimitExceeded indicates that the package contains a file
	// that exceeds fetch.MaxFileSize.
	PackageMaxFileSizeLimitExceeded = errors.New("package max file size limit exceeded")
	// PackageDocumentationHTMLTooLarge indicates that the rendered documentation
	// HTML size exceeded the specified limit for dochtml.RenderOptions.
	PackageDocumentationHTMLTooLarge = errors.New("package documentation HTML is too large")
	// PackageBadImportPath represents an error loading a package because its
	// contents do not make up a valid package. This can happen, for
	// example, if the .go files fail to parse or declare different package
	// names.
	// Go files were found in a directory, but the resulting import path is invalid.
	PackageBadImportPath = errors.New("package bad import path")
	// PackageInvalidContents represents an error loading a package because
	// its contents do not make up a valid package. This can happen, for
	// example, if the .go files fail to parse or declare different package
	// names.
	PackageInvalidContents = errors.New("package invalid contents")

	// DBModuleInsertInvalid represents a module that was successfully
	// fetched but could not be inserted due to invalid arguments to
	// postgres.InsertModule.
	DBModuleInsertInvalid = errors.New("db module insert invalid")

	// ReprocessStatusOK indicates that the module to be reprocessed
	// previously had a status of http.StatusOK.
	ReprocessStatusOK = errors.New("reprocess status ok")
	// ReprocessHasIncompletePackages indicates that the module to be reprocessed
	// previously had a status of 290.
	ReprocessHasIncompletePackages = errors.New("reprocess has incomplete packages")
	// ReprocessBadModule indicates that the module to be reprocessed
	// previously had a status of derrors.BadModule.
	ReprocessBadModule = errors.New("reprocess bad module")
	// ReprocessAlternativeModule indicates that the module to be reprocessed
	// previously had a status of derrors.AlternativeModule.
	ReprocessAlternative = errors.New("reprocess alternative module")
	// ReprocessDBModuleInsertInvalid represents a module to be reprocessed
	// that was successfully fetched but could not be inserted due to invalid
	// arguments to postgres.InsertModule.
	ReprocessDBModuleInsertInvalid = errors.New("reprocess db module insert invalid")
)

Functions

func Add

func Add(errp *error, format string, args ...any)

Add adds context to the error. The result cannot be unwrapped to recover the original error. It does nothing when *errp == nil.

Example:

defer derrors.Add(&err, "copy(%s, %s)", src, dst)

See Wrap for an equivalent function that allows the result to be unwrapped.

func FromStatus

func FromStatus(code int, format string, args ...any) error

FromStatus generates an error according for the given status code. It uses the given format string and arguments to create the error string according to the fmt package. If format is the empty string, then the error corresponding to the code is returned unwrapped.

If code is http.StatusOK, it returns nil.

func Report

func Report(err error)

Report uses the Reporter to report an error.

func SetReporter

func SetReporter(r Reporter)

SetReporter the Reporter to use, for use by Report.

func ToReprocessStatus

func ToReprocessStatus(status int) int

ToReprocessStatus returns the reprocess status code corresponding to the provided status.

func ToStatus

func ToStatus(err error) int

ToStatus returns a status code corresponding to err.

func Wrap

func Wrap(errp *error, format string, args ...any)

Wrap adds context to the error and allows unwrapping the result to recover the original error.

Example:

defer derrors.Wrap(&err, "copy(%s, %s)", src, dst)

See Add for an equivalent function that does not allow the result to be unwrapped.

func WrapAndReport

func WrapAndReport(errp *error, format string, args ...any)

WrapAndReport calls Wrap followed by Report.

func WrapStack

func WrapStack(errp *error, format string, args ...any)

WrapStack is like Wrap, but adds a stack trace if there isn't one already.

Types

type Reporter

type Reporter interface {
	Report(err error, req *http.Request, stack []byte)
}

Reporter is an interface used for reporting errors.

type StackError

type StackError struct {
	Stack []byte
	// contains filtered or unexported fields
}

StackError wraps an error and adds a stack trace.

func NewStackError

func NewStackError(err error) *StackError

NewStackError returns a StackError, capturing a stack trace.

func (*StackError) Error

func (e *StackError) Error() string

func (*StackError) Unwrap

func (e *StackError) Unwrap() error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL