mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-30 13:43:03 +08:00
Adding metric collection as part of instrumentations - Django (#1230)
This commit is contained in:
@ -23,6 +23,8 @@ from django.test.utils import setup_test_environment, teardown_test_environment
|
||||
|
||||
from opentelemetry.configuration import Configuration
|
||||
from opentelemetry.instrumentation.django import DjangoInstrumentor
|
||||
from opentelemetry.sdk.util import get_dict_as_key
|
||||
from opentelemetry.test.test_base import TestBase
|
||||
from opentelemetry.test.wsgitestutil import WsgiTestBase
|
||||
from opentelemetry.trace import SpanKind
|
||||
from opentelemetry.trace.status import StatusCanonicalCode
|
||||
@ -53,7 +55,7 @@ urlpatterns = [
|
||||
_django_instrumentor = DjangoInstrumentor()
|
||||
|
||||
|
||||
class TestMiddleware(WsgiTestBase):
|
||||
class TestMiddleware(TestBase, WsgiTestBase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
@ -121,6 +123,26 @@ class TestMiddleware(WsgiTestBase):
|
||||
self.assertEqual(span.attributes["http.status_code"], 200)
|
||||
self.assertEqual(span.attributes["http.status_text"], "OK")
|
||||
|
||||
self.assertIsNotNone(_django_instrumentor.meter)
|
||||
self.assertEqual(len(_django_instrumentor.meter.metrics), 1)
|
||||
recorder = _django_instrumentor.meter.metrics.pop()
|
||||
match_key = get_dict_as_key(
|
||||
{
|
||||
"http.flavor": "1.1",
|
||||
"http.method": "GET",
|
||||
"http.status_code": "200",
|
||||
"http.url": "http://testserver/traced/",
|
||||
}
|
||||
)
|
||||
for key in recorder.bound_instruments.keys():
|
||||
self.assertEqual(key, match_key)
|
||||
# pylint: disable=protected-access
|
||||
bound = recorder.bound_instruments.get(key)
|
||||
for view_data in bound.view_datas:
|
||||
self.assertEqual(view_data.labels, key)
|
||||
self.assertEqual(view_data.aggregator.current.count, 1)
|
||||
self.assertGreaterEqual(view_data.aggregator.current.sum, 0)
|
||||
|
||||
def test_not_recording(self):
|
||||
mock_tracer = Mock()
|
||||
mock_span = Mock()
|
||||
@ -180,6 +202,23 @@ class TestMiddleware(WsgiTestBase):
|
||||
)
|
||||
self.assertEqual(span.attributes["http.route"], "^error/")
|
||||
self.assertEqual(span.attributes["http.scheme"], "http")
|
||||
self.assertIsNotNone(_django_instrumentor.meter)
|
||||
self.assertEqual(len(_django_instrumentor.meter.metrics), 1)
|
||||
recorder = _django_instrumentor.meter.metrics.pop()
|
||||
match_key = get_dict_as_key(
|
||||
{
|
||||
"http.flavor": "1.1",
|
||||
"http.method": "GET",
|
||||
"http.url": "http://testserver/error/",
|
||||
}
|
||||
)
|
||||
for key in recorder.bound_instruments.keys():
|
||||
self.assertEqual(key, match_key)
|
||||
# pylint: disable=protected-access
|
||||
bound = recorder.bound_instruments.get(key)
|
||||
for view_data in bound.view_datas:
|
||||
self.assertEqual(view_data.labels, key)
|
||||
self.assertEqual(view_data.aggregator.current.count, 1)
|
||||
|
||||
@patch(
|
||||
"opentelemetry.instrumentation.django.middleware._DjangoMiddleware._excluded_urls",
|
||||
|
Reference in New Issue
Block a user