Skip to content

Commit 93d4a07

Browse files
APMSVLS-65 Extract Trace Context For AppSync Events (#657)
APMSVLS-65 first draft of extractor helper function and inclusion in extract_dd_trace_context Second draft of implementation for extracting trace context from event['request']['headers'] Merge branch 'main' into rithika.narayan/APMSVLS-65/extract-context-from-appsync Removing unnecessary allocations from header extraction Added unit tests for extracting context from event['request']['headers'] Refactoring change to use extract_context_from_http_event_or_context Removing extra testing file linting Merge branch 'main' into rithika.narayan/APMSVLS-65/extract-context-from-appsync Cleaned up repeated get calls Checking for request header field without raising exception Removing extraneous file Refactored code, added more unit tests More comprehensive unit testing for coverage Removing imported files Removing more unnecessary files WIP testing whether decode_authorizer_context is set Cleanup More cleanup Testing refactoring for size Removed comments removing changes in tracer Restoring implementation Bump zipped layer size Integer layer size Merge branch 'main' into rithika.narayan/APMSVLS-65/extract-context-from-appsync Fixing layer size calculation Adding unit test for using extract_context_from_lambda_context linting Merge branch 'main' into rithika.narayan/APMSVLS-65/extract-context-from-appsync
1 parent 09143fe commit 93d4a07

23 files changed

+2998
-21
lines changed

datadog_lambda/tracing.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,20 @@ def extract_context_from_http_event_or_context(
209209
return context
210210

211211

212+
def extract_context_from_request_header_or_context(event, lambda_context, event_source):
213+
request = event.get("request")
214+
if isinstance(request, (set, dict)) and "headers" in request:
215+
context = extract_context_from_http_event_or_context(
216+
request,
217+
lambda_context,
218+
event_source,
219+
decode_authorizer_context=False,
220+
)
221+
else:
222+
context = extract_context_from_lambda_context(lambda_context)
223+
return context
224+
225+
212226
def create_sns_event(message):
213227
return {
214228
"Records": [
@@ -627,6 +641,10 @@ def extract_dd_trace_context(
627641

628642
if extractor is not None:
629643
context = extract_context_custom_extractor(extractor, event, lambda_context)
644+
elif isinstance(event, (set, dict)) and "request" in event:
645+
context = extract_context_from_request_header_or_context(
646+
event, lambda_context, event_source
647+
)
630648
elif isinstance(event, (set, dict)) and "headers" in event:
631649
context = extract_context_from_http_event_or_context(
632650
event, lambda_context, event_source, decode_authorizer_context
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"identity": "None",
3+
"info": {
4+
"fieldName": "getItems",
5+
"parentTypeName": "Query",
6+
"selectionSetGraphQL": "{\n id\n}",
7+
"selectionSetList":["id"]
8+
},
9+
"prev": "None",
10+
"request": {
11+
"domainName": "None"
12+
},
13+
"source": "None"
14+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"identity": "None",
3+
"info": {
4+
"fieldName": "getItems",
5+
"parentTypeName": "Query",
6+
"selectionSetGraphQL": "{\n id\n}",
7+
"selectionSetList":["id"]
8+
},
9+
"prev": "None",
10+
"request": "hello",
11+
"source": "None"
12+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
{
2+
"identity": "None",
3+
"info": {
4+
"fieldName": "getItems",
5+
"parentTypeName": "Query",
6+
"selectionSetGraphQL": "{\n id\n}",
7+
"selectionSetList":["id"]
8+
},
9+
"prev": "None",
10+
"request": {
11+
"domainName": "None",
12+
"headers": {
13+
"accept": "*/*",
14+
"accept-encoding": "gzip, deflate, br, zstd",
15+
"accept-language": "en-US,en;q=0.9",
16+
"cloudfront-forwarded-proto": "https",
17+
"cloudfront-is-desktop-viewer": "True",
18+
"cloudfront-is-mobile-viewer": "False",
19+
"cloudfront-is-smarttv-viewer":"False",
20+
"cloudfront-is-tablet-viewer":" False",
21+
"cloudfront-viewer-asn": "6461",
22+
"cloudfront-viewer-country": "US",
23+
"content-length": "47",
24+
"content-type": "application/graphql",
25+
"host": "4aowrg2uhvbw5mn7osu6searqi.appsync-api.us-east-1.amazonaws.com",
26+
"origin": "http://localhost:5173",
27+
"priority": "u=1, i",
28+
"referer": "http://localhost:5173/",
29+
"sec-ch-ua": "\"Chromium\";v=\"140\", \"Not=A?Brand\";v=\"24\", \"Google Chrome\";v=\"140\"",
30+
"sec-ch-ua-mobile": "?0",
31+
"sec-ch-ua-platform": "macOS",
32+
"sec-fetch-dest": "empty",
33+
"sec-fetch-mode": "cors",
34+
"sec-fetch-site": "cross-site",
35+
"traceparent": "00-0000000000000000d9f454c80b9a529a-73ac6ca3427073a3-01",
36+
"tracestate": "dd=s:1;o:rum",
37+
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36","via":"2.0 62f9f3967e93a923f21c8acb20cf10b6.cloudfront.net (CloudFront)",
38+
"x-amz-cf-id": "Femhicb_Vbva-J8qWjdI4hKMmqusCeQSp207UGyY3u8VOUrdE8BBvg==",
39+
"x-amzn-appsync-is-vpce-request": "False",
40+
"x-amzn-remote-ip": "64.124.12.19",
41+
"x-amzn-requestid": "1ee1669a-eda3-4d4f-911c-35f74ebef31d",
42+
"x-amzn-trace-id": "Root=1-68cdb7e9-438bf88259d7ce3535723bdd",
43+
"x-datadog-origin": "rum",
44+
"x-datadog-parent-id": "67890",
45+
"x-datadog-sampling-priority": "1",
46+
"x-datadog-trace-id": "12345",
47+
"x-forwarded-for": "64.124.12.19,15.158.225.229",
48+
"x-forwarded-port": "443",
49+
"x-forwarded-proto": "https"
50+
}
51+
},
52+
"source": "None"
53+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
{
2+
"identity": "None",
3+
"info": {
4+
"fieldName": "getItems",
5+
"parentTypeName": "Query",
6+
"selectionSetGraphQL": "{\n id\n}",
7+
"selectionSetList":["id"]
8+
},
9+
"prev": "None",
10+
"request": {
11+
"domainName": "None",
12+
"headers": {
13+
"accept": "*/*",
14+
"accept-encoding": "gzip, deflate, br, zstd",
15+
"accept-language": "en-US,en;q=0.9",
16+
"cloudfront-forwarded-proto": "https",
17+
"cloudfront-is-desktop-viewer": "True",
18+
"cloudfront-is-mobile-viewer": "False",
19+
"cloudfront-is-smarttv-viewer":"False",
20+
"cloudfront-is-tablet-viewer":" False",
21+
"cloudfront-viewer-asn": "6461",
22+
"cloudfront-viewer-country": "US",
23+
"content-length": "47",
24+
"content-type": "application/graphql",
25+
"host": "4aowrg2uhvbw5mn7osu6searqi.appsync-api.us-east-1.amazonaws.com",
26+
"origin": "http://localhost:5173",
27+
"priority": "u=1, i",
28+
"referer": "http://localhost:5173/",
29+
"sec-ch-ua": "\"Chromium\";v=\"140\", \"Not=A?Brand\";v=\"24\", \"Google Chrome\";v=\"140\"",
30+
"sec-ch-ua-mobile": "?0",
31+
"sec-ch-ua-platform": "macOS",
32+
"sec-fetch-dest": "empty",
33+
"sec-fetch-mode": "cors",
34+
"sec-fetch-site": "cross-site",
35+
"traceparent": "00-0000000000000000d9f454c80b9a529a-73ac6ca3427073a3-01",
36+
"tracestate": "dd=s:1;o:rum",
37+
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36","via":"2.0 62f9f3967e93a923f21c8acb20cf10b6.cloudfront.net (CloudFront)",
38+
"x-amz-cf-id": "Femhicb_Vbva-J8qWjdI4hKMmqusCeQSp207UGyY3u8VOUrdE8BBvg==",
39+
"x-amzn-appsync-is-vpce-request": "False",
40+
"x-amzn-remote-ip": "64.124.12.19",
41+
"x-amzn-requestid": "1ee1669a-eda3-4d4f-911c-35f74ebef31d",
42+
"x-amzn-trace-id": "Root=1-68cdb7e9-438bf88259d7ce3535723bdd",
43+
"x-forwarded-for": "64.124.12.19,15.158.225.229",
44+
"x-forwarded-port": "443",
45+
"x-forwarded-proto": "https"
46+
}
47+
},
48+
"source": "None"
49+
}

0 commit comments

Comments
 (0)