Skip to content
Merged
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 @@ -151,6 +151,9 @@ def matches(self, scope: Scope) -> tuple[Match, Scope]:
return super().matches(scope)


SCOPE = "opentelemetry.instrumentation.fastapi"


class TestBaseFastAPI(TestBase):
def _create_app(self):
app = self._create_fastapi_app()
Expand Down Expand Up @@ -454,7 +457,7 @@ def test_instrument_app_with_instrument(self):
self.assertIn("GET /foobar", span.name)
self.assertEqual(
span.instrumentation_scope.name,
"opentelemetry.instrumentation.fastapi",
SCOPE,
)

def test_uninstrument_app(self):
Expand Down Expand Up @@ -525,96 +528,66 @@ def test_fastapi_metrics(self):
self._client.get("/foobar")
self._client.get("/foobar")
self._client.get("/foobar")
metrics_list = self.memory_metrics_reader.get_metrics_data()
number_data_point_seen = False
histogram_data_point_seen = False
self.assertTrue(len(metrics_list.resource_metrics) == 1)
for resource_metric in metrics_list.resource_metrics:
self.assertTrue(len(resource_metric.scope_metrics) == 1)
for scope_metric in resource_metric.scope_metrics:
self.assertEqual(
scope_metric.scope.name,
"opentelemetry.instrumentation.fastapi",
)
self.assertTrue(len(scope_metric.metrics) == 3)
for metric in scope_metric.metrics:
self.assertIn(metric.name, _expected_metric_names_old)
data_points = list(metric.data.data_points)
self.assertEqual(len(data_points), 1)
for point in data_points:
if isinstance(point, HistogramDataPoint):
self.assertEqual(point.count, 3)
histogram_data_point_seen = True
if isinstance(point, NumberDataPoint):
number_data_point_seen = True
for attr in point.attributes:
self.assertIn(
attr, _recommended_attrs_old[metric.name]
)
metrics = self.get_sorted_metrics(SCOPE)
self.assertTrue(len(metrics) == 3)
for metric in metrics:
self.assertIn(metric.name, _expected_metric_names_old)
data_points = list(metric.data.data_points)
self.assertEqual(len(data_points), 1)
for point in data_points:
if isinstance(point, HistogramDataPoint):
self.assertEqual(point.count, 3)
histogram_data_point_seen = True
if isinstance(point, NumberDataPoint):
number_data_point_seen = True
for attr in point.attributes:
self.assertIn(attr, _recommended_attrs_old[metric.name])
self.assertTrue(number_data_point_seen and histogram_data_point_seen)

def test_fastapi_metrics_new_semconv(self):
self._client.get("/foobar")
self._client.get("/foobar")
self._client.get("/foobar")
metrics_list = self.memory_metrics_reader.get_metrics_data()
number_data_point_seen = False
histogram_data_point_seen = False
self.assertTrue(len(metrics_list.resource_metrics) == 1)
for resource_metric in metrics_list.resource_metrics:
self.assertTrue(len(resource_metric.scope_metrics) == 1)
for scope_metric in resource_metric.scope_metrics:
self.assertEqual(
scope_metric.scope.name,
"opentelemetry.instrumentation.fastapi",
)
self.assertTrue(len(scope_metric.metrics) == 3)
for metric in scope_metric.metrics:
self.assertIn(metric.name, _expected_metric_names_new)
data_points = list(metric.data.data_points)
self.assertEqual(len(data_points), 1)
for point in data_points:
if isinstance(point, HistogramDataPoint):
self.assertEqual(point.count, 3)
histogram_data_point_seen = True
if isinstance(point, NumberDataPoint):
number_data_point_seen = True
for attr in point.attributes:
self.assertIn(
attr, _recommended_attrs_new[metric.name]
)
metrics = self.get_sorted_metrics(SCOPE)
self.assertTrue(len(metrics) == 3)
for metric in metrics:
self.assertIn(metric.name, _expected_metric_names_new)
data_points = list(metric.data.data_points)
self.assertEqual(len(data_points), 1)
for point in data_points:
if isinstance(point, HistogramDataPoint):
self.assertEqual(point.count, 3)
histogram_data_point_seen = True
if isinstance(point, NumberDataPoint):
number_data_point_seen = True
for attr in point.attributes:
self.assertIn(attr, _recommended_attrs_new[metric.name])
self.assertTrue(number_data_point_seen and histogram_data_point_seen)

