Skip to content

Commit 02ec844

Browse files
clutchskiEmanuele Palazzetti
authored andcommitted
flask: allow custom resource names (#410)
Fixes #353
1 parent c123ef3 commit 02ec844

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

ddtrace/contrib/flask/middleware.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
log = logging.getLogger(__name__)
2222

2323

24+
SPAN_NAME = 'flask.request'
25+
26+
2427
class TraceMiddleware(object):
2528

2629
def __init__(self, app, tracer, service="flask", use_signals=True, distributed_tracing=False):
@@ -112,7 +115,7 @@ def _start_span(self):
112115
self._tracer.context_provider.activate(context)
113116
try:
114117
g.flask_datadog_span = self._tracer.trace(
115-
"flask.request",
118+
SPAN_NAME,
116119
service=self._service,
117120
span_type=http.TYPE,
118121
)
@@ -161,8 +164,12 @@ def _finish_span(self, span, exception=None):
161164
endpoint = request.endpoint or code
162165
url = request.base_url or ''
163166

164-
resource = endpoint or code
165-
span.resource = compat.to_unicode(resource).lower()
167+
# Let users specify their own resource in middleware if they so desire.
168+
# See case https://github.com/DataDog/dd-trace-py/issues/353
169+
if span.resource == SPAN_NAME:
170+
resource = endpoint or code
171+
span.resource = compat.to_unicode(resource).lower()
172+
166173
span.set_tag(http.URL, compat.to_unicode(url))
167174
span.set_tag(http.STATUS_CODE, code)
168175
span.set_tag(http.METHOD, method)

tests/contrib/flask/test_flask.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,13 @@ def child():
7474
span.set_tag('a', 'b')
7575
return 'child'
7676

77+
@app.route("/custom_span")
78+
def custom_span():
79+
span = tracer.current_span()
80+
assert span
81+
span.resource = "overridden"
82+
return 'hiya'
83+
7784

7885
def unicode_view():
7986
return u'üŋïĉóđē'
@@ -395,3 +402,20 @@ def test_propagation(self):
395402
eq_(s.trace_id, 1234)
396403
eq_(s.parent_id, 4567)
397404
eq_(s.get_metric(SAMPLING_PRIORITY_KEY), 2)
405+
406+
def test_custom_span(self):
407+
rv = app.get('/custom_span')
408+
eq_(rv.status_code, 200)
409+
# ensure trace worked
410+
assert not tracer.current_span(), tracer.current_span().pprint()
411+
spans = writer.pop()
412+
eq_(len(spans), 1)
413+
s = spans[0]
414+
eq_(s.service, service)
415+
eq_(s.resource, "overridden")
416+
eq_(s.error, 0)
417+
eq_(s.meta.get(http.STATUS_CODE), '200')
418+
eq_(s.meta.get(http.METHOD), 'GET')
419+
420+
421+

0 commit comments

Comments
 (0)