Skip to content

Commit 22e7495

Browse files
committed
Make explicit boundaries float only
1 parent 14a4116 commit 22e7495

File tree

6 files changed

+25
-18
lines changed

6 files changed

+25
-18
lines changed

docs/examples/metrics/instruments/example.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def observable_gauge_func(options: CallbackOptions) -> Iterable[Observation]:
6262
# Histogram with explicit_bucket_boundaries advisory
6363
histogram = meter.create_histogram(
6464
"histogram_with_advisory",
65-
advisory={"explicit_bucket_boundaries": [0, 1, 2]},
65+
advisory={"explicit_bucket_boundaries": [0.0, 1.0, 2.0]},
6666
)
6767
histogram.record(99.9)
6868

opentelemetry-api/src/opentelemetry/util/types.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,4 @@
5858

5959

6060
class MetricsInstrumentAdvisory(TypedDict):
61-
explicit_bucket_boundaries: Optional[Union[Sequence[int], Sequence[float]]]
61+
explicit_bucket_boundaries: Optional[Sequence[float]]

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ def create_histogram(
223223
boundaries = advisory["explicit_bucket_boundaries"]
224224
invalid_advisory = not (
225225
boundaries
226-
and all(isinstance(e, (int, float)) for e in boundaries)
226+
and all(isinstance(e, float) for e in boundaries)
227227
)
228228
except (KeyError, TypeError):
229229
invalid_advisory = True

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
Sequence,
3030
Type,
3131
TypeVar,
32-
Union,
3332
)
3433

