From a64c95b630760e0641f87586b3e7069b5e3cc8b5 Mon Sep 17 00:00:00 2001 From: Benjamin Fernandes Date: Tue, 4 Jul 2017 14:33:14 +0200 Subject: [PATCH 1/2] Fix a minor typo in debug log message --- ddtrace/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ddtrace/api.py b/ddtrace/api.py index 57c27cdb8c0..f5b2a795c99 100644 --- a/ddtrace/api.py +++ b/ddtrace/api.py @@ -53,7 +53,7 @@ def send_traces(self, traces): self._downgrade() return self.send_traces(traces) - log.debug("reported %d spans in %.5fs", len(traces), time.time() - start) + log.debug("reported %d traces in %.5fs", len(traces), time.time() - start) return response def send_services(self, services): From 0e89addcd685ef00ceba0793315ae13b49ab4aab Mon Sep 17 00:00:00 2001 From: Benjamin Fernandes Date: Tue, 4 Jul 2017 14:37:30 +0200 Subject: [PATCH 2/2] Attach stack trace to Flask errors --- ddtrace/contrib/flask/middleware.py | 9 ++++++++- tests/contrib/flask/test_flask.py | 5 +++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/ddtrace/contrib/flask/middleware.py b/ddtrace/contrib/flask/middleware.py index 32d4d895c80..52584ca3d46 100644 --- a/ddtrace/contrib/flask/middleware.py +++ b/ddtrace/contrib/flask/middleware.py @@ -116,10 +116,17 @@ def _finish_span(self, response=None, exception=None): # if we didn't get a response, but we did get an exception, set # codes accordingly. if not response and exception: - error = 1 code = 500 + # The 3 next lines might not be strictly required, since `set_traceback` + # also get the exception from the sys.exc_info (and fill the error meta). + # Since we aren't sure it always work/for insuring no BC break, keep + # these lines which get overridden anyway. + error = 1 span.set_tag(errors.ERROR_TYPE, type(exception)) span.set_tag(errors.ERROR_MSG, exception) + # The provided `exception` object doesn't have a stack trace attached, + # so attach the stack trace with `set_traceback`. + span.set_traceback() # the endpoint that matched the request is None if an exception # happened so we fallback to a common resource diff --git a/tests/contrib/flask/test_flask.py b/tests/contrib/flask/test_flask.py index 451d2f061af..dbca1ec0353 100644 --- a/tests/contrib/flask/test_flask.py +++ b/tests/contrib/flask/test_flask.py @@ -3,6 +3,7 @@ import time import logging import os +import re # 3p from flask import Flask, render_template @@ -260,8 +261,8 @@ def test_fatal(self): eq_(s.meta.get(http.STATUS_CODE), '500') eq_(s.meta.get(http.METHOD), 'GET') assert "ZeroDivisionError" in s.meta.get(errors.ERROR_TYPE) - msg = s.meta.get(errors.ERROR_MSG) - assert "by zero" in msg, msg + assert "by zero" in s.meta.get(errors.ERROR_MSG) + assert re.search('File ".*/contrib/flask/test_flask.py", line [0-9]+, in fatal', s.meta.get(errors.ERROR_STACK)) def test_unicode(self): start = time.time()