@@ -22,6 +22,7 @@ directly to Stackdriver Metrics.
2222import (
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