Convert errors to OC status

This commit is contained in:
Brian Goff
2018-09-21 13:13:10 -07:00
parent 2fc82818ae
commit 8e29415bf7
4 changed files with 60 additions and 5 deletions

8
Gopkg.lock generated
View File

@@ -179,15 +179,16 @@
revision = "a41693b7b7afb422c7ecb1028458ab27da047bbb"
[[projects]]
digest = "1:7393d591b1707b6bd40171878d13aada2f7fa921cd0a500406d65fd3966ca2f4"
digest = "1:62e5b997b5ada9b5f71e759c3474f2a0de8de1b21473bab9e4f98c5aa69c05eb"
name = "github.com/cpuguy83/strongerrors"
packages = [
".",
"status",
"status/ocstatus",
]
pruneopts = "NUT"
revision = "d3f3ceac8165d8532efb6aa406399545de78d967"
version = "v0.2.0"
revision = "05f877ca1e627f0a1e01902ba78c63f1ef7db5a3"
version = "v0.2.1"
[[projects]]
digest = "1:a2c1d0e43bd3baaa071d1b9ed72c27d78169b2b269f71c105ac4ba34b1be4a39"
@@ -1451,6 +1452,7 @@
"github.com/cenkalti/backoff",
"github.com/cpuguy83/strongerrors",
"github.com/cpuguy83/strongerrors/status",
"github.com/cpuguy83/strongerrors/status/ocstatus",
"github.com/dimchansky/utfbom",
"github.com/docker/docker/api/types/strslice",
"github.com/docker/go-connections/nat",

View File

@@ -79,6 +79,9 @@
name = "k8s.io/client-go"
version = "7.0.0"
[[constraint]]
name = "github.com/cpuguy83/strongerrors"
version = "0.2.1"
# These are required for HyperHQ
[[override]]

View File

@@ -5,6 +5,7 @@ import (
"strings"
"time"
"github.com/cpuguy83/strongerrors/status/ocstatus"
"github.com/pkg/errors"
"github.com/virtual-kubelet/virtual-kubelet/providers/azure/client/aci"
"go.opencensus.io/trace"
@@ -88,7 +89,7 @@ func (p *ACIProvider) GetStatsSummary(ctx context.Context) (summary *stats.Summa
Types: []aci.MetricType{aci.MetricTypeCPUUsage, aci.MetricTypeMemoryUsage},
})
if err != nil {
span.SetStatus(trace.Status{Code: trace.StatusCodeUnknown, Message: err.Error()})
span.SetStatus(ocstatus.FromError(err))
return errors.Wrapf(err, "error fetching cpu/mem stats for container group %s", cgName)
}
span.Annotate(nil, "Got system stats")
@@ -100,7 +101,7 @@ func (p *ACIProvider) GetStatsSummary(ctx context.Context) (summary *stats.Summa
Types: []aci.MetricType{aci.MetricTyperNetworkBytesRecievedPerSecond, aci.MetricTyperNetworkBytesTransmittedPerSecond},
})
if err != nil {
span.SetStatus(trace.Status{Code: trace.StatusCodeUnknown, Message: err.Error()})
span.SetStatus(ocstatus.FromError(err))
return errors.Wrapf(err, "error fetching network stats for container group %s", cgName)
}
span.Annotate(nil, "Got network stats")

View File

@@ -0,0 +1,49 @@
// 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()}
}