Skip to content

Commit

Permalink
Merge pull request #12 from DataDog/darcy.rayner/make-trace-headers-c…
Browse files Browse the repository at this point in the history
…ase-insensitive

Make trace headers case insensitive
  • Loading branch information
DarcyRaynerDD committed Jul 23, 2019
2 parents e47b06f + d13774b commit 0c2a9c4
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 7 deletions.
23 changes: 21 additions & 2 deletions src/trace/context.spec.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
import { LogLevel, setLogLevel } from "../utils";
import { SampleMode } from "./constants";
import {
convertToAPMParentID, convertToAPMTraceID, convertToSampleMode, convertTraceContext,
extractTraceContext, readTraceContextFromXray, readTraceFromEvent
convertToAPMParentID,
convertToAPMTraceID,
convertToSampleMode,
convertTraceContext,
extractTraceContext,
readTraceContextFromXray,
readTraceFromEvent,
} from "./context";

let currentSegment: any;
Expand Down Expand Up @@ -164,6 +169,20 @@ describe("readTraceFromEvent", () => {
traceID: "4110911582297405557",
});
});
it("can read well formed headers with mixed casing", () => {
const result = readTraceFromEvent({
headers: {
"X-Datadog-Parent-Id": "797643193680388254",
"X-Datadog-Sampling-Priority": "2",
"X-Datadog-Trace-Id": "4110911582297405557",
},
});
expect(result).toEqual({
parentID: "797643193680388254",
sampleMode: SampleMode.USER_KEEP,
traceID: "4110911582297405557",
});
});
it("returns undefined when missing trace id", () => {
const result = readTraceFromEvent({
headers: {
Expand Down
22 changes: 17 additions & 5 deletions src/trace/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,13 @@ import { BigNumber } from "bignumber.js";

import { logError } from "../utils";
import {
parentIDHeader, SampleMode, samplingPriorityHeader, traceIDHeader, xraySubsegmentKey,
xraySubsegmentName, xraySubsegmentNamespace
parentIDHeader,
SampleMode,
samplingPriorityHeader,
traceIDHeader,
xraySubsegmentKey,
xraySubsegmentName,
xraySubsegmentNamespace,
} from "./constants";

export interface XRayTraceHeader {
Expand Down Expand Up @@ -58,15 +63,22 @@ export function readTraceFromEvent(event: any): TraceContext | undefined {
if (typeof headers !== "object") {
return;
}
const traceID = headers[traceIDHeader];

const lowerCaseHeaders: { [key: string]: string } = {};

for (const key of Object.keys(headers)) {
lowerCaseHeaders[key.toLocaleLowerCase()] = headers[key];
}

const traceID = lowerCaseHeaders[traceIDHeader];
if (typeof traceID !== "string") {
return;
}
const parentID = headers[parentIDHeader];
const parentID = lowerCaseHeaders[parentIDHeader];
if (typeof parentID !== "string") {
return;
}
const sampledHeader = headers[samplingPriorityHeader];
const sampledHeader = lowerCaseHeaders[samplingPriorityHeader];
if (typeof sampledHeader !== "string") {
return;
}
Expand Down

0 comments on commit 0c2a9c4

Please sign in to comment.