50 lines
1.7 KiB
Go
50 lines
1.7 KiB
Go
// Package ocstatus provides error status conversions to opencencus status trace.StatusCode
|
|
package ocstatus
|
|
|
|
import (
|
|
"github.com/cpuguy83/strongerrors"
|
|
"go.opencensus.io/trace"
|
|
)
|
|
|
|
// FromError makes an opencencus trace.Status from the passed in error.
|
|
func FromError(err error) trace.Status {
|
|
if err == nil {
|
|
return trace.Status{Code: trace.StatusCodeOK}
|
|
}
|
|
|
|
switch {
|
|
case strongerrors.IsNotFound(err):
|
|
return status(trace.StatusCodeNotFound, err)
|
|
case strongerrors.IsConflict(err), strongerrors.IsNotModified(err):
|
|
return status(trace.StatusCodeFailedPrecondition, err)
|
|
case strongerrors.IsInvalidArgument(err):
|
|
return status(trace.StatusCodeInvalidArgument, err)
|
|
case strongerrors.IsAlreadyExists(err):
|
|
return status(trace.StatusCodeAlreadyExists, err)
|
|
case strongerrors.IsCancelled(err):
|
|
return status(trace.StatusCodeCancelled, err)
|
|
case strongerrors.IsDeadline(err):
|
|
return status(trace.StatusCodeDeadlineExceeded, err)
|
|
case strongerrors.IsUnauthorized(err):
|
|
return status(trace.StatusCodePermissionDenied, err)
|
|
case strongerrors.IsUnauthenticated(err):
|
|
return status(trace.StatusCodeUnauthenticated, err)
|
|
case strongerrors.IsForbidden(err), strongerrors.IsNotImplemented(err):
|
|
return status(trace.StatusCodeUnimplemented, err)
|
|
case strongerrors.IsExhausted(err):
|
|
return status(trace.StatusCodeResourceExhausted, err)
|
|
case strongerrors.IsDataLoss(err):
|
|
return status(trace.StatusCodeDataLoss, err)
|
|
case strongerrors.IsSystem(err):
|
|
return status(trace.StatusCodeInternal, err)
|
|
case strongerrors.IsUnavailable(err):
|
|
return status(trace.StatusCodeUnavailable, err)
|
|
default:
|
|
return status(trace.StatusCodeUnknown, err)
|
|
}
|
|
}
|
|
|
|
func status(code int32, err error) trace.Status {
|
|
return trace.Status{Code: code, Message: err.Error()}
|
|
}
|