23
23
import os
24
24
from abc import ABC , abstractmethod
25
25
from os import environ
26
- from typing import Callable , Sequence , Type , Union
26
+ from typing import Any , Callable , Mapping , Sequence , Type , Union
27
27
28
28
from typing_extensions import Literal
29
29
91
91
92
92
_logger = logging .getLogger (__name__ )
93
93
94
+ ExporterArgsMap = Mapping [
95
+ Union [
96
+ Type [SpanExporter ],
97
+ Type [MetricExporter ],
98
+ Type [MetricReader ],
99
+ Type [LogExporter ],
100
+ ],
101
+ Mapping [str , Any ],
102
+ ]
103
+
94
104
95
105
def _import_config_components (
96
- selected_components : list [str ], entry_point_name : str
97
- ) -> Sequence [tuple [str , object ]]:
106
+ selected_components : Sequence [str ], entry_point_name : str
107
+ ) -> list [tuple [str , Type ]]:
98
108
component_implementations = []
99
109
100
110
for selected_component in selected_components :
@@ -179,7 +189,7 @@ def _get_exporter_entry_point(
179
189
180
190
def _get_exporter_names (
181
191
signal_type : Literal ["traces" , "metrics" , "logs" ],
182
- ) -> Sequence [str ]:
192
+ ) -> list [str ]:
183
193
names = environ .get (_EXPORTER_ENV_BY_SIGNAL_TYPE .get (signal_type , "" ))
184
194
185
195
if not names or names .lower ().strip () == "none" :
@@ -196,6 +206,7 @@ def _init_tracing(
196
206
id_generator : IdGenerator | None = None ,
197
207
sampler : Sampler | None = None ,
198
208
resource : Resource | None = None ,
209
+ exporter_args_map : ExporterArgsMap | None = None ,
199
210
):
200
211
provider = TracerProvider (
201
212
id_generator = id_generator ,
@@ -204,8 +215,9 @@ def _init_tracing(
204
215
)
205
216
set_tracer_provider (provider )
206
217
218
+ exporter_args_map = exporter_args_map or {}
207
219
for _ , exporter_class in exporters .items ():
208
- exporter_args = {}
220
+ exporter_args = exporter_args_map . get ( exporter_class , {})
209
221
provider .add_span_processor (
210
222
BatchSpanProcessor (exporter_class (** exporter_args ))
211
223
)
@@ -216,12 +228,13 @@ def _init_metrics(
216
228
str , Union [Type [MetricExporter ], Type [MetricReader ]]
217
229
],
218
230
resource : Resource | None = None ,
231
+ exporter_args_map : ExporterArgsMap | None = None ,
219
232
):
220
233
metric_readers = []
221
234
235
+ exporter_args_map = exporter_args_map or {}
222
236
for _ , exporter_or_reader_class in exporters_or_readers .items ():
223
- exporter_args = {}
224
-
237
+ exporter_args = exporter_args_map .get (exporter_or_reader_class , {})
225
238
if issubclass (exporter_or_reader_class , MetricReader ):
226
239
metric_readers .append (exporter_or_reader_class (** exporter_args ))
227
240
else :
@@ -239,12 +252,14 @@ def _init_logging(
239
252
exporters : dict [str , Type [LogExporter ]],
240
253
resource : Resource | None = None ,
241
254
setup_logging_handler : bool = True ,
255
+ exporter_args_map : ExporterArgsMap | None = None ,
242
256
):
243
257
provider = LoggerProvider (resource = resource )
244
258
set_logger_provider (provider )
245
259
260
+ exporter_args_map = exporter_args_map or {}
246
261
for _ , exporter_class in exporters .items ():
247
- exporter_args = {}
262
+ exporter_args = exporter_args_map . get ( exporter_class , {})
248
263
provider .add_log_record_processor (
249
264
BatchLogRecordProcessor (exporter_class (** exporter_args ))
250
265
)
@@ -331,22 +346,24 @@ def _import_exporters(
331
346
return trace_exporters , metric_exporters , log_exporters
332
347
333
348
334
- def _import_sampler_factory (sampler_name : str ) -> Callable [[str ], Sampler ]:
349
+ def _import_sampler_factory (
350
+ sampler_name : str ,
351
+ ) -> Callable [[float | str | None ], Sampler ]:
335
352
_ , sampler_impl = _import_config_components (
336
353
[sampler_name .strip ()], _OTEL_SAMPLER_ENTRY_POINT_GROUP
337
354
)[0 ]
338
355
return sampler_impl
339
356
340
357
341
- def _import_sampler (sampler_name : str ) -> Sampler | None :
358
+ def _import_sampler (sampler_name : str | None ) -> Sampler | None :
342
359
if not sampler_name :
343
360
return None
344
361
try :
345
362
sampler_factory = _import_sampler_factory (sampler_name )
346
363
arg = None
347
364
if sampler_name in ("traceidratio" , "parentbased_traceidratio" ):
348
365
try :
349
- rate = float (os .getenv (OTEL_TRACES_SAMPLER_ARG ))
366
+ rate = float (os .getenv (OTEL_TRACES_SAMPLER_ARG , "" ))
350
367
except (ValueError , TypeError ):
351
368
_logger .warning (
352
369
"Could not convert TRACES_SAMPLER_ARG to float. Using default value 1.0."
@@ -391,6 +408,7 @@ def _initialize_components(
391
408
resource_attributes : Attributes | None = None ,
392
409
id_generator : IdGenerator | None = None ,
393
410
setup_logging_handler : bool | None = None ,
411
+ exporter_args_map : ExporterArgsMap | None = None ,
394
412
):
395
413
if trace_exporter_names is None :
396
414
trace_exporter_names = []
@@ -413,7 +431,7 @@ def _initialize_components(
413
431
resource_attributes = {}
414
432
# populate version if using auto-instrumentation
415
433
if auto_instrumentation_version :
416
- resource_attributes [ResourceAttributes .TELEMETRY_AUTO_VERSION ] = (
434
+ resource_attributes [ResourceAttributes .TELEMETRY_AUTO_VERSION ] = ( # type: ignore[reportIndexIssue]
417
435
auto_instrumentation_version
418
436
)
419
437
# if env var OTEL_RESOURCE_ATTRIBUTES is given, it will read the service_name
@@ -425,8 +443,11 @@ def _initialize_components(
425
443
id_generator = id_generator ,
426
444
sampler = sampler ,
427
445
resource = resource ,
446
+ exporter_args_map = exporter_args_map ,
447
+ )
448
+ _init_metrics (
449
+ metric_exporters , resource , exporter_args_map = exporter_args_map
428
450
)
429
- _init_metrics (metric_exporters , resource )
430
451
if setup_logging_handler is None :
431
452
setup_logging_handler = (
432
453
os .getenv (
@@ -436,7 +457,12 @@ def _initialize_components(
436
457
.lower ()
437
458
== "true"
438
459
)
439
- _init_logging (log_exporters , resource , setup_logging_handler )
460
+ _init_logging (
461
+ log_exporters ,
462
+ resource ,
463
+ setup_logging_handler ,
464
+ exporter_args_map = exporter_args_map ,
465
+ )
440
466
441
467
442
468
class _BaseConfigurator (ABC ):
0 commit comments