Skip to content

Commit bd0bec5

Browse files
Merge pull request #7 from DataDog/darcy.rayner/case-insensitive-trace-headers
Guarantee trace headers will always be treated with case insensitivity
2 parents 8ec364e + c53ee34 commit bd0bec5

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

datadog_lambda/tracing.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,11 @@ def extract_dd_trace_context(event):
2727
"""
2828
global dd_trace_context
2929
headers = event.get('headers', {})
30-
trace_id = headers.get(TraceHeader.TRACE_ID)
31-
parent_id = headers.get(TraceHeader.PARENT_ID)
32-
sampling_priority = headers.get(TraceHeader.SAMPLING_PRIORITY)
30+
lowercase_headers = {k.lower(): v for k, v in headers.items()}
31+
32+
trace_id = lowercase_headers.get(TraceHeader.TRACE_ID)
33+
parent_id = lowercase_headers.get(TraceHeader.PARENT_ID)
34+
sampling_priority = lowercase_headers.get(TraceHeader.SAMPLING_PRIORITY)
3335
if trace_id and parent_id and sampling_priority:
3436
dd_trace_context = {
3537
'trace-id': trace_id,

tests/test_tracing.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,23 @@ def test_with_complete_datadog_trace_headers(self):
8888
XraySubsegment.NAMESPACE
8989
)
9090

91+
def test_with_complete_datadog_trace_headers_with_mixed_casing(self):
92+
extract_dd_trace_context({
93+
'headers': {
94+
'X-Datadog-Trace-Id': '123',
95+
'X-Datadog-Parent-Id': '321',
96+
'X-Datadog-Sampling-Priority': '1',
97+
}
98+
})
99+
self.assertDictEqual(
100+
get_dd_trace_context(),
101+
{
102+
TraceHeader.TRACE_ID: '123',
103+
TraceHeader.PARENT_ID: '65535',
104+
TraceHeader.SAMPLING_PRIORITY: '1',
105+
}
106+
)
107+
91108

92109
class TestXRayContextConversion(unittest.TestCase):
93110

0 commit comments

Comments
 (0)