Skip to content

Commit 01869ec

Browse files
Aneurysm9friedrichg
authored andcommitted
Add resoure attribute conversion
Signed-off-by: Anthony J Mirabella <[email protected]>
1 parent 53e3748 commit 01869ec

File tree

1 file changed

+69
-1
lines changed

1 file changed

+69
-1
lines changed

pkg/util/push/otlp.go

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import (
1313
"github.com/prometheus/prometheus/prompb"
1414
"github.com/weaveworks/common/httpgrpc"
1515
"github.com/weaveworks/common/middleware"
16+
"go.opentelemetry.io/collector/pdata/pcommon"
17+
"go.opentelemetry.io/collector/pdata/pmetric"
1618
"go.opentelemetry.io/collector/pdata/pmetric/pmetricotlp"
1719
)
1820

@@ -44,7 +46,7 @@ func OTLPHandler(sourceIPs *middleware.SourceIPExtractor, push Func) http.Handle
4446
return
4547
}
4648

47-
tsMap, err := prometheusremotewrite.FromMetrics(req.Metrics(), prometheusremotewrite.Settings{DisableTargetInfo: true})
49+
tsMap, err := prometheusremotewrite.FromMetrics(convertToMetricsAttributes(req.Metrics()), prometheusremotewrite.Settings{DisableTargetInfo: true})
4850
if err != nil {
4951
level.Error(logger).Log("err", err.Error())
5052
http.Error(w, err.Error(), http.StatusBadRequest)
@@ -113,3 +115,69 @@ func makeExemplars(in []prompb.Exemplar) []cortexpb.Exemplar {
113115
}
114116
return out
115117
}
118+
119+
func convertToMetricsAttributes(md pmetric.Metrics) pmetric.Metrics {
120+
cloneMd := pmetric.NewMetrics()
121+
md.CopyTo(cloneMd)
122+
rms := cloneMd.ResourceMetrics()
123+
for i := 0; i < rms.Len(); i++ {
124+
resource := rms.At(i).Resource()
125+
126+
ilms := rms.At(i).ScopeMetrics()
127+
for j := 0; j < ilms.Len(); j++ {
128+
ilm := ilms.At(j)
129+
metricSlice := ilm.Metrics()
130+
for k := 0; k < metricSlice.Len(); k++ {
131+
addAttributesToMetric(metricSlice.At(k), resource.Attributes())
132+
}
133+
}
134+
}
135+
return cloneMd
136+
}
137+
138+
// addAttributesToMetric adds additional labels to the given metric
139+
func addAttributesToMetric(metric pmetric.Metric, labelMap pcommon.Map) {
140+
switch metric.Type() {
141+
case pmetric.MetricTypeGauge:
142+
addAttributesToNumberDataPoints(metric.Gauge().DataPoints(), labelMap)
143+
case pmetric.MetricTypeSum:
144+
addAttributesToNumberDataPoints(metric.Sum().DataPoints(), labelMap)
145+
case pmetric.MetricTypeHistogram:
146+
addAttributesToHistogramDataPoints(metric.Histogram().DataPoints(), labelMap)
147+
case pmetric.MetricTypeSummary:
148+
addAttributesToSummaryDataPoints(metric.Summary().DataPoints(), labelMap)
149+
case pmetric.MetricTypeExponentialHistogram:
150+
addAttributesToExponentialHistogramDataPoints(metric.ExponentialHistogram().DataPoints(), labelMap)
151+
}
152+
}
153+
154+
func addAttributesToNumberDataPoints(ps pmetric.NumberDataPointSlice, newAttributeMap pcommon.Map) {
155+
for i := 0; i < ps.Len(); i++ {
156+
joinAttributeMaps(newAttributeMap, ps.At(i).Attributes())
157+
}
158+
}
159+
160+
func addAttributesToHistogramDataPoints(ps pmetric.HistogramDataPointSlice, newAttributeMap pcommon.Map) {
161+
for i := 0; i < ps.Len(); i++ {
162+
joinAttributeMaps(newAttributeMap, ps.At(i).Attributes())
163+
}
164+
}
165+
166+
func addAttributesToSummaryDataPoints(ps pmetric.SummaryDataPointSlice, newAttributeMap pcommon.Map) {
167+
for i := 0; i < ps.Len(); i++ {
168+
joinAttributeMaps(newAttributeMap, ps.At(i).Attributes())
169+
}
170+
}
171+
172+
func addAttributesToExponentialHistogramDataPoints(ps pmetric.ExponentialHistogramDataPointSlice, newAttributeMap pcommon.Map) {
173+
for i := 0; i < ps.Len(); i++ {
174+
joinAttributeMaps(newAttributeMap, ps.At(i).Attributes())
175+
}
176+
}
177+
178+
func joinAttributeMaps(from, to pcommon.Map) {
179+
from.Range(func(k string, v pcommon.Value) bool {
180+
v.CopyTo(to.PutEmpty(k))
181+
return true
182+
})
183+
}

0 commit comments

Comments
 (0)