From 4df2d86e829a460735c00268c185be4f11b098a9 Mon Sep 17 00:00:00 2001 From: Peter Giacomo Lombardo Date: Wed, 25 Apr 2018 16:00:05 +0200 Subject: [PATCH] Add safeties to Django calls --- instana/django.py | 53 +++++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/instana/django.py b/instana/django.py index 508edc83..fdc16156 100644 --- a/instana/django.py +++ b/instana/django.py @@ -22,32 +22,39 @@ def __init__(self, get_response=None): self def process_request(self, request): - env = request.environ - if 'HTTP_X_INSTANA_T' in env and 'HTTP_X_INSTANA_S' in env: - ctx = internal_tracer.extract(ot.Format.HTTP_HEADERS, env) - span = internal_tracer.start_span("django", child_of=ctx) - else: - span = internal_tracer.start_span("django") + try: + env = request.environ + if 'HTTP_X_INSTANA_T' in env and 'HTTP_X_INSTANA_S' in env: + ctx = internal_tracer.extract(ot.Format.HTTP_HEADERS, env) + span = internal_tracer.start_span("django", child_of=ctx) + else: + span = internal_tracer.start_span("django") - span.set_tag(ext.HTTP_URL, env['PATH_INFO']) - span.set_tag("http.params", env['QUERY_STRING']) - span.set_tag(ext.HTTP_METHOD, request.method) - span.set_tag("http.host", env['HTTP_HOST']) - self.span = span + span.set_tag(ext.HTTP_URL, env['PATH_INFO']) + span.set_tag("http.params", env['QUERY_STRING']) + span.set_tag(ext.HTTP_METHOD, request.method) + span.set_tag("http.host", env['HTTP_HOST']) + self.span = span + except as e: + logger.debug("Instana middleware @ process_response: ", e) def process_response(self, request, response): - if self.span: - if 500 <= response.status_code <= 511: - self.span.set_tag("error", True) - ec = self.span.tags.get('ec', 0) - if ec is 0: - self.span.set_tag("ec", ec+1) - - self.span.set_tag(ext.HTTP_STATUS_CODE, response.status_code) - internal_tracer.inject(self.span.context, ot.Format.HTTP_HEADERS, response) - self.span.finish() - self.span = None - return response + try: + if self.span: + if 500 <= response.status_code <= 511: + self.span.set_tag("error", True) + ec = self.span.tags.get('ec', 0) + if ec is 0: + self.span.set_tag("ec", ec+1) + + self.span.set_tag(ext.HTTP_STATUS_CODE, response.status_code) + internal_tracer.inject(self.span.context, ot.Format.HTTP_HEADERS, response) + self.span.finish() + self.span = None + except as e: + logger.debug("Instana middleware @ process_response: ", e) + finally: + return response def process_exception(self, request, exception): if self.span: