From 8e29415bf7bba0140f6fad5fdd6e8bfbcd03c407 Mon Sep 17 00:00:00 2001 From: Brian Goff Date: Fri, 21 Sep 2018 13:13:10 -0700 Subject: [PATCH] Convert errors to OC status --- Gopkg.lock | 8 +-- Gopkg.toml | 3 ++ providers/azure/metrics.go | 5 +- .../strongerrors/status/ocstatus/status.go | 49 +++++++++++++++++++ 4 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 vendor/github.com/cpuguy83/strongerrors/status/ocstatus/status.go diff --git a/Gopkg.lock b/Gopkg.lock index b408277a2..0432c6dee 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -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", diff --git a/Gopkg.toml b/Gopkg.toml index 11b7c6678..7071778d1 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -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]] diff --git a/providers/azure/metrics.go b/providers/azure/metrics.go index e31634eb1..a6fc83473 100644 --- a/providers/azure/metrics.go +++ b/providers/azure/metrics.go @@ -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") diff --git a/vendor/github.com/cpuguy83/strongerrors/status/ocstatus/status.go b/vendor/github.com/cpuguy83/strongerrors/status/ocstatus/status.go new file mode 100644 index 000000000..e76e19654 --- /dev/null +++ b/vendor/github.com/cpuguy83/strongerrors/status/ocstatus/status.go @@ -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()} +}