Skip to content

Commit 05ebc34

Browse files
committed
First propagation of filter and reservoir factory
1 parent 3b1e40d commit 05ebc34

File tree

10 files changed

+138
-37
lines changed

10 files changed

+138
-37
lines changed

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

+3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
from opentelemetry.sdk.metrics._internal import Meter, MeterProvider
1717
from opentelemetry.sdk.metrics._internal.exceptions import MetricsTimeoutError
18+
from opentelemetry.sdk.metrics._internal.exemplar import ExemplarFilter, ExemplarReservoir
1819
from opentelemetry.sdk.metrics._internal.instrument import Counter
1920
from opentelemetry.sdk.metrics._internal.instrument import Gauge as _Gauge
2021
from opentelemetry.sdk.metrics._internal.instrument import (
@@ -26,6 +27,8 @@
2627
)
2728

2829
__all__ = [
30+
"ExemplarFilter",
31+
"ExemplarReservoir",
2932
"Meter",
3033
"MeterProvider",
3134
"MetricsTimeoutError",

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

+3
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
from opentelemetry.metrics import _Gauge as APIGauge
3636
from opentelemetry.sdk.environment_variables import OTEL_SDK_DISABLED
3737
from opentelemetry.sdk.metrics._internal.exceptions import MetricsTimeoutError
38+
from opentelemetry.sdk.metrics._internal.exemplar import ExemplarFilter, TraceBasedExemplarFilter
3839
from opentelemetry.sdk.metrics._internal.instrument import (
3940
_Counter,
4041
_Gauge,
@@ -381,6 +382,7 @@ def __init__(
381382
"opentelemetry.sdk.metrics.export.MetricReader"
382383
] = (),
383384
resource: Resource = None,
385+
exemplar_filter: Optional[ExemplarFilter] = None,
384386
shutdown_on_exit: bool = True,
385387
views: Sequence["opentelemetry.sdk.metrics.view.View"] = (),
386388
):
@@ -390,6 +392,7 @@ def __init__(
390392
if resource is None:
391393
resource = Resource.create({})
392394
self._sdk_config = SdkConfiguration(
395+
exemplar_filter = TraceBasedExemplarFilter() if exemplar_filter is None else exemplar_filter,
393396
resource=resource,
394397
metric_readers=metric_readers,
395398
views=views,

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

+4-2
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ def conflicts(self, other: "_ViewInstrumentMatch") -> bool:
8181
return result
8282

8383
# pylint: disable=protected-access
84-
def consume_measurement(self, measurement: Measurement) -> None:
84+
def consume_measurement(self, measurement: Measurement, should_sample_exemplar: bool = True) -> None:
8585

8686
if self._view._attribute_keys is not None:
8787

@@ -107,6 +107,7 @@ def consume_measurement(self, measurement: Measurement) -> None:
107107
self._view._aggregation._create_aggregation(
108108
self._instrument,
109109
attributes,
110+
self._view._exemplar_reservoir_factory,
110111
self._start_time_unix_nano,
111112
)
112113
)
@@ -116,11 +117,12 @@ def consume_measurement(self, measurement: Measurement) -> None:
116117
]._create_aggregation(
117118
self._instrument,
118119
attributes,
120+
self._view._exemplar_reservoir_factory,
119121
self._start_time_unix_nano,
120122
)
121123
self._attributes_aggregation[aggr_key] = aggregation
122124

123-
self._attributes_aggregation[aggr_key].aggregate(measurement)
125+
self._attributes_aggregation[aggr_key].aggregate(measurement, should_sample_exemplar)
124126

125127
def collect(
126128
self,

0 commit comments

Comments
 (0)