Skip to content

Commit ca4b408

Browse files
committed
WIP
1 parent 0028cc5 commit ca4b408

File tree

2 files changed

+76
-143
lines changed

2 files changed

+76
-143
lines changed

opentelemetry-api/src/opentelemetry/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ def __init__(self, *args, **kwargs):
7373
def _init(self, *args, **kwargs):
7474
pass
7575

76-
@staticmethod
7776
@abstractmethod
7877
def _get_default_arguments(self, *args, **kwargs):
7978
pass

opentelemetry-api/src/opentelemetry/metrics/__init__.py

Lines changed: 76 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,16 @@
2828
from threading import RLock
2929
from typing import Optional, cast
3030

31+
from opentelemetry.safe import BaseSafeClass
3132
from opentelemetry.environment_variables import OTEL_PYTHON_METER_PROVIDER
3233
from opentelemetry.metrics.instrument import (
3334
Counter,
34-
DefaultCounter,
35-
DefaultHistogram,
36-
DefaultObservableCounter,
37-
DefaultObservableGauge,
38-
DefaultObservableUpDownCounter,
39-
DefaultUpDownCounter,
35+
NoOpCounter,
36+
NoOpHistogram,
37+
NoOpObservableCounter,
38+
NoOpObservableGauge,
39+
NoOpObservableUpDownCounter,
40+
NoOpUpDownCounter,
4041
Histogram,
4142
ObservableCounter,
4243
ObservableGauge,
@@ -64,110 +65,108 @@ def get_meter(
6465
_logger.warning("Invalid name: %s", name)
6566

6667

67-
class _DefaultMeterProvider(MeterProvider):
68-
def get_meter(
69-
self,
70-
name,
71-
version=None,
72-
schema_url=None,
73-
) -> "Meter":
74-
with self._lock:
75-
super().get_meter(name, version=version, schema_url=schema_url)
76-
# This is done in order to make it possible to store configuration
77-
# in the meter provider and make it automatically accessible for
78-
# any meter even after it changes.
79-
meter = _DefaultMeter(name, version=version, schema_url=schema_url)
80-
meter._meter_provider = self # pylint: disable=protected-access
81-
return meter
82-
83-
84-
class ProxyMeterProvider(MeterProvider):
85-
def get_meter(
86-
self,
87-
name,
88-
version=None,
89-
schema_url=None,
90-
) -> "Meter":
91-
with self._lock:
92-
if _METER_PROVIDER:
93-
return _METER_PROVIDER.get_meter(
94-
name, version=version, schema_url=schema_url
95-
)
96-
return ProxyMeter(name, version=version, schema_url=schema_url)
97-
98-
9968
class Meter(ABC):
10069
def __init__(self, name, version=None, schema_url=None):
10170
super().__init__()
102-
self._lock = RLock()
103-
self._name = name
104-
self._version = version
105-
self._schema_url = schema_url
106-
self._instrument_names = set()
107-
self._meter_provider = None
10871

109-
@property
110-
def name(self):
111-
with self._lock:
112-
return self._name
72+
def _secure_instrument_name(self, name) -> bool:
73+
name = name.lower()
11374

114-
@property
115-
def version(self):
116-
with self._lock:
117-
return self._version
75+
if name in self._instrument_names:
76+
warn(f"Instrument name {name} has been used already")
77+
return False
11878

119-
@property
120-
def schema_url(self):
121-
with self._lock:
122-
return self._schema_url
123-
124-
def _secure_instrument_name(self, name):
125-
with self._lock:
126-
name = name.lower()
127-
128-
if name in self._instrument_names:
129-
_logger.error("Instrument name %s has been used already", name)
130-
131-
else:
132-
self._instrument_names.add(name)
79+
else:
80+
self._instrument_names.add(name)
81+
return True
13382

13483
@abstractmethod
13584
def create_counter(self, name, unit="", description="") -> Counter:
136-
with self._lock:
137-
self._secure_instrument_name(name)
85+
pass
13886

13987
@abstractmethod
14088
def create_up_down_counter(
14189
self, name, unit="", description=""
14290
) -> UpDownCounter:
143-
with self._lock:
144-
self._secure_instrument_name(name)
91+
pass
14592

14693
@abstractmethod
14794
def create_observable_counter(
14895
self, name, callback, unit="", description=""
14996
) -> ObservableCounter:
150-
with self._lock:
151-
self._secure_instrument_name(name)
97+
pass
15298

15399
@abstractmethod
154100
def create_histogram(self, name, unit="", description="") -> Histogram:
155-
with self._lock:
156-
self._secure_instrument_name(name)
101+
pass
157102

158103
@abstractmethod
159104
def create_observable_gauge(
160105
self, name, callback, unit="", description=""
161106
) -> ObservableGauge:
162-
with self._lock:
163-
self._secure_instrument_name(name)
107+
pass
164108

165109
@abstractmethod
166110
def create_observable_up_down_counter(
167111
self, name, callback, unit="", description=""
168112
) -> ObservableUpDownCounter:
113+
pass
114+
115+
116+
class NoOpMeter(BaseSafeClass, Meter):
117+
def create_counter(self, name, unit="", description="") -> Counter:
118+
return NoOpCounter(_safe=True)
119+
120+
def create_up_down_counter(
121+
self, name, unit="", description=""
122+
) -> UpDownCounter:
123+
return NoOpUpDownCounter(_safe=True)
124+
125+
def create_observable_counter(
126+
self, name, callback, unit="", description=""
127+
) -> ObservableCounter:
128+
129+
def create_histogram(self, name, unit="", description="") -> Histogram:
130+
131+
def create_observable_gauge(
132+
self, name, callback, unit="", description=""
133+
) -> ObservableGauge:
134+
135+
def create_observable_up_down_counter(
136+
self, name, callback, unit="", description=""
137+
) -> ObservableUpDownCounter:
138+
139+
140+
class NoOpMeterProvider(BaseSafeClass, MeterProvider):
141+
def get_meter(
142+
self,
143+
name,
144+
version=None,
145+
schema_url=None,
146+
) -> "Meter":
147+
148+
149+
def _init(self, *args, **kwargs):
150+
pass
151+
152+
def _get_default_arguments(self, *args, **kwargs):
153+
return (), {}
154+
155+
156+
class ProxyMeterProvider(MeterProvider):
157+
def get_meter(
158+
self,
159+
name,
160+
version=None,
161+
schema_url=None,
162+
) -> "Meter":
169163
with self._lock:
170-
self._secure_instrument_name(name)
164+
if _METER_PROVIDER:
165+
return _METER_PROVIDER.get_meter(
166+
name, version=version, schema_url=schema_url
167+
)
168+
return ProxyMeter(name, version=version, schema_url=schema_url)
169+
171170

172171

173172
class ProxyMeter(Meter):
@@ -226,71 +225,6 @@ def create_observable_up_down_counter(
226225
)
227226

228227

229-
class _DefaultMeter(Meter):
230-
def create_counter(self, name, unit="", description="") -> Counter:
231-
with self._lock:
232-
super().create_counter(name, unit=unit, description=description)
233-
return DefaultCounter(name, unit=unit, description=description)
234-
235-
def create_up_down_counter(
236-
self, name, unit="", description=""
237-
) -> UpDownCounter:
238-
with self._lock:
239-
super().create_up_down_counter(
240-
name, unit=unit, description=description
241-
)
242-
return DefaultUpDownCounter(
243-
name, unit=unit, description=description
244-
)
245-
246-
def create_observable_counter(
247-
self, name, callback, unit="", description=""
248-
) -> ObservableCounter:
249-
with self._lock:
250-
super().create_observable_counter(
251-
name, callback, unit=unit, description=description
252-
)
253-
return DefaultObservableCounter(
254-
name,
255-
callback,
256-
unit=unit,
257-
description=description,
258-
)
259-
260-
def create_histogram(self, name, unit="", description="") -> Histogram:
261-
with self._lock:
262-
super().create_histogram(name, unit=unit, description=description)
263-
return DefaultHistogram(name, unit=unit, description=description)
264-
265-
def create_observable_gauge(
266-
self, name, callback, unit="", description=""
267-
) -> ObservableGauge:
268-
with self._lock:
269-
super().create_observable_gauge(
270-
name, callback, unit=unit, description=description
271-
)
272-
return DefaultObservableGauge(
273-
name,
274-
callback,
275-
unit=unit,
276-
description=description,
277-
)
278-
279-
def create_observable_up_down_counter(
280-
self, name, callback, unit="", description=""
281-
) -> ObservableUpDownCounter:
282-
with self._lock:
283-
super().create_observable_up_down_counter(
284-
name, callback, unit=unit, description=description
285-
)
286-
return DefaultObservableUpDownCounter(
287-
name,
288-
callback,
289-
unit=unit,
290-
description=description,
291-
)
292-
293-
294228
_METER_PROVIDER = None
295229
_PROXY_METER_PROVIDER = None
296230

0 commit comments

Comments
 (0)