34
34
from opentelemetry .metrics import UpDownCounter as APIUpDownCounter
35
35
from opentelemetry .metrics import _Gauge as APIGauge
36
36
from opentelemetry .sdk .environment_variables import (
37
- OTEL_SDK_DISABLED ,
38
37
OTEL_METRICS_EXEMPLAR_FILTER ,
38
+ OTEL_SDK_DISABLED ,
39
39
)
40
40
from opentelemetry .sdk .metrics ._internal .exceptions import MetricsTimeoutError
41
41
from opentelemetry .sdk .metrics ._internal .exemplar import (
42
+ AlwaysOffExemplarFilter ,
43
+ AlwaysOnExemplarFilter ,
42
44
ExemplarFilter ,
43
45
TraceBasedExemplarFilter ,
44
- AlwaysOnExemplarFilter ,
45
- AlwaysOffExemplarFilter ,
46
46
)
47
47
from opentelemetry .sdk .metrics ._internal .instrument import (
48
48
_Counter ,
@@ -349,6 +349,17 @@ def create_observable_up_down_counter(
349
349
return instrument
350
350
351
351
352
+ def _get_exemplar_filter (exemplar_filter : str ) -> ExemplarFilter :
353
+ if exemplar_filter == "trace_based" :
354
+ return TraceBasedExemplarFilter ()
355
+ if exemplar_filter == "always_on" :
356
+ return AlwaysOnExemplarFilter ()
357
+ if exemplar_filter == "always_off" :
358
+ return AlwaysOffExemplarFilter ()
359
+ msg = f"Unknown exemplar filter '{ exemplar_filter } '."
360
+ raise ValueError (msg )
361
+
362
+
352
363
class MeterProvider (APIMeterProvider ):
353
364
r"""See `opentelemetry.metrics.MeterProvider`.
354
365
@@ -399,12 +410,12 @@ def __init__(
399
410
self ._atexit_handler = None
400
411
if resource is None :
401
412
resource = Resource .create ({})
402
- filter = environ .get (OTEL_METRICS_EXEMPLAR_FILTER , None )
403
413
self ._sdk_config = SdkConfiguration (
404
414
exemplar_filter = (
405
415
exemplar_filter
406
- if exemplar_filter is not None
407
- else self ._get_exemplar_filter (filter )
416
+ or _get_exemplar_filter (
417
+ environ .get (OTEL_METRICS_EXEMPLAR_FILTER , "trace_based" )
418
+ )
408
419
),
409
420
resource = resource ,
410
421
metric_readers = metric_readers ,
@@ -562,14 +573,3 @@ def get_meter(
562
573
self ._measurement_consumer ,
563
574
)
564
575
return self ._meters [info ]
565
-
566
- def _get_exemplar_filter (self , exemplar_filter : str ) -> ExemplarFilter :
567
- if not exemplar_filter or exemplar_filter == 'trace_based' :
568
- return TraceBasedExemplarFilter ()
569
- elif exemplar_filter == 'always_on' :
570
- return AlwaysOnExemplarFilter ()
571
- elif exemplar_filter == 'always_off' :
572
- return AlwaysOffExemplarFilter ()
573
- else :
574
- raise Exception ("Invalid exemplar filter." )
575
-
0 commit comments