Skip to content

Commit 261c190

Browse files
bigkraigmaxday
andauthored
feat: support reading trace context from AppSync event (#229)
* feat: support reading trace context from appsync event * update isAppSyncResolverEvent to a more selective check on info.selectionSetGraphQL * lint Co-authored-by: Maxime David <[email protected]>
1 parent b23aa64 commit 261c190

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed

src/trace/context.spec.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,26 @@ describe("readTraceFromEvent", () => {
200200
source: Source.Event,
201201
});
202202
});
203+
it("can read from appsync source", () => {
204+
const result = readTraceFromEvent({
205+
info: {
206+
selectionSetGraphQL: "{ items }",
207+
},
208+
request: {
209+
headers: {
210+
"x-datadog-parent-id": "797643193680388254",
211+
"x-datadog-sampling-priority": "2",
212+
"x-datadog-trace-id": "4110911582297405557",
213+
},
214+
},
215+
});
216+
expect(result).toEqual({
217+
parentID: "797643193680388254",
218+
sampleMode: SampleMode.USER_KEEP,
219+
traceID: "4110911582297405557",
220+
source: Source.Event,
221+
});
222+
});
203223
it("can read from sqs source", () => {
204224
const result = readTraceFromEvent({
205225
Records: [

src/trace/context.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { BigNumber } from "bignumber.js";
33
import { randomBytes } from "crypto";
44
import { createSocket, Socket } from "dgram";
55
import { logDebug, logError } from "../utils";
6-
import { isSQSEvent } from "../utils/event-type-guards";
6+
import { isAppSyncResolverEvent, isSQSEvent } from "../utils/event-type-guards";
77
import {
88
awsXrayDaemonAddressEnvVar,
99
parentIDHeader,
@@ -183,6 +183,11 @@ export function sendXraySubsegment(segment: string) {
183183
}
184184
}
185185

186+
export function readTraceFromAppSyncEvent(event: any): TraceContext | undefined {
187+
event.headers = event.request.headers;
188+
return readTraceFromHTTPEvent(event);
189+
}
190+
186191
export function readTraceFromSQSEvent(event: SQSEvent): TraceContext | undefined {
187192
if (
188193
event.Records[0].messageAttributes &&
@@ -322,6 +327,10 @@ export function readTraceFromEvent(event: any): TraceContext | undefined {
322327
return readTraceFromHTTPEvent(event);
323328
}
324329

330+
if (isAppSyncResolverEvent(event)) {
331+
return readTraceFromAppSyncEvent(event);
332+
}
333+
325334
if (isSQSEvent(event)) {
326335
return readTraceFromSQSEvent(event);
327336
}

src/utils/event-type-guards.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {
22
APIGatewayEvent,
33
APIGatewayProxyEventV2,
4+
AppSyncResolverEvent,
45
ALBEvent,
56
CloudWatchLogsEvent,
67
ScheduledEvent,
@@ -58,3 +59,7 @@ export function isSNSEvent(event: any): event is SNSEvent {
5859
export function isSQSEvent(event: any): event is SQSEvent {
5960
return Array.isArray(event.Records) && event.Records.length > 0 && event.Records[0].eventSource === "aws:sqs";
6061
}
62+
63+
export function isAppSyncResolverEvent(event: any): event is AppSyncResolverEvent<any> {
64+
return event.info !== undefined && event.info.selectionSetGraphQL !== undefined;
65+
}

0 commit comments

Comments
 (0)