Skip to content

Commit ea0fc10

Browse files
committed
migrate opencensus bridge to errors.Join
1 parent 68241af commit ea0fc10

File tree

2 files changed

+29
-41
lines changed

2 files changed

+29
-41
lines changed

bridge/opencensus/internal/ocmetric/metric.go

+23-35
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,8 @@ import (
2525
)
2626

2727
var (
28-
errConversion = errors.New("converting from OpenCensus to OpenTelemetry")
2928
errAggregationType = errors.New("unsupported OpenCensus aggregation type")
3029
errMismatchedValueTypes = errors.New("wrong value type for data point")
31-
errNumberDataPoint = errors.New("converting a number data point")
32-
errHistogramDataPoint = errors.New("converting a histogram data point")
3330
errNegativeDistributionCount = errors.New("distribution count is negative")
3431
errNegativeBucketCount = errors.New("distribution bucket count is negative")
3532
errMismatchedAttributeKeyValues = errors.New("mismatched number of attribute keys and values")
@@ -38,14 +35,14 @@ var (
3835
// ConvertMetrics converts metric data from OpenCensus to OpenTelemetry.
3936
func ConvertMetrics(ocmetrics []*ocmetricdata.Metric) ([]metricdata.Metrics, error) {
4037
otelMetrics := make([]metricdata.Metrics, 0, len(ocmetrics))
41-
var errInfo []string
38+
var err error
4239
for _, ocm := range ocmetrics {
4340
if ocm == nil {
4441
continue
4542
}
46-
agg, err := convertAggregation(ocm)
47-
if err != nil {
48-
errInfo = append(errInfo, err.Error())
43+
agg, aggregationErr := convertAggregation(ocm)
44+
if aggregationErr != nil {
45+
err = errors.Join(err, fmt.Errorf("error converting metric %v: %w", ocm.Descriptor.Name, aggregationErr))
4946
continue
5047
}
5148
otelMetrics = append(otelMetrics, metricdata.Metrics{
@@ -55,11 +52,10 @@ func ConvertMetrics(ocmetrics []*ocmetricdata.Metric) ([]metricdata.Metrics, err
5552
Data: agg,
5653
})
5754
}
58-
var aggregatedError error
59-
if len(errInfo) > 0 {
60-
aggregatedError = fmt.Errorf("%w: %q", errConversion, errInfo)
55+
if err != nil {
56+
return otelMetrics, fmt.Errorf("error converting from OpenCensus to OpenTelemetry: %w", err)
6157
}
62-
return otelMetrics, aggregatedError
58+
return otelMetrics, nil
6359
}
6460

6561
// convertAggregation produces an aggregation based on the OpenCensus Metric.
@@ -97,17 +93,17 @@ func convertSum[N int64 | float64](labelKeys []ocmetricdata.LabelKey, ts []*ocme
9793
// convertNumberDataPoints converts OpenCensus TimeSeries to OpenTelemetry DataPoints.
9894
func convertNumberDataPoints[N int64 | float64](labelKeys []ocmetricdata.LabelKey, ts []*ocmetricdata.TimeSeries) ([]metricdata.DataPoint[N], error) {
9995
var points []metricdata.DataPoint[N]
100-
var errInfo []string
96+
var err error
10197
for _, t := range ts {
102-
attrs, err := convertAttrs(labelKeys, t.LabelValues)
103-
if err != nil {
104-
errInfo = append(errInfo, err.Error())
98+
attrs, attrsErr := convertAttrs(labelKeys, t.LabelValues)
99+
if attrsErr != nil {
100+
err = errors.Join(err, attrsErr)
105101
continue
106102
}
107103
for _, p := range t.Points {
108104
v, ok := p.Value.(N)
109105
if !ok {
110-
errInfo = append(errInfo, fmt.Sprintf("%v: %q", errMismatchedValueTypes, p.Value))
106+
err = errors.Join(err, fmt.Errorf("%w: %q", errMismatchedValueTypes, p.Value))
111107
continue
112108
}
113109
points = append(points, metricdata.DataPoint[N]{
@@ -118,37 +114,33 @@ func convertNumberDataPoints[N int64 | float64](labelKeys []ocmetricdata.LabelKe
118114
})
119115
}
120116
}
121-
var aggregatedError error
122-
if len(errInfo) > 0 {
123-
aggregatedError = fmt.Errorf("%w: %v", errNumberDataPoint, errInfo)
124-
}
125-
return points, aggregatedError
117+
return points, err
126118
}
127119

128120
// convertHistogram converts OpenCensus Distribution timeseries to an
129121
// OpenTelemetry Histogram aggregation.
130122
func convertHistogram(labelKeys []ocmetricdata.LabelKey, ts []*ocmetricdata.TimeSeries) (metricdata.Histogram[float64], error) {
131123
points := make([]metricdata.HistogramDataPoint[float64], 0, len(ts))
132-
var errInfo []string
124+
var err error
133125
for _, t := range ts {
134-
attrs, err := convertAttrs(labelKeys, t.LabelValues)
135-
if err != nil {
136-
errInfo = append(errInfo, err.Error())
126+
attrs, attrsErr := convertAttrs(labelKeys, t.LabelValues)
127+
if attrsErr != nil {
128+
err = errors.Join(err, attrsErr)
137129
continue
138130
}
139131
for _, p := range t.Points {
140132
dist, ok := p.Value.(*ocmetricdata.Distribution)
141133
if !ok {
142-
errInfo = append(errInfo, fmt.Sprintf("%v: %d", errMismatchedValueTypes, p.Value))
134+
err = errors.Join(err, fmt.Errorf("%w: %d", errMismatchedValueTypes, p.Value))
143135
continue
144136
}
145-
bucketCounts, err := convertBucketCounts(dist.Buckets)
146-
if err != nil {
147-
errInfo = append(errInfo, err.Error())
137+
bucketCounts, bucketErr := convertBucketCounts(dist.Buckets)
138+
if bucketErr != nil {
139+
err = errors.Join(err, bucketErr)
148140
continue
149141
}
150142
if dist.Count < 0 {
151-
errInfo = append(errInfo, fmt.Sprintf("%v: %d", errNegativeDistributionCount, dist.Count))
143+
err = errors.Join(err, fmt.Errorf("%w: %d", errNegativeDistributionCount, dist.Count))
152144
continue
153145
}
154146
// TODO: handle exemplars
@@ -163,11 +155,7 @@ func convertHistogram(labelKeys []ocmetricdata.LabelKey, ts []*ocmetricdata.Time
163155
})
164156
}
165157
}
166-
var aggregatedError error
167-
if len(errInfo) > 0 {
168-
aggregatedError = fmt.Errorf("%w: %v", errHistogramDataPoint, errInfo)
169-
}
170-
return metricdata.Histogram[float64]{DataPoints: points, Temporality: metricdata.CumulativeTemporality}, aggregatedError
158+
return metricdata.Histogram[float64]{DataPoints: points, Temporality: metricdata.CumulativeTemporality}, err
171159
}
172160

173161
// convertBucketCounts converts from OpenCensus bucket counts to slice of uint64.

bridge/opencensus/internal/ocmetric/metric_test.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ func TestConvertMetrics(t *testing.T) {
461461
},
462462
},
463463
},
464-
expectedErr: errConversion,
464+
expectedErr: errNegativeDistributionCount,
465465
}, {
466466
desc: "histogram with negative bucket count",
467467
input: []*ocmetricdata.Metric{
@@ -488,7 +488,7 @@ func TestConvertMetrics(t *testing.T) {
488488
},
489489
},
490490
},
491-
expectedErr: errConversion,
491+
expectedErr: errNegativeBucketCount,
492492
}, {
493493
desc: "histogram with non-histogram datapoint type",
494494
input: []*ocmetricdata.Metric{
@@ -509,7 +509,7 @@ func TestConvertMetrics(t *testing.T) {
509509
},
510510
},
511511
},
512-
expectedErr: errConversion,
512+
expectedErr: errMismatchedValueTypes,
513513
}, {
514514
desc: "sum with non-sum datapoint type",
515515
input: []*ocmetricdata.Metric{
@@ -530,7 +530,7 @@ func TestConvertMetrics(t *testing.T) {
530530
},
531531
},
532532
},
533-
expectedErr: errConversion,
533+
expectedErr: errMismatchedValueTypes,
534534
}, {
535535
desc: "gauge with non-gauge datapoint type",
536536
input: []*ocmetricdata.Metric{
@@ -551,7 +551,7 @@ func TestConvertMetrics(t *testing.T) {
551551
},
552552
},
553553
},
554-
expectedErr: errConversion,
554+
expectedErr: errMismatchedValueTypes,
555555
}, {
556556
desc: "unsupported Gauge Distribution type",
557557
input: []*ocmetricdata.Metric{
@@ -564,7 +564,7 @@ func TestConvertMetrics(t *testing.T) {
564564
},
565565
},
566566
},
567-
expectedErr: errConversion,
567+
expectedErr: errAggregationType,
568568
},
569569
} {
570570
t.Run(tc.desc, func(t *testing.T) {

0 commit comments

Comments
 (0)