Skip to content

Commit 7f9fe27

Browse files
committed
add basic Meter configurator benchmark
1 parent 51a59ea commit 7f9fe27

2 files changed

Lines changed: 50 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2626
([#4973](https://github.com/open-telemetry/opentelemetry-python/pull/4973))
2727
- `opentelemetry-exporter-prometheus`: Fix metric name prefix
2828
([#4895](https://github.com/open-telemetry/opentelemetry-python/pull/4895))
29+
- `opentelemetry-sdk`: Implement experimental Meter configurator
30+
([#4966](https://github.com/open-telemetry/opentelemetry-python/pull/4966))
2931

3032
## Version 1.40.0/0.61b0 (2026-03-04)
3133

opentelemetry-sdk/benchmarks/metrics/test_benchmark_metrics.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,17 @@
1414
import pytest
1515

1616
from opentelemetry.sdk.metrics import Counter, MeterProvider
17+
from opentelemetry.sdk.metrics._internal import (
18+
_default_meter_configurator,
19+
_disable_meter_configurator,
20+
_MeterConfig,
21+
_RuleBasedMeterConfigurator,
22+
)
1723
from opentelemetry.sdk.metrics.export import (
1824
AggregationTemporality,
1925
InMemoryMetricReader,
2026
)
27+
from opentelemetry.sdk.util.instrumentation import _scope_name_matches_glob
2128

2229
reader_cumulative = InMemoryMetricReader()
2330
reader_delta = InMemoryMetricReader(
@@ -77,3 +84,44 @@ def benchmark_up_down_counter_add():
7784
udcounter.add(1, labels)
7885

7986
benchmark(benchmark_up_down_counter_add)
87+
88+
89+
@pytest.fixture(params=[None, 0, 1, 10, 50])
90+
def num_meter_configurator_rules(request):
91+
return request.param
92+
93+
94+
# pylint: disable=protected-access,redefined-outer-name
95+
def test_counter_add_with_meter_configurator_rules(
96+
benchmark, num_meter_configurator_rules
97+
):
98+
def benchmark_counter_add():
99+
counter_cumulative.add(1, {})
100+
101+
if num_meter_configurator_rules is None:
102+
# None case: meter is disabled, measuring the short-circuit path
103+
provider_reader_cumulative._set_meter_configurator(
104+
meter_configurator=_disable_meter_configurator
105+
)
106+
else:
107+
108+
def meter_configurator(meter_scope):
109+
return _RuleBasedMeterConfigurator(
110+
rules=[
111+
(
112+
_scope_name_matches_glob(glob_pattern=str(i)),
113+
_MeterConfig(is_enabled=True),
114+
)
115+
for i in range(num_meter_configurator_rules)
116+
],
117+
default_config=_MeterConfig(is_enabled=True),
118+
)(meter_scope)
119+
120+
provider_reader_cumulative._set_meter_configurator(
121+
meter_configurator=meter_configurator
122+
)
123+
124+
benchmark(benchmark_counter_add)
125+
provider_reader_cumulative._set_meter_configurator(
126+
meter_configurator=_default_meter_configurator
127+
)

0 commit comments

Comments
 (0)