def test_fastapi_metrics_both_semconv(self):
self._client.get("/foobar")
self._client.get("/foobar")
self._client.get("/foobar")
metrics_list = self.memory_metrics_reader.get_metrics_data()
number_data_point_seen = False
histogram_data_point_seen = False
self.assertTrue(len(metrics_list.resource_metrics) == 1)
for resource_metric in metrics_list.resource_metrics:
self.assertTrue(len(resource_metric.scope_metrics) == 1)
for scope_metric in resource_metric.scope_metrics:
self.assertEqual(
scope_metric.scope.name,
"opentelemetry.instrumentation.fastapi",
)
self.assertTrue(len(scope_metric.metrics) == 5)
for metric in scope_metric.metrics:
self.assertIn(metric.name, _expected_metric_names_both)
data_points = list(metric.data.data_points)
self.assertEqual(len(data_points), 1)
for point in data_points:
if isinstance(point, HistogramDataPoint):
self.assertEqual(point.count, 3)
histogram_data_point_seen = True
if isinstance(point, NumberDataPoint):
number_data_point_seen = True
for attr in point.attributes:
self.assertIn(
attr, _recommended_attrs_both[metric.name]
)
metrics = self.get_sorted_metrics(SCOPE)
self.assertTrue(len(metrics) == 5)
for metric in metrics:
self.assertIn(metric.name, _expected_metric_names_both)
data_points = list(metric.data.data_points)
self.assertEqual(len(data_points), 1)
for point in data_points:
if isinstance(point, HistogramDataPoint):
self.assertEqual(point.count, 3)
histogram_data_point_seen = True
if isinstance(point, NumberDataPoint):
number_data_point_seen = True
for attr in point.attributes:
self.assertIn(attr, _recommended_attrs_both[metric.name])
self.assertTrue(number_data_point_seen and histogram_data_point_seen)

def test_basic_metric_success(self):
Expand All @@ -638,10 +611,8 @@ def test_basic_metric_success(self):
HTTP_FLAVOR: "1.1",
HTTP_SERVER_NAME: "testserver",
}
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 Down Expand Up @@ -672,10 +643,8 @@ def test_basic_metric_success_new_semconv(self):
HTTP_REQUEST_METHOD: "GET",
URL_SCHEME: "https",
}
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 Down Expand Up @@ -729,10 +698,8 @@ def test_basic_metric_success_both_semconv(self):
HTTP_REQUEST_METHOD: "GET",
URL_SCHEME: "https",
}
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 @@ -803,10 +770,8 @@ def test_basic_metric_nonstandard_http_method_success(self):
HTTP_FLAVOR: "1.1",
HTTP_SERVER_NAME: "testserver",
}
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 Down Expand Up @@ -837,10 +802,8 @@ def test_basic_metric_nonstandard_http_method_success_new_semconv(self):
HTTP_REQUEST_METHOD: "_OTHER",
URL_SCHEME: "https",
}
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 Down Expand Up @@ -894,10 +857,8 @@ def test_basic_metric_nonstandard_http_method_success_both_semconv(self):
HTTP_REQUEST_METHOD: "_OTHER",
URL_SCHEME: "https",
}
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 @@ -955,10 +916,8 @@ def test_basic_post_request_metric_success(self):
duration = max(round((default_timer() - start) * 1000), 0)
response_size = int(response.headers.get("content-length"))
request_size = int(response.request.headers.get("content-length"))
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 All @@ -980,10 +939,8 @@ def test_basic_post_request_metric_success_new_semconv(self):
duration_s = max(default_timer() - start, 0)
response_size = int(response.headers.get("content-length"))
request_size = int(response.request.headers.get("content-length"))
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 All @@ -1008,10 +965,8 @@ def test_basic_post_request_metric_success_both_semconv(self):
duration_s = max(default_timer() - start, 0)
response_size = int(response.headers.get("content-length"))
request_size = int(response.request.headers.get("content-length"))
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 All @@ -1036,10 +991,8 @@ def test_metric_uninstrument_app(self):
self._client.get("/foobar")
self._instrumentor.uninstrument_app(self._app)
self._client.get("/foobar")
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 All @@ -1053,10 +1006,8 @@ def test_metric_uninstrument(self):
self._instrumentor.uninstrument()
self._client.get("/foobar")

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