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 .http import HttpRequest , HttpResponse
25
25
get_global_response_propagator ,
26
26
)
27
27
from opentelemetry .instrumentation .utils import extract_attributes_from_object
28
+ from opentelemetry .instrumentation .wsgi import add_response_attributes
28
29
from opentelemetry .instrumentation .wsgi import (
29
- add_response_attributes ,
30
30
collect_request_attributes as wsgi_collect_request_attributes ,
31
- wsgi_getter ,
32
31
)
32
+ from opentelemetry .instrumentation .wsgi import wsgi_getter
33
33
from opentelemetry .propagate import extract
34
34
from opentelemetry .semconv .trace import SpanAttributes
35
35
from opentelemetry .trace import Span , SpanKind , use_span
54
54
ASGIRequest = None
55
55
56
56
try :
57
+ from opentelemetry .instrumentation .asgi import asgi_getter
57
58
from opentelemetry .instrumentation .asgi import (
58
- asgi_getter ,
59
59
collect_request_attributes as asgi_collect_request_attributes ,
60
- set_status_code ,
61
60
)
61
+ from opentelemetry .instrumentation .asgi import set_status_code
62
62
63
63
_is_asgi_supported = True
64
64
except ImportError :
91
91
]
92
92
93
93
94
+ def _is_asgi_request (request ):
95
+ return ASGIRequest and isinstance (request , ASGIRequest )
96
+
97
+
94
98
class _DjangoMiddleware (MiddlewareMixin ):
95
99
"""Django Middleware for OpenTelemetry"""
96
100
@@ -132,9 +136,6 @@ def _get_span_name(request):
132
136
except Resolver404 :
133
137
return "HTTP {}" .format (request .method )
134
138
135
- def _is_asgi_request (self , request ):
136
- return ASGIRequest and isinstance (request , ASGIRequest )
137
-
138
139
def process_request (self , request ):
139
140
# request.META is a dictionary containing all available HTTP headers
140
141
# Read more about request.META here:
@@ -143,7 +144,7 @@ def process_request(self, request):
143
144
if self ._excluded_urls .url_disabled (request .build_absolute_uri ("?" )):
144
145
return
145
146
146
- is_asgi_request = self . _is_asgi_request (request )
147
+ is_asgi_request = _is_asgi_request (request )
147
148
if is_asgi_request and not _is_asgi_supported :
148
149
return
149
150
@@ -181,13 +182,17 @@ def process_request(self, request):
181
182
# contents, for the extract_attributes_from_object function to be able to retrieve
182
183
# attributes from it.
183
184
attributes = extract_attributes_from_object (
184
- types .SimpleNamespace (** {
185
- ** request .__dict__ ,
185
+ types .SimpleNamespace (
186
186
** {
187
- name .decode ('latin1' ): value .decode ('latin1' )
188
- for name , value in request .scope .get ('headers' , [])
189
- },
190
- }),
187
+ ** request .__dict__ ,
188
+ ** {
189
+ name .decode ("latin1" ): value .decode ("latin1" )
190
+ for name , value in request .scope .get (
191
+ "headers" , []
192
+ )
193
+ },
194
+ }
195
+ ),
191
196
self ._traced_request_attrs ,
192
197
attributes ,
193
198
)
@@ -241,9 +246,9 @@ def process_response(self, request, response):
241
246
if self ._excluded_urls .url_disabled (request .build_absolute_uri ("?" )):
242
247
return response
243
248
244
- is_asgi_request = self . _is_asgi_request (request )
249
+ is_asgi_request = _is_asgi_request (request )
245
250
if is_asgi_request and not _is_asgi_supported :
246
- return
251
+ return response
247
252
248
253
activation = request .META .pop (self ._environ_activation_key , None )
249
254
span = request .META .pop (self ._environ_span_key , None )
@@ -254,7 +259,9 @@ def process_response(self, request, response):
254
259
else :
255
260
add_response_attributes (
256
261
span ,
257
- "{} {}" .format (response .status_code , response .reason_phrase ),
262
+ "{} {}" .format (
263
+ response .status_code , response .reason_phrase
264
+ ),
258
265
response ,
259
266
)
260
267
0 commit comments