Skip to content

Commit ded926b

Browse files
Merge pull request #10 from DataDog/darcy.rayner/case-insenstive-trace-headers
Support mixed case trace headers
2 parents e79ac13 + f16a8af commit ded926b

File tree

3 files changed

+33
-3
lines changed

3 files changed

+33
-3
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"my-custom-event": {
3+
"hello": 100
4+
},
5+
"fake-id": "12345678910",
6+
"headers": {
7+
"X-Datadog-Trace-Id": "1231452342",
8+
"X-Datadog-Parent-Id": "45678910",
9+
"X-Datadog-Sampling-Priority": "2"
10+
}
11+
}

internal/trace/context.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,17 +120,22 @@ func unmarshalEventForTraceContext(ev json.RawMessage) (map[string]string, bool)
120120
return traceContext, false
121121
}
122122

123-
traceID, ok := eh.Headers[traceIDHeader]
123+
lowercaseHeaders := map[string]string{}
124+
for k, v := range eh.Headers {
125+
lowercaseHeaders[strings.ToLower(k)] = v
126+
}
127+
128+
traceID, ok := lowercaseHeaders[traceIDHeader]
124129
if !ok {
125130
return traceContext, false
126131
}
127132

128-
parentID, ok := eh.Headers[parentIDHeader]
133+
parentID, ok := lowercaseHeaders[parentIDHeader]
129134
if !ok {
130135
return traceContext, false
131136
}
132137

133-
samplingPriority, ok := eh.Headers[samplingPriorityHeader]
138+
samplingPriority, ok := lowercaseHeaders[samplingPriorityHeader]
134139
if !ok {
135140
return traceContext, false
136141
}

internal/trace/context_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,20 @@ func TestUnmarshalEventForTraceMetadataNonProxyEvent(t *testing.T) {
6161
assert.Equal(t, expected, headers)
6262
}
6363

64+
func TestUnmarshalEventForTraceMetadataWithMixedCaseHeaders(t *testing.T) {
65+
ev := loadRawJSON(t, "../testdata/non-proxy-mixed-case-metadata.json")
66+
67+
headers, ok := unmarshalEventForTraceContext(*ev)
68+
assert.True(t, ok)
69+
70+
expected := map[string]string{
71+
traceIDHeader: "1231452342",
72+
parentIDHeader: "45678910",
73+
samplingPriorityHeader: "2",
74+
}
75+
assert.Equal(t, expected, headers)
76+
}
77+
6478
func TestUnmarshalEventForInvalidData(t *testing.T) {
6579
ev := loadRawJSON(t, "../testdata/invalid.json")
6680

0 commit comments

Comments
 (0)