Skip to content

Commit 139a1cc

Browse files
committed
add metrics tests
1 parent e91b396 commit 139a1cc

File tree

2 files changed

+50
-5
lines changed

2 files changed

+50
-5
lines changed

instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -401,18 +401,18 @@ def __init__(self, *args, **kwargs):
401401
)
402402

403403
_before_request = _wrapped_before_request(
404+
active_requests_counter,
404405
_InstrumentedFlask._request_hook,
405406
tracer,
406407
excluded_urls=_InstrumentedFlask._excluded_urls,
407-
active_requests_counter=active_requests_counter,
408408
)
409409
self._before_request = _before_request
410410
self.before_request(_before_request)
411411

412412
_teardown_request = _wrapped_teardown_request(
413-
excluded_urls=_InstrumentedFlask._excluded_urls,
414-
active_requests_counter=active_requests_counter,
415-
duration_histogram=duration_histogram,
413+
active_requests_counter,
414+
duration_histogram,
415+
excluded_urls=_InstrumentedFlask._excluded_urls
416416
)
417417
self.teardown_request(_teardown_request)
418418

instrumentation/opentelemetry-instrumentation-flask/tests/test_programmatic.py

+46-1
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,20 @@
1717
from flask import Flask, request
1818

1919
from opentelemetry import trace
20-
from opentelemetry.instrumentation.flask import FlaskInstrumentor
20+
from opentelemetry.instrumentation.flask import (
21+
FlaskInstrumentor,
22+
_duration_attrs,
23+
_active_requests_count_attrs,
24+
)
2125
from opentelemetry.instrumentation.propagators import (
2226
TraceResponsePropagator,
2327
get_global_response_propagator,
2428
set_global_response_propagator,
2529
)
30+
from opentelemetry.sdk.metrics.export import (
31+
HistogramDataPoint,
32+
NumberDataPoint,
33+
)
2634
from opentelemetry.instrumentation.wsgi import OpenTelemetryMiddleware
2735
from opentelemetry.sdk.resources import Resource
2836
from opentelemetry.semconv.trace import SpanAttributes
@@ -48,6 +56,15 @@ def expected_attributes(override_attributes):
4856
default_attributes[key] = val
4957
return default_attributes
5058

59+
_expected_metric_names = [
60+
"http.server.active_requests",
61+
"http.server.duration",
62+
]
63+
_recommended_attrs = {
64+
"http.server.active_requests": _active_requests_count_attrs,
65+
"http.server.duration": _duration_attrs,
66+
}
67+
5168

5269
class TestProgrammatic(InstrumentationTest, WsgiTestBase):
5370
def setUp(self):
@@ -250,6 +267,34 @@ def test_exclude_lists_from_explicit(self):
250267
span_list = self.memory_exporter.get_finished_spans()
251268
self.assertEqual(len(span_list), 1)
252269

270+
def test_wsgi_metrics(self):
271+
self.client.get('/hello/123')
272+
self.client.get('/hello/321')
273+
self.client.get('/hello/756')
274+
metrics_list = self.memory_metrics_reader.get_metrics_data()
275+
number_data_point_seen = False
276+
histogram_data_point_seen = False
277+
self.assertTrue(len(metrics_list.resource_metrics) != 0)
278+
for resource_metric in metrics_list.resource_metrics:
279+
self.assertTrue(len(resource_metric.scope_metrics) != 0)
280+
for scope_metric in resource_metric.scope_metrics:
281+
self.assertTrue(len(scope_metric.metrics) != 0)
282+
for metric in scope_metric.metrics:
283+
self.assertIn(metric.name, _expected_metric_names)
284+
data_points = list(metric.data.data_points)
285+
self.assertEqual(len(data_points), 1)
286+
for point in data_points:
287+
if isinstance(point, HistogramDataPoint):
288+
self.assertEqual(point.count, 3)
289+
histogram_data_point_seen = True
290+
if isinstance(point, NumberDataPoint):
291+
number_data_point_seen = True
292+
for attr in point.attributes:
293+
self.assertIn(
294+
attr, _recommended_attrs[metric.name]
295+
)
296+
self.assertTrue(number_data_point_seen and histogram_data_point_seen)
297+
253298

254299
class TestProgrammaticHooks(InstrumentationTest, WsgiTestBase):
255300
def setUp(self):

0 commit comments

Comments
 (0)