Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d71cf68

Browse files
authored
Return noopmeter on invalid name getmeter (open-telemetry#2428)
1 parent 02863de commit d71cf68

File tree

3 files changed

+28
-1
lines changed

3 files changed

+28
-1
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ env:
1010
# Otherwise, set variable to the commit of your branch on
1111
# opentelemetry-python-contrib which is compatible with these Core repo
1212
# changes.
13-
CONTRIB_REPO_SHA: b541c59284100e617303a5c1f505ca2872045792
13+
CONTRIB_REPO_SHA: ad2594e166bd7f4cd40780df418f82389de970a6
1414
# This is needed because we do not clone the core repo in contrib builds anymore.
1515
# When running contrib builds as part of core builds, we use actions/checkout@v2 which
1616
# does not set an environment variable (simply just runs tox), which is different when

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,10 @@ def get_meter(
230230
)
231231
return NoOpMeter(name, version=version, schema_url=schema_url)
232232

233+
if not name:
234+
_logger.warning("Meter name cannot be None or empty.")
235+
return NoOpMeter(name, version=version, schema_url=schema_url)
236+
233237
info = InstrumentationInfo(name, version, schema_url)
234238
with self._meter_lock:
235239
if not self._meters.get(info):

opentelemetry-sdk/tests/metrics/test_metrics.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from unittest import TestCase
1818
from unittest.mock import MagicMock, Mock, patch
1919

20+
from opentelemetry._metrics import NoOpMeter
2021
from opentelemetry.sdk._metrics import Meter, MeterProvider
2122
from opentelemetry.sdk._metrics.instrument import (
2223
Counter,
@@ -80,6 +81,28 @@ def test_get_meter(self):
8081
self.assertEqual(meter._instrumentation_info.version, "version")
8182
self.assertEqual(meter._instrumentation_info.schema_url, "schema_url")
8283

84+
def test_get_meter_empty(self):
85+
"""
86+
`MeterProvider.get_meter` called with None or empty string as name
87+
should return a NoOpMeter.
88+
"""
89+
90+
meter = MeterProvider().get_meter(
91+
None,
92+
version="version",
93+
schema_url="schema_url",
94+
)
95+
self.assertIsInstance(meter, NoOpMeter)
96+
self.assertEqual(meter._name, None)
97+
98+
meter = MeterProvider().get_meter(
99+
"",
100+
version="version",
101+
schema_url="schema_url",
102+
)
103+
self.assertIsInstance(meter, NoOpMeter)
104+
self.assertEqual(meter._name, "")
105+
83106
def test_get_meter_duplicate(self):
84107
"""
85108
Subsequent calls to `MeterProvider.get_meter` with the same arguments

0 commit comments

Comments
 (0)