Skip to content
This repository was archived by the owner on Oct 3, 2023. It is now read-only.

Commit 2827354

Browse files
authored
stop ignoring errors while processing metrics. (#236)
1 parent 9366d36 commit 2827354

1 file changed

Lines changed: 17 additions & 5 deletions

File tree

metrics.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ directly to Stackdriver Metrics.
2222
import (
2323
"context"
2424
"fmt"
25+
"strings"
2526

2627
"github.com/golang/protobuf/proto"
2728
"github.com/golang/protobuf/ptypes/any"
@@ -72,6 +73,8 @@ func (se *statsExporter) uploadMetrics(metrics []*metricdata.Metric) error {
7273
ctx, cancel := newContextWithTimeout(se.o.Context, se.o.Timeout)
7374
defer cancel()
7475

76+
var errors []error
77+
7578
ctx, span := trace.StartSpan(
7679
ctx,
7780
"contrib.go.opencensus.io/exporter/stackdriver.uploadMetrics",
@@ -83,7 +86,7 @@ func (se *statsExporter) uploadMetrics(metrics []*metricdata.Metric) error {
8386
// Now create the metric descriptor remotely.
8487
if err := se.createMetricDescriptorFromMetric(ctx, metric); err != nil {
8588
span.SetStatus(trace.Status{Code: trace.StatusCodeUnknown, Message: err.Error()})
86-
//TODO: [rghetia] record error metrics.
89+
errors = append(errors, err)
8790
continue
8891
}
8992
}
@@ -93,7 +96,7 @@ func (se *statsExporter) uploadMetrics(metrics []*metricdata.Metric) error {
9396
tsl, err := se.metricToMpbTs(ctx, metric)
9497
if err != nil {
9598
span.SetStatus(trace.Status{Code: trace.StatusCodeUnknown, Message: err.Error()})
96-
//TODO: [rghetia] record error metrics.
99+
errors = append(errors, err)
97100
continue
98101
}
99102
if tsl != nil {
@@ -112,13 +115,22 @@ func (se *statsExporter) uploadMetrics(metrics []*metricdata.Metric) error {
112115
for _, ctsreq := range ctsreql {
113116
if err := createTimeSeries(ctx, se.c, ctsreq); err != nil {
114117
span.SetStatus(trace.Status{Code: trace.StatusCodeUnknown, Message: err.Error()})
115-
// TODO(@rghetia): record error metrics
116-
// return err
118+
errors = append(errors, err)
117119
}
118120
}
119121
}
120122

121-
return nil
123+
numErrors := len(errors)
124+
if numErrors == 0 {
125+
return nil
126+
} else if numErrors == 1 {
127+
return errors[0]
128+
}
129+
errMsgs := make([]string, 0, numErrors)
130+
for _, err := range errors {
131+
errMsgs = append(errMsgs, err.Error())
132+
}
133+
return fmt.Errorf("[%s]", strings.Join(errMsgs, "; "))
122134
}
123135

124136
// metricToMpbTs converts a metric into a list of Stackdriver Monitoring v3 API TimeSeries

0 commit comments

Comments
 (0)