Skip to content

Commit 3826348

Browse files
committed
Consider empty bucket boundaries as valid
1 parent 9ef6701 commit 3826348

File tree

3 files changed

+35
-9
lines changed

3 files changed

+35
-9
lines changed

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

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -204,15 +204,17 @@ def create_histogram(
204204
) -> APIHistogram:
205205
if explicit_bucket_boundaries_advisory is not None:
206206
invalid_advisory = False
207-
try:
208-
invalid_advisory = not (
209-
explicit_bucket_boundaries_advisory
210-
and all(
211-
isinstance(e, (float, int))
212-
for e in explicit_bucket_boundaries_advisory
207+
if isinstance(explicit_bucket_boundaries_advisory, Sequence):
208+
try:
209+
invalid_advisory = not (
210+
all(
211+
isinstance(e, (float, int))
212+
for e in explicit_bucket_boundaries_advisory
213+
)
213214
)
214-
)
215-
except (KeyError, TypeError):
215+
except (KeyError, TypeError):
216+
invalid_advisory = True
217+
else:
216218
invalid_advisory = True
217219

218220
if invalid_advisory:

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,30 @@ def test_default(self):
4949
metric.data.data_points[0].explicit_bounds, (1.0, 2.0, 3.0)
5050
)
5151

52+
def test_empty_buckets(self):
53+
reader = InMemoryMetricReader()
54+
meter_provider = MeterProvider(
55+
metric_readers=[reader],
56+
)
57+
meter = meter_provider.get_meter("testmeter")
58+
histogram = meter.create_histogram(
59+
"testhistogram",
60+
explicit_bucket_boundaries_advisory=[],
61+
)
62+
histogram.record(1, {"label": "value"})
63+
histogram.record(2, {"label": "value"})
64+
histogram.record(3, {"label": "value"})
65+
66+
metrics = reader.get_metrics_data()
67+
self.assertEqual(len(metrics.resource_metrics), 1)
68+
self.assertEqual(len(metrics.resource_metrics[0].scope_metrics), 1)
69+
self.assertEqual(
70+
len(metrics.resource_metrics[0].scope_metrics[0].metrics), 1
71+
)
72+
metric = metrics.resource_metrics[0].scope_metrics[0].metrics[0]
73+
self.assertEqual(metric.name, "testhistogram")
74+
self.assertEqual(metric.data.data_points[0].explicit_bounds, ())
75+
5276
def test_view_default_aggregation(self):
5377
reader = InMemoryMetricReader()
5478
view = View(instrument_name="testhistogram")

opentelemetry-sdk/tests/metrics/test_metrics.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@ def test_create_histogram_with_advisory(self):
531531

532532
def test_create_histogram_advisory_validation(self):
533533
advisories = [
534-
{"explicit_bucket_boundaries_advisory": []},
534+
{"explicit_bucket_boundaries_advisory": "hello"},
535535
{"explicit_bucket_boundaries_advisory": ["1"]},
536536
]
537537
for advisory in advisories:

0 commit comments

Comments
 (0)