Skip to content

Commit 0c2a9c4

Browse files
Merge pull request #12 from DataDog/darcy.rayner/make-trace-headers-case-insensitive
Make trace headers case insensitive
2 parents e47b06f + d13774b commit 0c2a9c4

File tree

2 files changed

+38
-7
lines changed

2 files changed

+38
-7
lines changed

src/trace/context.spec.ts

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
import { LogLevel, setLogLevel } from "../utils";
22
import { SampleMode } from "./constants";
33
import {
4-
convertToAPMParentID, convertToAPMTraceID, convertToSampleMode, convertTraceContext,
5-
extractTraceContext, readTraceContextFromXray, readTraceFromEvent
4+
convertToAPMParentID,
5+
convertToAPMTraceID,
6+
convertToSampleMode,
7+
convertTraceContext,
8+
extractTraceContext,
9+
readTraceContextFromXray,
10+
readTraceFromEvent,
611
} from "./context";
712

813
let currentSegment: any;
@@ -164,6 +169,20 @@ describe("readTraceFromEvent", () => {
164169
traceID: "4110911582297405557",
165170
});
166171
});
172+
it("can read well formed headers with mixed casing", () => {
173+
const result = readTraceFromEvent({
174+
headers: {
175+
"X-Datadog-Parent-Id": "797643193680388254",
176+
"X-Datadog-Sampling-Priority": "2",
177+
"X-Datadog-Trace-Id": "4110911582297405557",
178+
},
179+
});
180+
expect(result).toEqual({
181+
parentID: "797643193680388254",
182+
sampleMode: SampleMode.USER_KEEP,
183+
traceID: "4110911582297405557",
184+
});
185+
});
167186
it("returns undefined when missing trace id", () => {
168187
const result = readTraceFromEvent({
169188
headers: {

src/trace/context.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,13 @@ import { BigNumber } from "bignumber.js";
33

44
import { logError } from "../utils";
55
import {
6-
parentIDHeader, SampleMode, samplingPriorityHeader, traceIDHeader, xraySubsegmentKey,
7-
xraySubsegmentName, xraySubsegmentNamespace
6+
parentIDHeader,
7+
SampleMode,
8+
samplingPriorityHeader,
9+
traceIDHeader,
10+
xraySubsegmentKey,
11+
xraySubsegmentName,
12+
xraySubsegmentNamespace,
813
} from "./constants";
914

1015
export interface XRayTraceHeader {
@@ -58,15 +63,22 @@ export function readTraceFromEvent(event: any): TraceContext | undefined {
5863
if (typeof headers !== "object") {
5964
return;
6065
}
61-
const traceID = headers[traceIDHeader];
66+
67+
const lowerCaseHeaders: { [key: string]: string } = {};
68+
69+
for (const key of Object.keys(headers)) {
70+
lowerCaseHeaders[key.toLocaleLowerCase()] = headers[key];
71+
}
72+
73+
const traceID = lowerCaseHeaders[traceIDHeader];
6274
if (typeof traceID !== "string") {
6375
return;
6476
}
65-
const parentID = headers[parentIDHeader];
77+
const parentID = lowerCaseHeaders[parentIDHeader];
6678
if (typeof parentID !== "string") {
6779
return;
6880
}
69-
const sampledHeader = headers[samplingPriorityHeader];
81+
const sampledHeader = lowerCaseHeaders[samplingPriorityHeader];
7082
if (typeof sampledHeader !== "string") {
7183
return;
7284
}

0 commit comments

Comments
 (0)