Skip to content

Commit a1d97b1

Browse files
committed
opentelemetry-sdk: fix explicit aggregation with multiple histogram explicit buckets advisory
1 parent db2dd1e commit a1d97b1

File tree

2 files changed

+49
-6
lines changed

2 files changed

+49
-6
lines changed

opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/aggregation.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1387,18 +1387,17 @@ def _create_aggregation(
13871387
AggregationTemporality.CUMULATIVE
13881388
)
13891389

1390-
if self._boundaries is None:
1391-
self._boundaries = (
1392-
instrument._advisory.explicit_bucket_boundaries
1393-
or _DEFAULT_EXPLICIT_BUCKET_HISTOGRAM_AGGREGATION_BOUNDARIES
1394-
)
1390+
if self._boundaries:
1391+
boundaries = self._boundaries
1392+
else:
1393+
boundaries = instrument._advisory.explicit_bucket_boundaries
13951394

13961395
return _ExplicitBucketHistogramAggregation(
13971396
attributes,
13981397
instrument_aggregation_temporality,
13991398
start_time_unix_nano,
14001399
reservoir_factory(_ExplicitBucketHistogramAggregation),
1401-
self._boundaries,
1400+
boundaries,
14021401
self._record_min_max,
14031402
)
14041403

opentelemetry-sdk/tests/metrics/integration_test/test_histogram_advisory_explicit_buckets.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,3 +164,47 @@ def test_explicit_aggregation(self):
164164
self.assertEqual(
165165
metric.data.data_points[0].explicit_bounds, (1.0, 2.0, 3.0)
166166
)
167+
168+
def test_explicit_aggregation_multiple_histograms(self):
169+
reader = InMemoryMetricReader(
170+
preferred_aggregation={
171+
Histogram: ExplicitBucketHistogramAggregation()
172+
}
173+
)
174+
meter_provider = MeterProvider(
175+
metric_readers=[reader],
176+
)
177+
meter = meter_provider.get_meter("testmeter")
178+
179+
histogram1 = meter.create_histogram(
180+
"testhistogram1",
181+
explicit_bucket_boundaries_advisory=[1.0, 2.0, 3.0],
182+
)
183+
histogram1.record(1, {"label": "value"})
184+
histogram1.record(2, {"label": "value"})
185+
histogram1.record(3, {"label": "value"})
186+
187+
histogram2 = meter.create_histogram(
188+
"testhistogram2",
189+
explicit_bucket_boundaries_advisory=[4.0, 5.0, 6.0],
190+
)
191+
histogram2.record(4, {"label": "value"})
192+
histogram2.record(5, {"label": "value"})
193+
histogram2.record(6, {"label": "value"})
194+
195+
metrics = reader.get_metrics_data()
196+
self.assertEqual(len(metrics.resource_metrics), 1)
197+
self.assertEqual(len(metrics.resource_metrics[0].scope_metrics), 1)
198+
self.assertEqual(
199+
len(metrics.resource_metrics[0].scope_metrics[0].metrics), 2
200+
)
201+
metric1 = metrics.resource_metrics[0].scope_metrics[0].metrics[0]
202+
self.assertEqual(metric1.name, "testhistogram1")
203+
self.assertEqual(
204+
metric1.data.data_points[0].explicit_bounds, (1.0, 2.0, 3.0)
205+
)
206+
metric2 = metrics.resource_metrics[0].scope_metrics[0].metrics[1]
207+
self.assertEqual(metric2.name, "testhistogram2")
208+
self.assertEqual(
209+
metric2.data.data_points[0].explicit_bounds, (4.0, 5.0, 6.0)
210+
)

0 commit comments

Comments
 (0)