diff --git a/CHANGELOG.md b/CHANGELOG.md index 66d75fa655..b5be15a96f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `opentelemetry-instrumentation` Fixed cases where trying to use an instrumentation package without the target library was crashing auto instrumentation agent. ([#530](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/530)) +- `opentelemetry-instrumentation-django` Migrated Django middleware to new-style. + ([#533](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/533)) ## [0.22b0](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.3.0-0.22b0) - 2021-06-01 diff --git a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py index f37372d721..6846aa9fa8 100644 --- a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py +++ b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py @@ -42,11 +42,6 @@ except ImportError: from django.urls import Resolver404, resolve -try: - from django.utils.deprecation import MiddlewareMixin -except ImportError: - MiddlewareMixin = object - _logger = getLogger(__name__) _attributes_by_preference = [ [ @@ -70,7 +65,7 @@ ] -class _DjangoMiddleware(MiddlewareMixin): +class _DjangoMiddleware: """Django Middleware for OpenTelemetry""" _environ_activation_key = ( @@ -89,6 +84,9 @@ class _DjangoMiddleware(MiddlewareMixin): [Span, HttpRequest, HttpResponse], None ] = None + def __init__(self, get_response): + self.get_response = get_response + @staticmethod def _get_span_name(request): try: @@ -111,6 +109,11 @@ def _get_span_name(request): except Resolver404: return "HTTP {}".format(request.method) + def __call__(self, request): + self.process_request(request) + response = self.get_response(request) + return self.process_response(request, response) + def process_request(self, request): # request.META is a dictionary containing all available HTTP headers # Read more about request.META here: