Skip to content

Commit e420606

Browse files
committed
generalize rule based configurator
1 parent 712e1a3 commit e420606

5 files changed

Lines changed: 56 additions & 70 deletions

File tree

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

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@
6060
)
6161
from opentelemetry.sdk.resources import Resource
6262
from opentelemetry.sdk.util import ns_to_iso_str
63+
from opentelemetry.sdk.util._configurator import RuleBasedConfigurator
6364
from opentelemetry.sdk.util.instrumentation import (
6465
InstrumentationScope,
65-
_InstrumentationScopePredicateT,
6666
)
6767
from opentelemetry.semconv._incubating.attributes import code_attributes
6868
from opentelemetry.semconv.attributes import exception_attributes
@@ -654,7 +654,7 @@ class LoggerConfig:
654654
is_enabled: bool = True
655655

656656
@classmethod
657-
def default(cls) -> "LoggerConfig":
657+
def default(cls) -> LoggerConfig:
658658
return LoggerConfig()
659659

660660

@@ -751,9 +751,7 @@ def emit(
751751

752752

753753
LoggerConfiguratorT = Callable[[InstrumentationScope], LoggerConfig]
754-
LoggerConfiguratorRulesT = Sequence[
755-
tuple[_InstrumentationScopePredicateT, LoggerConfig]
756-
]
754+
RuleBasedLoggerConfigurator = RuleBasedConfigurator[LoggerConfig]
757755

758756

759757
def default_logger_configurator(
@@ -768,24 +766,6 @@ def disable_logger_configurator(
768766
return LoggerConfig(is_enabled=False)
769767

770768

771-
class RuleBasedLoggerConfigurator:
772-
def __init__(
773-
self,
774-
*,
775-
rules: LoggerConfiguratorRulesT,
776-
default_config: LoggerConfig,
777-
):
778-
self._rules = rules
779-
self._default_config = default_config
780-
781-
def __call__(self, logger_scope: InstrumentationScope) -> LoggerConfig:
782-
for predicate, logger_config in self._rules:
783-
if predicate(logger_scope):
784-
return logger_config
785-
# by default return default config
786-
return self._default_config
787-
788-
789769
class LoggerProvider(APILoggerProvider):
790770
def __init__(
791771
self,

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -814,3 +814,27 @@ def channel_credential_provider() -> grpc.ChannelCredentials:
814814
This is an experimental environment variable and the name of this variable and its behavior can
815815
change in a non-backwards compatible way.
816816
"""
817+
818+
OTEL_PYTHON_METER_CONFIGURATOR = "OTEL_PYTHON_METER_CONFIGURATOR"
819+
"""
820+
.. envvar:: OTEL_PYTHON_METER_CONFIGURATOR
821+
822+
The :envvar:`OTEL_PYTHON_METER_CONFIGURATOR` environment variable allows users to set a
823+
custom Meter Configurator function.
824+
Default: opentelemetry.sdk.metrics._internal._default_meter_configurator
825+
826+
This is an experimental environment variable and the name of this variable and its behavior can
827+
change in a non-backwards compatible way.
828+
"""
829+
830+
OTEL_PYTHON_LOGGER_CONFIGURATOR = "OTEL_PYTHON_LOGGER_CONFIGURATOR"
831+
"""
832+
.. envvar:: OTEL_PYTHON_LOGGER_CONFIGURATOR
833+
834+
The :envvar:`OTEL_PYTHON_LOGGER_CONFIGURATOR` environment variable allows users to set a
835+
custom Logger Configurator function.
836+
Default: opentelemetry.sdk._logs._internal._default_logger_configurator
837+
838+
This is an experimental environment variable and the name of this variable and its behavior can
839+
change in a non-backwards compatible way.
840+
"""

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

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
SdkConfiguration,
6464
)
6565
from opentelemetry.sdk.resources import Resource
66+
from opentelemetry.sdk.util._configurator import RuleBasedConfigurator
6667
from opentelemetry.sdk.util.instrumentation import (
6768
InstrumentationScope,
6869
_InstrumentationScopePredicateT,
@@ -414,9 +415,7 @@ def _get_exemplar_filter(exemplar_filter: str) -> ExemplarFilter:
414415

415416

416417
_MeterConfiguratorT = Callable[[InstrumentationScope], _MeterConfig]
417-
_MeterConfiguratorRulesT = Sequence[
418-
tuple[_InstrumentationScopePredicateT, _MeterConfig]
419-
]
418+
_RuleBasedMeterConfigurator = RuleBasedConfigurator[_MeterConfig]
420419

421420

422421
def _default_meter_configurator(
@@ -431,27 +430,6 @@ def _disable_meter_configurator(
431430
return _MeterConfig(is_enabled=False)
432431

433432

434-
class _RuleBasedMeterConfigurator:
435-
def __init__(
436-
self,
437-
*,
438-
rules: _MeterConfiguratorRulesT,
439-
default_config: _MeterConfig,
440-
):
441-
self._rules = rules
442-
self._default_config = default_config
443-
444-
def __call__(self, meter_scope: InstrumentationScope) -> _MeterConfig:
445-
for predicate, meter_config in self._rules:
446-
if predicate(meter_scope):
447-
return meter_config
448-
# by default return default config
449-
return self._default_config
450-
451-
def update_rules(self, rules: _MeterConfiguratorRulesT) -> None:
452-
self._rules = rules
453-
454-
455433
class MeterProvider(APIMeterProvider):
456434
r"""See `opentelemetry.metrics.MeterProvider`.
457435

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

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,10 @@
6565
from opentelemetry.sdk.trace._tracer_metrics import TracerMetrics
6666
from opentelemetry.sdk.trace.id_generator import IdGenerator, RandomIdGenerator
6767
from opentelemetry.sdk.util import BoundedList
68+
from opentelemetry.sdk.util._configurator import RuleBasedConfigurator
6869
from opentelemetry.sdk.util.instrumentation import (
6970
InstrumentationInfo,
7071
InstrumentationScope,
71-
_InstrumentationScopePredicateT,
7272
)
7373
from opentelemetry.semconv.attributes.exception_attributes import (
7474
EXCEPTION_ESCAPED,
@@ -1264,28 +1264,7 @@ def start_span( # pylint: disable=too-many-locals
12641264

12651265

12661266
_TracerConfiguratorT = Callable[[InstrumentationScope], _TracerConfig]
1267-
_TracerConfiguratorRulesT = Sequence[
1268-
tuple[_InstrumentationScopePredicateT, _TracerConfig]
1269-
]
1270-
1271-
1272-
class _RuleBasedTracerConfigurator:
1273-
def __init__(
1274-
self,
1275-
*,
1276-
rules: _TracerConfiguratorRulesT,
1277-
default_config: _TracerConfig,
1278-
):
1279-
self._rules = rules
1280-
self._default_config = default_config
1281-
1282-
def __call__(self, tracer_scope: InstrumentationScope) -> _TracerConfig:
1283-
for predicate, tracer_config in self._rules:
1284-
if predicate(tracer_scope):
1285-
return tracer_config
1286-
1287-
# if no rule matched return the default config
1288-
return self._default_config
1267+
_RuleBasedTracerConfigurator = RuleBasedConfigurator[_TracerConfig]
12891268

12901269

12911270
def _default_tracer_configurator(
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from typing import Generic, Sequence, TypeVar
2+
3+
from opentelemetry.sdk.util.instrumentation import (
4+
InstrumentationScope,
5+
_InstrumentationScopePredicateT,
6+
)
7+
8+
ConfigT = TypeVar("ConfigT")
9+
ConfiguratorRulesT = Sequence[tuple[_InstrumentationScopePredicateT, ConfigT]]
10+
11+
12+
class RuleBasedConfigurator(Generic[ConfigT]):
13+
def __init__(self, *, rules: ConfiguratorRulesT, default_config: ConfigT):
14+
self._rules = rules
15+
self._default_config = default_config
16+
17+
def __call__(self, scope: InstrumentationScope) -> ConfigT:
18+
for predicate, config in self._rules:
19+
if predicate(scope):
20+
return config
21+
# by default return default config
22+
return self._default_config
23+
24+
def update_rules(self, rules: ConfiguratorRulesT) -> None:
25+
self._rules = rules

0 commit comments

Comments
 (0)