12
12
# See the License for the specific language governing permissions and
13
13
# limitations under the License.
14
14
15
+ import types
15
16
from logging import getLogger
16
17
from time import time
17
- import types
18
18
from typing import Callable
19
19
20
20
from django import VERSION as django_version
26
26
get_global_response_propagator ,
27
27
)
28
28
from opentelemetry .instrumentation .utils import extract_attributes_from_object
29
+ from opentelemetry .instrumentation .wsgi import add_response_attributes
29
30
from opentelemetry .instrumentation .wsgi import (
30
- add_response_attributes ,
31
31
collect_request_attributes as wsgi_collect_request_attributes ,
32
- wsgi_getter ,
33
32
)
33
+ from opentelemetry .instrumentation .wsgi import wsgi_getter
34
34
from opentelemetry .propagate import extract
35
35
from opentelemetry .semconv .trace import SpanAttributes
36
36
from opentelemetry .trace import Span , SpanKind , use_span
@@ -76,11 +76,11 @@ def __call__(self, request):
76
76
ASGIRequest = None
77
77
78
78
try :
79
+ from opentelemetry .instrumentation .asgi import asgi_getter
79
80
from opentelemetry .instrumentation .asgi import (
80
- asgi_getter ,
81
81
collect_request_attributes as asgi_collect_request_attributes ,
82
- set_status_code ,
83
82
)
83
+ from opentelemetry .instrumentation .asgi import set_status_code
84
84
85
85
_is_asgi_supported = True
86
86
except ImportError :
@@ -113,6 +113,10 @@ def __call__(self, request):
113
113
]
114
114
115
115
116
+ def _is_asgi_request (request : HttpRequest ) -> bool :
117
+ return bool (ASGIRequest and isinstance (request , ASGIRequest ))
118
+
119
+
116
120
class _DjangoMiddleware (MiddlewareMixin ):
117
121
"""Django Middleware for OpenTelemetry"""
118
122
@@ -154,9 +158,6 @@ def _get_span_name(request):
154
158
except Resolver404 :
155
159
return "HTTP {}" .format (request .method )
156
160
157
- def _is_asgi_request (self , request ):
158
- return ASGIRequest and isinstance (request , ASGIRequest )
159
-
160
161
def process_request (self , request ):
161
162
# request.META is a dictionary containing all available HTTP headers
162
163
# Read more about request.META here:
@@ -165,7 +166,7 @@ def process_request(self, request):
165
166
if self ._excluded_urls .url_disabled (request .build_absolute_uri ("?" )):
166
167
return
167
168
168
- is_asgi_request = self . _is_asgi_request (request )
169
+ is_asgi_request = _is_asgi_request (request )
169
170
if is_asgi_request and not _is_asgi_supported :
170
171
return
171
172
@@ -203,13 +204,17 @@ def process_request(self, request):
203
204
# contents, for the extract_attributes_from_object function to be able to retrieve
204
205
# attributes from it.
205
206
attributes = extract_attributes_from_object (
206
- types .SimpleNamespace (** {
207
- ** request .__dict__ ,
207
+ types .SimpleNamespace (
208
208
** {
209
- name .decode ('latin1' ): value .decode ('latin1' )
210
- for name , value in request .scope .get ('headers' , [])
211
- },
212
- }),
209
+ ** request .__dict__ ,
210
+ ** {
211
+ name .decode ("latin1" ): value .decode ("latin1" )
212
+ for name , value in request .scope .get (
213
+ "headers" , []
214
+ )
215
+ },
216
+ }
217
+ ),
213
218
self ._traced_request_attrs ,
214
219
attributes ,
215
220
)
@@ -263,9 +268,9 @@ def process_response(self, request, response):
263
268
if self ._excluded_urls .url_disabled (request .build_absolute_uri ("?" )):
264
269
return response
265
270
266
- is_asgi_request = self . _is_asgi_request (request )
271
+ is_asgi_request = _is_asgi_request (request )
267
272
if is_asgi_request and not _is_asgi_supported :
268
- return
273
+ return response
269
274
270
275
activation = request .META .pop (self ._environ_activation_key , None )
271
276
span = request .META .pop (self ._environ_span_key , None )
@@ -276,7 +281,9 @@ def process_response(self, request, response):
276
281
else :
277
282
add_response_attributes (
278
283
span ,
279
- "{} {}" .format (response .status_code , response .reason_phrase ),
284
+ "{} {}" .format (
285
+ response .status_code , response .reason_phrase
286
+ ),
280
287
response ,
281
288
)
282
289
0 commit comments