|
14 | 14 | import pytest |
15 | 15 |
|
16 | 16 | 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 | +) |
17 | 23 | from opentelemetry.sdk.metrics.export import ( |
18 | 24 | AggregationTemporality, |
19 | 25 | InMemoryMetricReader, |
20 | 26 | ) |
| 27 | +from opentelemetry.sdk.util.instrumentation import _scope_name_matches_glob |
21 | 28 |
|
22 | 29 | reader_cumulative = InMemoryMetricReader() |
23 | 30 | reader_delta = InMemoryMetricReader( |
@@ -77,3 +84,44 @@ def benchmark_up_down_counter_add(): |
77 | 84 | udcounter.add(1, labels) |
78 | 85 |
|
79 | 86 | 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