Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,9 @@ async def do_request():
return loop.run_until_complete(do_request())


SCOPE = "opentelemetry.instrumentation.aiohttp_client"


# pylint: disable=too-many-public-methods
class TestAioHttpIntegration(TestBase):
_test_status_codes = (
Expand Down Expand Up @@ -122,7 +125,7 @@ def _assert_spans(self, spans, num_spans=1):
)

def _assert_metrics(self, num_metrics: int = 1):
metrics = self.get_sorted_metrics()
metrics = self.get_sorted_metrics(SCOPE)
self.assertEqual(len(metrics), num_metrics)
return metrics

Expand Down Expand Up @@ -1312,7 +1315,7 @@ def _assert_spans(self, num_spans: int):
return finished_spans

def _assert_metrics(self, num_metrics: int = 1):
metrics = self.get_sorted_metrics()
metrics = self.get_sorted_metrics(SCOPE)
self.assertEqual(len(metrics), num_metrics)
return metrics

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -302,10 +302,12 @@ def generate():
"Flask 3.1+ streaming context cleanup only enabled on Python 3.10+",
)
@skipIf(
lambda: not __import__(
"opentelemetry.instrumentation.flask",
fromlist=["_IS_FLASK_31_PLUS"],
)._IS_FLASK_31_PLUS,
lambda: (
not __import__(
"opentelemetry.instrumentation.flask",
fromlist=["_IS_FLASK_31_PLUS"],
)._IS_FLASK_31_PLUS
),
"Flask 3.1+ streaming context cleanup requires Flask 3.1+",
)
def test_flask_31_streaming_context_cleanup(self):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,8 @@ async def _async_no_update_request_hook(span: "Span", request: "RequestInfo"):

# pylint: disable=too-many-public-methods

SCOPE = "opentelemetry.instrumentation.httpx"


# Using this wrapper class to have a base class for the tests while also not
# angering pylint or mypy when calling methods not in the class when only
Expand Down Expand Up @@ -205,7 +207,7 @@ def assert_span(
return span_list

def assert_metrics(self, num_metrics: int = 1):
metrics = self.get_sorted_metrics()
metrics = self.get_sorted_metrics(SCOPE)
self.assertEqual(len(metrics), num_metrics)
return metrics

Expand Down Expand Up @@ -244,7 +246,7 @@ def test_basic(self):

def test_basic_metrics(self):
self.perform_request(self.URL)
metrics = self.get_sorted_metrics()
metrics = self.get_sorted_metrics(SCOPE)
self.assertEqual(len(metrics), 1)
duration_data_point = metrics[0].data.data_points[0]
self.assertEqual(duration_data_point.count, 1)
Expand Down Expand Up @@ -289,7 +291,7 @@ def test_nonstandard_http_method(self):
span, opentelemetry.instrumentation.httpx
)
# Validate metrics
metrics = self.get_sorted_metrics()
metrics = self.get_sorted_metrics(SCOPE)
self.assertEqual(len(metrics), 1)
duration_data_point = metrics[0].data.data_points[0]
self.assertEqual(duration_data_point.count, 1)
Expand Down Expand Up @@ -331,7 +333,7 @@ def test_nonstandard_http_method_new_semconv(self):
span, opentelemetry.instrumentation.httpx
)
# Validate metrics
metrics = self.get_sorted_metrics()
metrics = self.get_sorted_metrics(SCOPE)
self.assertEqual(len(metrics), 1)
duration_data_point = metrics[0].data.data_points[0]
self.assertEqual(duration_data_point.count, 1)
Expand Down Expand Up @@ -391,7 +393,7 @@ def test_basic_new_semconv(self):
)

# Validate metrics
metrics = self.get_sorted_metrics()
metrics = self.get_sorted_metrics(SCOPE)
self.assertEqual(len(metrics), 1)
duration_data_point = metrics[0].data.data_points[0]
self.assertEqual(duration_data_point.count, 1)
Expand Down Expand Up @@ -448,7 +450,7 @@ def test_basic_both_semconv(self):
)

