Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions exporters/prometheus/exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -382,8 +382,7 @@ func addExponentialHistogramMetric[N int64 | float64](
otel.Handle(err)
continue
}

// TODO(GiedriusS): add exemplars here after https://github.com/prometheus/client_golang/pull/1654#pullrequestreview-2434669425 is done.
m = addExemplars(m, dp.Exemplars, labelNamer)
ch <- m
}
}
Expand Down
36 changes: 32 additions & 4 deletions exporters/prometheus/exporter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1113,6 +1113,18 @@ func TestExemplars(t *testing.T) {
escapingScheme: model.NoEscaping,
validationScheme: model.UTF8Validation,
},
{
name: "exponential histogram",
recordMetrics: func(ctx context.Context, meter otelmetric.Meter) {
hist, err := meter.Int64Histogram("exponential_histogram")
require.NoError(t, err)
hist.Record(ctx, 9, attrsOpt)
},
expectedExemplarValue: 9,
expectedLabels: expectedNonEscapedLabels,
escapingScheme: model.NoEscaping,
validationScheme: model.UTF8Validation,
},
} {
t.Run(tc.name, func(t *testing.T) {
originalEscapingScheme := model.NameEscapingScheme
Expand Down Expand Up @@ -1143,14 +1155,23 @@ func TestExemplars(t *testing.T) {
provider := metric.NewMeterProvider(
metric.WithReader(exporter),
metric.WithResource(res),
metric.WithView(metric.NewView(
metric.Instrument{Name: "*"},
metric.WithView(metric.NewView(metric.Instrument{Name: "foo"},
Comment thread
shivanthzen marked this conversation as resolved.
Outdated
metric.Stream{
// filter out all attributes so they are added as filtered
// attributes to the exemplar
AttributeFilter: attribute.NewAllowKeysFilter(),
},
)),
),
),
metric.WithView(metric.NewView(metric.Instrument{Name: "exponential_histogram"},
Comment thread
shivanthzen marked this conversation as resolved.
Outdated
metric.Stream{
Aggregation: metric.AggregationBase2ExponentialHistogram{
MaxSize: 20,
},
AttributeFilter: attribute.NewAllowKeysFilter(),
},
),
),
)
meter := provider.Meter("meter", otelmetric.WithInstrumentationVersion("v0.1.0"))

Expand Down Expand Up @@ -1179,16 +1200,23 @@ func TestExemplars(t *testing.T) {
case dto.MetricType_COUNTER:
exemplar = metric.GetCounter().GetExemplar()
case dto.MetricType_HISTOGRAM:
for _, b := range metric.GetHistogram().GetBucket() {
h := metric.GetHistogram()
for _, b := range h.GetBucket() {
if b.GetExemplar() != nil {
exemplar = b.GetExemplar()
continue
}
}
if h.GetZeroThreshold() != 0 || h.GetZeroCount() != 0 ||
len(h.PositiveSpan) != 0 || len(h.NegativeSpan) != 0 {
require.NotNil(t, h.Exemplars)
exemplar = h.Exemplars[0]
}
}
require.NotNil(t, exemplar)
require.Equal(t, tc.expectedExemplarValue, exemplar.GetValue())
require.Len(t, exemplar.GetLabel(), len(tc.expectedLabels))

for _, label := range exemplar.GetLabel() {
val, ok := tc.expectedLabels[label.GetName()]
require.True(t, ok)
Expand Down