Skip to content

Commit 140d410

Browse files
authored
Merge branch 'main' into 2024/add/tokenTyping
2 parents b7f102a + f42041a commit 140d410

File tree

8 files changed

+70
-8
lines changed

8 files changed

+70
-8
lines changed

.github/workflows/fossa.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
name: FOSSA scanning
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
8+
permissions:
9+
contents: read
10+
11+
jobs:
12+
fossa:
13+
runs-on: ubuntu-latest
14+
steps:
15+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
16+
17+
- uses: fossas/fossa-action@93a52ecf7c3ac7eb40f5de77fd69b1a19524de94 # v1.5.0
18+
with:
19+
api-key: ${{secrets.FOSSA_API_KEY}}
20+
team: OpenTelemetry

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111
([#4164](https://github.com/open-telemetry/opentelemetry-python/pull/4346))
1212
- Tolerates exceptions when loading resource detectors via `OTEL_EXPERIMENTAL_RESOURCE_DETECTORS`
1313
([#4373](https://github.com/open-telemetry/opentelemetry-python/pull/4373))
14+
- opentelemetry-sdk: fix OTLP exporting of Histograms with explicit buckets advisory
15+
([#4434](https://github.com/open-telemetry/opentelemetry-python/pull/4434))
16+
- opentelemetry-exporter-otlp-proto-grpc: better dependency version range for Python 3.13
17+
([#4444](https://github.com/open-telemetry/opentelemetry-python/pull/4444))
18+
- opentelemetry-exporter-opencensus: better dependency version range for Python 3.13
19+
([#4444](https://github.com/open-telemetry/opentelemetry-python/pull/4444))
1420

1521
## Version 1.30.0/0.51b0 (2025-02-03)
1622

exporter/opentelemetry-exporter-opencensus/pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ classifiers = [
2929
"Typing :: Typed",
3030
]
3131
dependencies = [
32-
"grpcio >= 1.0.0, < 2.0.0",
32+
"grpcio >= 1.63.2, < 2.0.0; python_version < '3.13'",
33+
"grpcio >= 1.66.2, < 2.0.0; python_version >= '3.13'",
3334
"opencensus-proto >= 0.1.0, < 1.0.0",
3435
"opentelemetry-api >= 1.31.0.dev",
3536
"opentelemetry-sdk >= 1.15",

exporter/opentelemetry-exporter-otlp-proto-grpc/pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ classifiers = [
3030
dependencies = [
3131
"Deprecated >= 1.2.6",
3232
"googleapis-common-protos ~= 1.52",
33-
"grpcio >= 1.63.2, < 2.0.0",
33+
"grpcio >= 1.63.2, < 2.0.0; python_version < '3.13'",
34+
"grpcio >= 1.66.2, < 2.0.0; python_version >= '3.13'",
3435
"opentelemetry-api ~= 1.15",
3536
"opentelemetry-proto == 1.31.0.dev",
3637
"opentelemetry-sdk ~= 1.31.0.dev",

opentelemetry-api/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ dependencies = [
3030
"Deprecated >= 1.2.6",
3131
# FIXME This should be able to be removed after 3.12 is released if there is a reliable API
3232
# in importlib.metadata.
33-
"importlib-metadata >= 6.0, <= 8.5.0",
33+
"importlib-metadata >= 6.0, < 8.7.0",
3434
]
3535
dynamic = [
3636
"version",

opentelemetry-api/test-requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
asgiref==3.7.2
22
Deprecated==1.2.14
3-
importlib-metadata==8.5.0
3+
importlib-metadata==8.5.0 ; python_version < "3.9"
4+
importlib-metadata==8.6.1 ; python_version >= "3.9"
45
iniconfig==2.0.0
56
packaging==24.0
67
pluggy==1.5.0

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1367,10 +1367,6 @@ def __init__(
13671367
boundaries: Optional[Sequence[float]] = None,
13681368
record_min_max: bool = True,
13691369
) -> None:
1370-
if boundaries is None:
1371-
boundaries = (
1372-
_DEFAULT_EXPLICIT_BUCKET_HISTOGRAM_AGGREGATION_BOUNDARIES
1373-
)
13741370
self._boundaries = boundaries
13751371
self._record_min_max = record_min_max
13761372

@@ -1391,6 +1387,12 @@ def _create_aggregation(
13911387
AggregationTemporality.CUMULATIVE
13921388
)
13931389

1390+
if self._boundaries is None:
1391+
self._boundaries = (
1392+
instrument._advisory.explicit_bucket_boundaries
1393+
or _DEFAULT_EXPLICIT_BUCKET_HISTOGRAM_AGGREGATION_BOUNDARIES
1394+
)
1395+
13941396
return _ExplicitBucketHistogramAggregation(
13951397
attributes,
13961398
instrument_aggregation_temporality,

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from unittest import TestCase
1616

1717
from opentelemetry.sdk.metrics import MeterProvider
18+
from opentelemetry.sdk.metrics._internal.instrument import Histogram
1819
from opentelemetry.sdk.metrics.export import InMemoryMetricReader
1920
from opentelemetry.sdk.metrics.view import (
2021
ExplicitBucketHistogramAggregation,
@@ -133,3 +134,33 @@ def test_view_overrides_buckets(self):
133134
self.assertEqual(
134135
metric.data.data_points[0].explicit_bounds, (10.0, 100.0, 1000.0)
135136
)
137+
138+
def test_explicit_aggregation(self):
139+
reader = InMemoryMetricReader(
140+
preferred_aggregation={
141+
Histogram: ExplicitBucketHistogramAggregation()
142+
}
143+
)
144+
meter_provider = MeterProvider(
145+
metric_readers=[reader],
146+
)
147+
meter = meter_provider.get_meter("testmeter")
148+
histogram = meter.create_histogram(
149+
"testhistogram",
150+
explicit_bucket_boundaries_advisory=[1.0, 2.0, 3.0],
151+
)
152+
histogram.record(1, {"label": "value"})
153+
histogram.record(2, {"label": "value"})
154+
histogram.record(3, {"label": "value"})
155+
156+
metrics = reader.get_metrics_data()
157+
self.assertEqual(len(metrics.resource_metrics), 1)
158+
self.assertEqual(len(metrics.resource_metrics[0].scope_metrics), 1)
159+
self.assertEqual(
160+
len(metrics.resource_metrics[0].scope_metrics[0].metrics), 1
161+
)
162+
metric = metrics.resource_metrics[0].scope_metrics[0].metrics[0]
163+
self.assertEqual(metric.name, "testhistogram")
164+
self.assertEqual(
165+
metric.data.data_points[0].explicit_bounds, (1.0, 2.0, 3.0)
166+
)

0 commit comments

Comments
 (0)