# Validate metrics
metrics = self.get_sorted_metrics()
metrics = self.get_sorted_metrics(SCOPE)
self.assertEqual(len(metrics), 2)
# Old convention
self.assertEqual(
Expand Down Expand Up @@ -497,7 +499,7 @@ def test_not_foundbasic(self):
trace.StatusCode.ERROR,
)
# Validate metrics
metrics = self.get_sorted_metrics()
metrics = self.get_sorted_metrics(SCOPE)
self.assertEqual(len(metrics), 1)
duration_data_point = metrics[0].data.data_points[0]
self.assertEqual(
Expand Down Expand Up @@ -525,7 +527,7 @@ def test_not_foundbasic_new_semconv(self):
trace.StatusCode.ERROR,
)
# Validate metrics
metrics = self.get_sorted_metrics()
metrics = self.get_sorted_metrics(SCOPE)
self.assertEqual(len(metrics), 1)
duration_data_point = metrics[0].data.data_points[0]
self.assertEqual(
Expand Down Expand Up @@ -556,7 +558,7 @@ def test_not_foundbasic_both_semconv(self):
trace.StatusCode.ERROR,
)
# Validate metrics
metrics = self.get_sorted_metrics()
metrics = self.get_sorted_metrics(SCOPE)
self.assertEqual(len(metrics), 2)
# Old convention
self.assertEqual(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -264,10 +264,8 @@ def test_basic_metric_success(self):
"http.flavor": "1.1",
"http.server_name": "localhost",
}
metrics_list = self.memory_metrics_reader.get_metrics_data()
for metric in (
metrics_list.resource_metrics[0].scope_metrics[0].metrics
):
metrics = self.get_sorted_metrics(SCOPE)
for metric in metrics:
for point in list(metric.data.data_points):
if isinstance(point, HistogramDataPoint):
self.assertDictEqual(
Expand All @@ -289,10 +287,8 @@ def test_metric_uninstrument(self):
self.config = Configurator()
self._common_initialization(self.config)
self.client.get("/hello/756")
metrics_list = self.memory_metrics_reader.get_metrics_data()
for metric in (
metrics_list.resource_metrics[0].scope_metrics[0].metrics
):
metrics = self.get_sorted_metrics(SCOPE)
for metric in metrics:
for point in list(metric.data.data_points):
if isinstance(point, HistogramDataPoint):
self.assertEqual(point.count, 1)
Expand Down Expand Up @@ -471,17 +467,15 @@ def tearDown(self):
PyramidInstrumentor().uninstrument()

def _verify_metric_names(
self, metrics_list, expected_names, not_expected_names=None
self, metrics, expected_names, not_expected_names=None
):
metric_names = []
for resource_metric in metrics_list.resource_metrics:
for scope_metric in resource_metric.scope_metrics:
for metric in scope_metric.metrics:
metric_names.append(metric.name)
if expected_names:
self.assertIn(metric.name, expected_names)
if not_expected_names:
self.assertNotIn(metric.name, not_expected_names)
for metric in metrics:
metric_names.append(metric.name)
if expected_names:
self.assertIn(metric.name, expected_names)
if not_expected_names:
self.assertNotIn(metric.name, not_expected_names)
return metric_names

def _verify_duration_point(self, point):
Expand All @@ -496,11 +490,9 @@ def _verify_metric_duration(self, metric):
if isinstance(point, HistogramDataPoint):
self._verify_duration_point(point)

def _verify_duration_attributes(self, metrics_list):
for resource_metric in metrics_list.resource_metrics:
for scope_metric in resource_metric.scope_metrics:
for metric in scope_metric.metrics:
self._verify_metric_duration(metric)
def _verify_duration_attributes(self, metrics):
for metric in metrics:
self._verify_metric_duration(metric)


class TestSemConvDefault(_SemConvTestBase):
Expand Down Expand Up @@ -537,27 +529,23 @@ def test_basic_old_semconv(self):
def test_metrics_old_semconv(self):
self.client.get("/hello/123")

metrics_list = self.memory_metrics_reader.get_metrics_data()
self.assertTrue(len(metrics_list.resource_metrics) == 1)
metrics = self.get_sorted_metrics(SCOPE)
self.assertEqual(len(metrics), 2)

expected_metrics = [
HTTP_SERVER_ACTIVE_REQUESTS,
MetricInstruments.HTTP_SERVER_DURATION,
]
self._verify_metric_names(
metrics_list, expected_metrics, [HTTP_SERVER_REQUEST_DURATION]
metrics, expected_metrics, [HTTP_SERVER_REQUEST_DURATION]
)

for resource_metric in metrics_list.resource_metrics:
for scope_metric in resource_metric.scope_metrics:
for metric in scope_metric.metrics:
for point in metric.data.data_points:
if isinstance(point, HistogramDataPoint):
self.assertIn("http.method", point.attributes)
self.assertIn("http.scheme", point.attributes)
self.assertNotIn(
HTTP_REQUEST_METHOD, point.attributes
)
for metric in metrics:
for point in metric.data.data_points:
if isinstance(point, HistogramDataPoint):
self.assertIn("http.method", point.attributes)
self.assertIn("http.scheme", point.attributes)
self.assertNotIn(HTTP_REQUEST_METHOD, point.attributes)


class TestSemConvNew(_SemConvTestBase):
Expand Down Expand Up @@ -603,21 +591,19 @@ def test_basic_new_semconv(self):

def test_metrics_new_semconv(self):
self.client.get("/hello/456")
metrics_list = self.memory_metrics_reader.get_metrics_data()
self.assertTrue(len(metrics_list.resource_metrics) == 1)
metrics = self.get_sorted_metrics(SCOPE)
self.assertEqual(len(metrics), 2)

expected_metrics = [
HTTP_SERVER_REQUEST_DURATION,
HTTP_SERVER_ACTIVE_REQUESTS,
]
metric_names = self._verify_metric_names(
metrics_list, expected_metrics
)
metric_names = self._verify_metric_names(metrics, expected_metrics)

self.assertIn(HTTP_SERVER_REQUEST_DURATION, metric_names)
self.assertIn(HTTP_SERVER_ACTIVE_REQUESTS, metric_names)

self._verify_duration_attributes(metrics_list)
self._verify_duration_attributes(metrics)


class TestSemConvDup(_SemConvTestBase):
Expand Down Expand Up @@ -658,15 +644,15 @@ def test_basic_both_semconv(self):
def test_metrics_both_semconv(self):
self.client.get("/hello/789")

metrics_list = self.memory_metrics_reader.get_metrics_data()
self.assertTrue(len(metrics_list.resource_metrics) == 1)
metrics = self.get_sorted_metrics(SCOPE)
self.assertEqual(len(metrics), 3)

expected_metrics = [
MetricInstruments.HTTP_SERVER_DURATION,
HTTP_SERVER_REQUEST_DURATION,
HTTP_SERVER_ACTIVE_REQUESTS,
]
metric_names = self._verify_metric_names(metrics_list, None)
metric_names = self._verify_metric_names(metrics, None)

for metric_name in expected_metrics:
self.assertIn(metric_name, metric_names)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
from opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor
from opentelemetry.test.test_base import TestBase

SCOPE = "opentelemetry.instrumentation.sqlalchemy"


class TestSqlalchemyMetricsInstrumentation(TestBase):
def setUp(self):
Expand All @@ -31,7 +33,7 @@ def tearDown(self):
SQLAlchemyInstrumentor().uninstrument()

def assert_pool_idle_used_expected(self, pool_name, idle, used):
metrics = self.get_sorted_metrics()
metrics = self.get_sorted_metrics(SCOPE)
self.assertEqual(len(metrics), 1)
self.assert_metric_expected(
metrics[0],
Expand All @@ -56,7 +58,7 @@ def test_metrics_one_connection(self):
pool_logging_name=pool_name,
)

self.assertIsNone(self.memory_metrics_reader.get_metrics_data())
self.assertEqual(len(self.get_sorted_metrics(SCOPE)), 0)

with engine.connect():
self.assert_pool_idle_used_expected(
Expand All @@ -77,7 +79,7 @@ def test_metrics_without_pool_name(self):
pool_logging_name=pool_name,
)

self.assertIsNone(self.memory_metrics_reader.get_metrics_data())
self.assertEqual(len(self.get_sorted_metrics(SCOPE)), 0)

with engine.connect():
self.assert_pool_idle_used_expected(
Expand All @@ -98,7 +100,7 @@ def test_metrics_two_connections(self):
pool_logging_name=pool_name,
)

self.assertIsNone(self.memory_metrics_reader.get_metrics_data())
self.assertEqual(len(self.get_sorted_metrics(SCOPE)), 0)

with engine.connect():
with engine.connect():
Expand All @@ -119,7 +121,7 @@ def test_metrics_connections(self):
pool_logging_name=pool_name,
)

self.assertIsNone(self.memory_metrics_reader.get_metrics_data())
self.assertEqual(len(self.get_sorted_metrics(SCOPE)), 0)

with engine.connect():
with engine.connect():
Expand Down Expand Up @@ -152,4 +154,4 @@ def test_metric_uninstrument(self):

engine.connect()

self.assertIsNone(self.memory_metrics_reader.get_metrics_data())
self.assertEqual(len(self.get_sorted_metrics(SCOPE)), 0)
Loading