Skip to content

Commit ce46229

Browse files
committed
Replace raised exception for a warning
1 parent d880bdb commit ce46229

File tree

4 files changed

+47
-27
lines changed

4 files changed

+47
-27
lines changed

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

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
from logging import getLogger
2727
from os import environ
2828
from threading import Lock
29-
from typing import List, Optional, cast
29+
from typing import List, Optional, Set, cast
3030

3131
from opentelemetry._metrics.instrument import (
3232
Counter,
@@ -115,7 +115,7 @@ def __init__(self, name, version=None, schema_url=None):
115115
self._name = name
116116
self._version = version
117117
self._schema_url = schema_url
118-
self._instrument_names = set()
118+
self._instrument_ids: Set[str] = set()
119119
self._instrument_names_lock = Lock()
120120

121121
@property
@@ -130,22 +130,27 @@ def version(self):
130130
def schema_url(self):
131131
return self._schema_url
132132

133-
def _check_instrument_name(self, name):
134-
if name.strip().lower() in self._instrument_names:
135-
raise Exception(f"Instrument name {name} has been used already")
133+
def _check_instrument_name(self, name, type_, unit, description):
136134

137-
with self._instrument_names_lock:
138-
self._instrument_names.add(name)
135+
instrument_id = "".join(
136+
[name.strip().lower(), str(type_), unit, description]
137+
)
138+
139+
if instrument_id in self._instrument_ids:
140+
_logger.warning("Instrument name %s has been used already", name)
141+
else:
142+
143+
self._instrument_ids.add(instrument_id)
139144

140145
@abstractmethod
141146
def create_counter(self, name, unit="", description="") -> Counter:
142-
self._check_instrument_name(name)
147+
self._check_instrument_name(name, Counter, unit, description)
143148

144149
@abstractmethod
145150
def create_up_down_counter(
146151
self, name, unit="", description=""
147152
) -> UpDownCounter:
148-
self._check_instrument_name(name)
153+
self._check_instrument_name(name, UpDownCounter, unit, description)
149154

150155
@abstractmethod
151156
def create_observable_counter(
@@ -229,23 +234,25 @@ def cpu_time_callback(states_to_include: set[str]) -> Iterable[Iterable[Measurem
229234
example, ``By`` for bytes. UCUM units are recommended.
230235
description: A description for this instrument and what it measures.
231236
"""
232-
self._check_instrument_name(name)
237+
self._check_instrument_name(name, ObservableCounter, unit, description)
233238

234239
@abstractmethod
235240
def create_histogram(self, name, unit="", description="") -> Histogram:
236-
self._check_instrument_name(name)
241+
self._check_instrument_name(name, Histogram, unit, description)
237242

238243
@abstractmethod
239244
def create_observable_gauge(
240245
self, name, callback, unit="", description=""
241246
) -> ObservableGauge:
242-
self._check_instrument_name(name)
247+
self._check_instrument_name(name, ObservableGauge, unit, description)
243248

244249
@abstractmethod
245250
def create_observable_up_down_counter(
246251
self, name, callback, unit="", description=""
247252
) -> ObservableUpDownCounter:
248-
self._check_instrument_name(name)
253+
self._check_instrument_name(
254+
name, ObservableUpDownCounter, unit, description
255+
)
249256

250257

251258
class _ProxyMeter(Meter):

opentelemetry-api/tests/metrics/test_meter.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
# limitations under the License.
1414
# type: ignore
1515

16+
from logging import WARNING
1617
from unittest import TestCase
1718
from unittest.mock import Mock
1819

@@ -121,14 +122,21 @@ def create_observable_up_down_counter(
121122
for instrument_name in [
122123
"counter",
123124
"up_down_counter",
124-
"observable_counter",
125125
"histogram",
126+
]:
127+
with self.assertLogs(level=WARNING):
128+
getattr(test_meter, f"create_{instrument_name}")(
129+
instrument_name
130+
)
131+
132+
for instrument_name in [
133+
"observable_counter",
126134
"observable_gauge",
127135
"observable_up_down_counter",
128136
]:
129-
with self.assertRaises(Exception):
137+
with self.assertLogs(level=WARNING):
130138
getattr(test_meter, f"create_{instrument_name}")(
131-
instrument_name
139+
instrument_name, Mock()
132140
)
133141

134142
def test_create_counter(self):

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def __init__(
6363
self._instrumentation_info = instrumentation_info
6464
self._measurement_consumer = measurement_consumer
6565

66-
def create_counter(self, name, unit=None, description=None) -> APICounter:
66+
def create_counter(self, name, unit="", description="") -> APICounter:
6767
super().create_counter(name, unit=unit, description=description)
6868
return Counter(
6969
name,
@@ -74,7 +74,7 @@ def create_counter(self, name, unit=None, description=None) -> APICounter:
7474
)
7575

7676
def create_up_down_counter(
77-
self, name, unit=None, description=None
77+
self, name, unit="", description=""
7878
) -> APIUpDownCounter:
7979
super().create_up_down_counter(
8080
name, unit=unit, description=description
@@ -88,7 +88,7 @@ def create_up_down_counter(
8888
)
8989

9090
def create_observable_counter(
91-
self, name, callback, unit=None, description=None
91+
self, name, callback, unit="", description=""
9292
) -> APIObservableCounter:
9393
super().create_observable_counter(
9494
name, callback, unit=unit, description=description
@@ -107,9 +107,7 @@ def create_observable_counter(
107107

108108
return instrument
109109

110-
def create_histogram(
111-
self, name, unit=None, description=None
112-
) -> APIHistogram:
110+
def create_histogram(self, name, unit="", description="") -> APIHistogram:
113111
super().create_histogram(name, unit=unit, description=description)
114112
return Histogram(
115113
name,
@@ -120,7 +118,7 @@ def create_histogram(
120118
)
121119

122120
def create_observable_gauge(
123-
self, name, callback, unit=None, description=None
121+
self, name, callback, unit="", description=""
124122
) -> APIObservableGauge:
125123
super().create_observable_gauge(
126124
name, callback, unit=unit, description=description
@@ -140,7 +138,7 @@ def create_observable_gauge(
140138
return instrument
141139

142140
def create_observable_up_down_counter(
143-
self, name, callback, unit=None, description=None
141+
self, name, callback, unit="", description=""
144142
) -> APIObservableUpDownCounter:
145143
super().create_observable_up_down_counter(
146144
name, callback, unit=unit, description=description

opentelemetry-sdk/tests/metrics/test_metrics.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -288,14 +288,21 @@ def test_repeated_instrument_names(self):
288288
for instrument_name in [
289289
"counter",
290290
"up_down_counter",
291-
"observable_counter",
292291
"histogram",
292+
]:
293+
with self.assertLogs(level=WARNING):
294+
getattr(self.meter, f"create_{instrument_name}")(
295+
instrument_name
296+
)
297+
298+
for instrument_name in [
299+
"observable_counter",
293300
"observable_gauge",
294301
"observable_up_down_counter",
295302
]:
296-
with self.assertRaises(Exception):
303+
with self.assertLogs(level=WARNING):
297304
getattr(self.meter, f"create_{instrument_name}")(
298-
instrument_name
305+
instrument_name, Mock()
299306
)
300307

301308
def test_create_counter(self):

0 commit comments

Comments
 (0)