Skip to content

Commit fe59513

Browse files
authored
Store scope on the request object (#95)
1 parent ac800f0 commit fe59513

File tree

1 file changed

+23
-20
lines changed

1 file changed

+23
-20
lines changed

instana/instrumentation/django/middleware.py

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -27,47 +27,49 @@ def process_request(self, request):
2727
try:
2828
env = request.environ
2929
ctx = None
30+
3031
if 'HTTP_X_INSTANA_T' in env and 'HTTP_X_INSTANA_S' in env:
3132
ctx = tracer.extract(ot.Format.HTTP_HEADERS, env)
3233

33-
self.scope = tracer.start_active_span('django', child_of=ctx)
34+
request.iscope = tracer.start_active_span('django', child_of=ctx)
3435

35-
self.scope.span.set_tag(ext.HTTP_METHOD, request.method)
36+
request.iscope.span.set_tag(ext.HTTP_METHOD, request.method)
3637
if 'PATH_INFO' in env:
37-
self.scope.span.set_tag(ext.HTTP_URL, env['PATH_INFO'])
38+
request.iscope.span.set_tag(ext.HTTP_URL, env['PATH_INFO'])
3839
if 'QUERY_STRING' in env:
39-
self.scope.span.set_tag("http.params", env['QUERY_STRING'])
40+
request.iscope.span.set_tag("http.params", env['QUERY_STRING'])
4041
if 'HTTP_HOST' in env:
41-
self.scope.span.set_tag("http.host", env['HTTP_HOST'])
42+
request.iscope.span.set_tag("http.host", env['HTTP_HOST'])
4243
except Exception:
4344
logger.debug("Django middleware @ process_response", exc_info=True)
4445

4546
def process_response(self, request, response):
4647
try:
47-
if self.scope is not None:
48+
if request.iscope is not None:
4849
if 500 <= response.status_code <= 511:
49-
self.scope.span.set_tag("error", True)
50-
ec = self.scope.span.tags.get('ec', 0)
50+
request.iscope.span.set_tag("error", True)
51+
ec = request.iscope.span.tags.get('ec', 0)
5152
if ec is 0:
52-
self.scope.span.set_tag("ec", ec+1)
53+
request.iscope.span.set_tag("ec", ec+1)
5354

54-
self.scope.span.set_tag(ext.HTTP_STATUS_CODE, response.status_code)
55-
tracer.inject(self.scope.span.context, ot.Format.HTTP_HEADERS, response)
55+
request.iscope.span.set_tag(ext.HTTP_STATUS_CODE, response.status_code)
56+
tracer.inject(request.iscope.span.context, ot.Format.HTTP_HEADERS, response)
5657
except Exception as e:
5758
logger.debug("Instana middleware @ process_response: ", e)
5859
finally:
59-
self.scope.close()
60-
self.scope = None
60+
request.iscope.close()
61+
request.iscope = None
6162
return response
6263

6364
def process_exception(self, request, exception):
64-
if self.scope is not None:
65-
self.scope.span.set_tag(ext.HTTP_STATUS_CODE, 500)
66-
self.scope.span.set_tag('http.error', str(exception))
67-
self.scope.span.set_tag("error", True)
68-
ec = self.scope.span.tags.get('ec', 0)
69-
self.scope.span.set_tag("ec", ec+1)
70-
self.scope.close()
65+
if request.iscope is not None:
66+
request.iscope.span.set_tag(ext.HTTP_STATUS_CODE, 500)
67+
request.iscope.span.set_tag('http.error', str(exception))
68+
request.iscope.span.set_tag("error", True)
69+
ec = request.iscope.span.tags.get('ec', 0)
70+
request.iscope.span.set_tag("ec", ec+1)
71+
request.iscope.close()
72+
request.iscope = None
7173

7274

7375
def load_middleware_wrapper(wrapped, instance, args, kwargs):
@@ -114,6 +116,7 @@ def load_middleware_wrapper(wrapped, instance, args, kwargs):
114116

115117
try:
116118
if 'django' in sys.modules:
119+
logger.debug("Instrumenting django")
117120
wrapt.wrap_function_wrapper('django.core.handlers.base', 'BaseHandler.load_middleware', load_middleware_wrapper)
118121
except Exception:
119122
pass

0 commit comments

Comments
 (0)