Skip to content

Commit 12a0a29

Browse files
authored
Make conversion of histogram and summary compatible with prometheus (#46)
Signed-off-by: Bogdan Drutu <[email protected]>
1 parent 1bd2247 commit 12a0a29

File tree

2 files changed

+18
-15
lines changed

2 files changed

+18
-15
lines changed

protocol/otlp/metrics.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import (
3333
var (
3434
// Some standard dimension keys.
3535
// upper bound dimension key for histogram buckets.
36-
upperBoundDimensionKey = "upper_bound"
36+
upperBoundDimensionKey = "le"
3737

3838
// infinity bound dimension value is used on all histograms.
3939
infinityBoundSFxDimValue = float64ToDimValue(math.Inf(1))
@@ -219,7 +219,7 @@ func convertHistogram(histDPs []*metricsv1.HistogramDataPoint, typ datapoint.Met
219219
i++
220220

221221
sumPt := &out[i]
222-
sumPt.Name = name
222+
sumPt.Name = name + "_sum"
223223
sumPt.Type = typ
224224
sum := histDP.GetSum()
225225
sumPt.DP.Attributes = stringAttrs
@@ -236,6 +236,7 @@ func convertHistogram(histDPs []*metricsv1.HistogramDataPoint, typ datapoint.Met
236236
continue
237237
}
238238

239+
var le int64
239240
for j, c := range counts {
240241
bound := infinityBoundSFxDimValue
241242
if j < len(bounds) {
@@ -254,7 +255,8 @@ func convertHistogram(histDPs []*metricsv1.HistogramDataPoint, typ datapoint.Met
254255
},
255256
})
256257
dp.DP.TimeUnixNano = histDP.GetTimeUnixNano()
257-
dp.DP.Value = &metricsv1.NumberDataPoint_AsInt{AsInt: int64(c)}
258+
le += int64(c)
259+
dp.DP.Value = &metricsv1.NumberDataPoint_AsInt{AsInt: le}
258260
i++
259261
}
260262
}
@@ -289,7 +291,7 @@ func convertSummaryDataPoints(
289291
i++
290292

291293
sumPt := &out[i]
292-
sumPt.Name = name
294+
sumPt.Name = name + "_sum"
293295
sumPt.Type = datapoint.Counter
294296
sumPt.DP.Attributes = stringAttrs
295297
sumPt.DP.TimeUnixNano = inDp.GetTimeUnixNano()

protocol/otlp/metrics_test.go

+12-11
Original file line numberDiff line numberDiff line change
@@ -528,11 +528,11 @@ func Test_FromMetrics(t *testing.T) {
528528
expectedFromHistogram("double_delta_histo", labelMap, doubleHistDP, true),
529529
[]*datapoint.Datapoint{
530530
int64SFxDataPoint("double_histo_bad_counts_count", datapoint.Counter, labelMap, int64(doubleHistDP.Count)),
531-
doubleSFxDataPoint("double_histo_bad_counts", datapoint.Counter, labelMap, *doubleHistDP.Sum),
531+
doubleSFxDataPoint("double_histo_bad_counts_sum", datapoint.Counter, labelMap, *doubleHistDP.Sum),
532532
},
533533
[]*datapoint.Datapoint{
534534
int64SFxDataPoint("int_histo_bad_counts_count", datapoint.Counter, labelMap, int64(intHistDP.Count)),
535-
doubleSFxDataPoint("int_histo_bad_counts", datapoint.Counter, labelMap, *intHistDP.Sum),
535+
doubleSFxDataPoint("int_histo_bad_counts_sum", datapoint.Counter, labelMap, *intHistDP.Sum),
536536
},
537537
),
538538
},
@@ -776,27 +776,29 @@ func expectedFromHistogram(
776776

777777
dps = append(dps,
778778
int64SFxDataPoint(metricName+"_count", typ, dims, int64(histDP.GetCount())),
779-
doubleSFxDataPoint(metricName, typ, dims, histDP.GetSum()))
779+
doubleSFxDataPoint(metricName+"_sum", typ, dims, histDP.GetSum()))
780780

781781
explicitBounds := histDP.GetExplicitBounds()
782782
if explicitBounds == nil {
783783
return dps
784784
}
785+
var le int64
785786
for i := 0; i < len(explicitBounds); i++ {
786787
dimsCopy := cloneStringMap(dims)
787788
dimsCopy[upperBoundDimensionKey] = float64ToDimValue(explicitBounds[i])
788-
dps = append(dps, int64SFxDataPoint(metricName+"_bucket", typ, dimsCopy, int64(buckets[i])))
789+
le += int64(buckets[i])
790+
dps = append(dps, int64SFxDataPoint(metricName+"_bucket", typ, dimsCopy, le))
789791
}
790792
dimsCopy := cloneStringMap(dims)
791793
dimsCopy[upperBoundDimensionKey] = float64ToDimValue(math.Inf(1))
792-
dps = append(dps, int64SFxDataPoint(metricName+"_bucket", typ, dimsCopy, int64(buckets[len(buckets)-1])))
794+
le += int64(buckets[len(buckets)-1])
795+
dps = append(dps, int64SFxDataPoint(metricName+"_bucket", typ, dimsCopy, le))
793796
return dps
794797
}
795798

796799
func expectedFromSummary(name string, labelMap map[string]string, count int64, sumVal float64) []*datapoint.Datapoint {
797-
countName := name + "_count"
798-
countPt := int64SFxDataPoint(countName, datapoint.Counter, labelMap, count)
799-
sumPt := doubleSFxDataPoint(name, datapoint.Counter, labelMap, sumVal)
800+
countPt := int64SFxDataPoint(name+"_count", datapoint.Counter, labelMap, count)
801+
sumPt := doubleSFxDataPoint(name+"_sum", datapoint.Counter, labelMap, sumVal)
800802
out := []*datapoint.Datapoint{countPt, sumPt}
801803
quantileDimVals := []string{"0.25", "0.5", "0.75", "1"}
802804
for i := 0; i < 4; i++ {
@@ -813,9 +815,8 @@ func expectedFromSummary(name string, labelMap map[string]string, count int64, s
813815
}
814816

815817
func expectedFromEmptySummary(name string, labelMap map[string]string, count int64, sumVal float64) []*datapoint.Datapoint {
816-
countName := name + "_count"
817-
countPt := int64SFxDataPoint(countName, datapoint.Counter, labelMap, count)
818-
sumPt := doubleSFxDataPoint(name, datapoint.Counter, labelMap, sumVal)
818+
countPt := int64SFxDataPoint(name+"_count", datapoint.Counter, labelMap, count)
819+
sumPt := doubleSFxDataPoint(name+"_sum", datapoint.Counter, labelMap, sumVal)
819820
return []*datapoint.Datapoint{countPt, sumPt}
820821
}
821822

0 commit comments

Comments
 (0)