77import wrapt
88
99from ...log import logger
10- from ...tracer import internal_tracer
10+ from ...tracer import internal_tracer as tracer
1111
1212DJ_INSTANA_MIDDLEWARE = 'instana.instrumentation.django.middleware.InstanaMiddleware'
1313
@@ -26,44 +26,48 @@ def __init__(self, get_response=None):
2626 def process_request (self , request ):
2727 try :
2828 env = request .environ
29+ ctx = None
2930 if 'HTTP_X_INSTANA_T' in env and 'HTTP_X_INSTANA_S' in env :
30- ctx = internal_tracer .extract (ot .Format .HTTP_HEADERS , env )
31- span = internal_tracer .start_span ("django" , child_of = ctx )
32- else :
33- span = internal_tracer .start_span ("django" )
31+ ctx = tracer .extract (ot .Format .HTTP_HEADERS , env )
32+
33+ self .scope = tracer .start_active_span ('django' , child_of = ctx )
3434
35- span .set_tag (ext .HTTP_URL , env ['PATH_INFO' ])
36- span .set_tag ("http.params" , env ['QUERY_STRING' ])
37- span .set_tag (ext .HTTP_METHOD , request .method )
38- span .set_tag ("http.host" , env ['HTTP_HOST' ])
39- self .span = span
35+ self .scope .span .set_tag (ext .HTTP_METHOD , request .method )
36+ if 'PATH_INFO' in env :
37+ self .scope .span .set_tag (ext .HTTP_URL , env ['PATH_INFO' ])
38+ if 'QUERY_STRING' in env :
39+ self .scope .span .set_tag ("http.params" , env ['QUERY_STRING' ])
40+ if 'HTTP_HOST' in env :
41+ self .scope .span .set_tag ("http.host" , env ['HTTP_HOST' ])
4042 except Exception as e :
4143 logger .debug ("Instana middleware @ process_response: " , e )
4244
4345 def process_response (self , request , response ):
4446 try :
45- if self .span :
47+ if self .scope is not None :
4648 if 500 <= response .status_code <= 511 :
47- self .span .set_tag ("error" , True )
48- ec = self .span .tags .get ('ec' , 0 )
49+ self .scope . span .set_tag ("error" , True )
50+ ec = self .scope . span .tags .get ('ec' , 0 )
4951 if ec is 0 :
50- self .span .set_tag ("ec" , ec + 1 )
52+ self .scope . span .set_tag ("ec" , ec + 1 )
5153
52- self .span .set_tag (ext .HTTP_STATUS_CODE , response .status_code )
53- internal_tracer .inject (self .span .context , ot .Format .HTTP_HEADERS , response )
54- self .span .finish ()
55- self .span = None
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 )
5656 except Exception as e :
5757 logger .debug ("Instana middleware @ process_response: " , e )
5858 finally :
59+ self .scope .close ()
60+ self .scope = None
5961 return response
6062
6163 def process_exception (self , request , exception ):
62- if self .span :
63- self .span .log_kv ({'message' : exception })
64- self .span .set_tag ("error" , True )
65- ec = self .span .tags .get ('ec' , 0 )
66- self .span .set_tag ("ec" , ec + 1 )
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 ()
6771
6872
6973def load_middleware_wrapper (wrapped , instance , args , kwargs ):
@@ -77,7 +81,7 @@ def load_middleware_wrapper(wrapped, instance, args, kwargs):
7781 return wrapped (* args , ** kwargs )
7882
7983 # Save the list of middleware for Snapshot reporting
80- internal_tracer .sensor .meter .djmw = settings .MIDDLEWARE
84+ tracer .sensor .meter .djmw = settings .MIDDLEWARE
8185
8286 if type (settings .MIDDLEWARE ) is tuple :
8387 settings .MIDDLEWARE = (DJ_INSTANA_MIDDLEWARE ,) + settings .MIDDLEWARE
@@ -91,7 +95,7 @@ def load_middleware_wrapper(wrapped, instance, args, kwargs):
9195 return wrapped (* args , ** kwargs )
9296
9397 # Save the list of middleware for Snapshot reporting
94- internal_tracer .sensor .meter .djmw = settings .MIDDLEWARE_CLASSES
98+ tracer .sensor .meter .djmw = settings .MIDDLEWARE_CLASSES
9599
96100 if type (settings .MIDDLEWARE_CLASSES ) is tuple :
97101 settings .MIDDLEWARE_CLASSES = (DJ_INSTANA_MIDDLEWARE ,) + settings .MIDDLEWARE_CLASSES
@@ -107,8 +111,9 @@ def load_middleware_wrapper(wrapped, instance, args, kwargs):
107111 except Exception as e :
108112 logger .warn ("Instana: Couldn't add InstanaMiddleware to Django: " , e )
109113
114+
110115try :
111116 if 'django' in sys .modules :
112117 wrapt .wrap_function_wrapper ('django.core.handlers.base' , 'BaseHandler.load_middleware' , load_middleware_wrapper )
113- except :
118+ except Exception :
114119 pass
0 commit comments