3534
from opentelemetry.metrics import (
@@ -472,14 +471,13 @@ def __init__(
472471
instrument_aggregation_temporality: AggregationTemporality,
473472
start_time_unix_nano: int,
474473
reservoir_builder: ExemplarReservoirBuilder,
475-
boundaries: Optional[Union[Sequence[float], Sequence[int]]] = None,
474+
boundaries: Optional[Sequence[float]] = None,
476475
record_min_max: bool = True,
477476
):
478477
if boundaries is None:
479478
boundaries = (
480479
_DEFAULT_EXPLICIT_BUCKET_HISTOGRAM_AGGREGATION_BOUNDARIES
481480
)
482-
483481
super().__init__(
484482
attributes,
485483
reservoir_builder=partial(
@@ -1285,7 +1283,7 @@ def _create_aggregation(
12851283
)
12861284

12871285
if isinstance(instrument, Histogram):
1288-
boundaries: Optional[Union[Sequence[float], Sequence[int]]] = (
1286+
boundaries: Optional[Sequence[float]] = (
12891287
instrument._advisory.get("explicit_bucket_boundaries")
12901288
if instrument._advisory is not None
12911289
else None
@@ -1370,7 +1368,7 @@ class ExplicitBucketHistogramAggregation(Aggregation):
13701368

13711369
def __init__(
13721370
self,
1373-
boundaries: Optional[Union[Sequence[float], Sequence[int]]] = None,
1371+
boundaries: Optional[Sequence[float]] = None,
13741372
record_min_max: bool = True,
13751373
) -> None:
13761374
if boundaries is None:

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

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ def test_default(self):
3030
)
3131
meter = meter_provider.get_meter("testmeter")
3232
histogram = meter.create_histogram(
33-
"testhistogram", advisory={"explicit_bucket_boundaries": [1, 2, 3]}
33+
"testhistogram",
34+
advisory={"explicit_bucket_boundaries": [1.0, 2.0, 3.0]},
3435
)
3536
histogram.record(1, {"label": "value"})
3637
histogram.record(2, {"label": "value"})
@@ -44,7 +45,9 @@ def test_default(self):
4445
)
4546
metric = metrics.resource_metrics[0].scope_metrics[0].metrics[0]
4647
self.assertEqual(metric.name, "testhistogram")
47-
self.assertEqual(metric.data.data_points[0].explicit_bounds, (1, 2, 3))
48+
self.assertEqual(
49+
metric.data.data_points[0].explicit_bounds, (1.0, 2.0, 3.0)
50+
)
4851

4952
def test_view_default_aggregation(self):
5053
reader = InMemoryMetricReader()
@@ -55,7 +58,8 @@ def test_view_default_aggregation(self):
5558
)
5659
meter = meter_provider.get_meter("testmeter")
5760
histogram = meter.create_histogram(
58-
"testhistogram", advisory={"explicit_bucket_boundaries": [1, 2, 3]}
61+
"testhistogram",
62+
advisory={"explicit_bucket_boundaries": [1.0, 2.0, 3.0]},
5963
)
6064
histogram.record(1, {"label": "value"})
6165
histogram.record(2, {"label": "value"})
@@ -69,14 +73,16 @@ def test_view_default_aggregation(self):
6973
)
7074
metric = metrics.resource_metrics[0].scope_metrics[0].metrics[0]
7175
self.assertEqual(metric.name, "testhistogram")
72-
self.assertEqual(metric.data.data_points[0].explicit_bounds, (1, 2, 3))
76+
self.assertEqual(
77+
metric.data.data_points[0].explicit_bounds, (1.0, 2.0, 3.0)
78+
)
7379

7480
def test_view_overrides_buckets(self):
7581
reader = InMemoryMetricReader()
7682
view = View(
7783
instrument_name="testhistogram",
7884
aggregation=ExplicitBucketHistogramAggregation(
79-
boundaries=[10, 100, 1000]
85+
boundaries=[10.0, 100.0, 1000.0]
8086
),
8187
)
8288
meter_provider = MeterProvider(
@@ -85,7 +91,8 @@ def test_view_overrides_buckets(self):
8591
)
8692
meter = meter_provider.get_meter("testmeter")
8793
histogram = meter.create_histogram(
88-
"testhistogram", advisory={"explicit_bucket_boundaries": [1, 2, 3]}
94+
"testhistogram",
95+
advisory={"explicit_bucket_boundaries": [1.0, 2.0, 3.0]},
8996
)
9097
histogram.record(1, {"label": "value"})
9198
histogram.record(2, {"label": "value"})
@@ -100,5 +107,5 @@ def test_view_overrides_buckets(self):
100107
metric = metrics.resource_metrics[0].scope_metrics[0].metrics[0]
101108
self.assertEqual(metric.name, "testhistogram")
102109
self.assertEqual(
103-
metric.data.data_points[0].explicit_bounds, (10, 100, 1000)
110+
metric.data.data_points[0].explicit_bounds, (10.0, 100.0, 1000.0)
104111
)

opentelemetry-sdk/tests/metrics/test_metrics.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -542,13 +542,14 @@ def test_create_histogram_with_advisory(self):
542542
"name",
543543
unit="unit",
544544
description="description",
545-
advisory={"explicit_bucket_boundaries": [0, 1, 2]},
545+
advisory={"explicit_bucket_boundaries": [0.0, 1.0, 2.0]},
546546
)
547547

548548
self.assertIsInstance(histogram, Histogram)
549549
self.assertEqual(histogram.name, "name")
550550
self.assertEqual(
551-
histogram._advisory, {"explicit_bucket_boundaries": [0, 1, 2]}
551+
histogram._advisory,
552+
{"explicit_bucket_boundaries": [0.0, 1.0, 2.0]},
552553
)
553554

554555
def test_create_histogram_advisory_validation(self):
@@ -557,7 +558,8 @@ def test_create_histogram_advisory_validation(self):
557558
{"explicit_bucket_boundaries": []},
558559
{},
559560
[],
560-
{"explicit_bucket_boundaries": [1, 2.0, "3"]},
561+
{"explicit_bucket_boundaries": [1]},
562+
{"explicit_bucket_boundaries": ["1"]},
561563
]
562564
for advisory in advisories:
563565
with self.subTest(advisory=advisory):

0 commit comments

Comments
 (0)