Skip to content

Commit 6f14fb2

Browse files
committed
Replace raised exception for a warning
1 parent c774c69 commit 6f14fb2

File tree

4 files changed

+47
-27
lines changed

4 files changed

+47
-27
lines changed

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

+20-13
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

+11-3
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

+6-8
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def __init__(
6464
self._instrumentation_info = instrumentation_info
6565
self._measurement_consumer = measurement_consumer
6666

67-
def create_counter(self, name, unit=None, description=None) -> APICounter:
67+
def create_counter(self, name, unit="", description="") -> APICounter:
6868
super().create_counter(name, unit=unit, description=description)
6969
return Counter(
7070
name,
@@ -75,7 +75,7 @@ def create_counter(self, name, unit=None, description=None) -> APICounter:
7575
)
7676

7777
def create_up_down_counter(
78-
self, name, unit=None, description=None
78+
self, name, unit="", description=""
7979
) -> APIUpDownCounter:
8080
super().create_up_down_counter(
8181
name, unit=unit, description=description
@@ -89,7 +89,7 @@ def create_up_down_counter(
8989
)
9090

9191
def create_observable_counter(
92-
self, name, callback, unit=None, description=None
92+
self, name, callback, unit="", description=""
9393
) -> APIObservableCounter:
9494
super().create_observable_counter(
9595
name, callback, unit=unit, description=description
@@ -108,9 +108,7 @@ def create_observable_counter(
108108

109109
return instrument
110110

111-
def create_histogram(
112-
self, name, unit=None, description=None
113-
) -> APIHistogram:
111+
def create_histogram(self, name, unit="", description="") -> APIHistogram:
114112
super().create_histogram(name, unit=unit, description=description)
115113
return Histogram(
116114
name,
@@ -121,7 +119,7 @@ def create_histogram(
121119
)
122120

123121
def create_observable_gauge(
124-
self, name, callback, unit=None, description=None
122+
self, name, callback, unit="", description=""
125123
) -> APIObservableGauge:
126124
super().create_observable_gauge(
127125
name, callback, unit=unit, description=description
@@ -141,7 +139,7 @@ def create_observable_gauge(
141139
return instrument
142140

143141
def create_observable_up_down_counter(
144-
self, name, callback, unit=None, description=None
142+
self, name, callback, unit="", description=""
145143
) -> APIObservableUpDownCounter:
146144
super().create_observable_up_down_counter(
147145
name, callback, unit=unit, description=description

opentelemetry-sdk/tests/metrics/test_metrics.py

+10-3
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)