Skip to content

Commit 50db685

Browse files
feat(flask): store request headers (#1735)
* called store_request_headers() * added test case for request header tracing * added request header storage to pull request template * added release note * added custom headers to request header test
1 parent ff9939c commit 50db685

File tree

4 files changed

+23
-0
lines changed

4 files changed

+23
-0
lines changed

.github/PULL_REQUEST_TEMPLATE/integration.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,4 @@ This PR adds support for [`<integration>`](<!--link to relevant integration docs
2727
- [ ] 500-level responses are tagged as errors
2828
- [ ] Async (if applicable)
2929
- [ ] Span parenting behaves as expected.
30+
- [ ] Request headers specified in the config are stored

ddtrace/contrib/flask/middleware.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from ...internal.logger import get_logger
44
from ...propagation.http import HTTPPropagator
55
from ...utils.deprecation import deprecated
6+
from ddtrace.http import store_request_headers
7+
from ddtrace import config
68

79
import flask.templating
810
from flask import g, request, signals
@@ -155,6 +157,7 @@ def _finish_span(self, span, exception=None):
155157
endpoint = ''
156158
url = ''
157159
if request:
160+
store_request_headers(request.headers, span, config.flask)
158161
method = request.method
159162
endpoint = request.endpoint or code
160163
url = request.base_url or ''
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
features:
3+
- |
4+
Store request headers in Flask integration.

tests/contrib/flask/test_middleware.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from ddtrace.contrib.flask import TraceMiddleware
88
from ddtrace.constants import SAMPLING_PRIORITY_KEY
99
from ddtrace.ext import http, errors
10+
from ddtrace import config
1011

1112
from tests.opentracer.utils import init_tracer
1213
from .web import create_app
@@ -385,3 +386,17 @@ def test_success_200_ot(self):
385386
assert dd_span.error == 0
386387
assert_span_http_status_code(dd_span, 200)
387388
assert dd_span.meta.get(http.METHOD) == 'GET'
389+
390+
def test_http_request_header_tracing(self):
391+
config.flask.http.trace_headers(['Host', 'my-header'])
392+
self.app.get('/', headers={
393+
'my-header': 'my_value',
394+
})
395+
traces = self.tracer.writer.pop_traces()
396+
397+
assert len(traces) == 1
398+
assert len(traces[0]) == 1
399+
span = traces[0][0]
400+
401+
assert span.get_tag('http.request.headers.my-header') == 'my_value'
402+
assert span.get_tag('http.request.headers.host') == 'localhost'

0 commit comments

Comments
 (0)