Skip to content

Commit a45866f

Browse files
committed
fix: require eventbridge envelope for sqs extraction
1 parent 9dcc6ec commit a45866f

2 files changed

Lines changed: 45 additions & 1 deletion

File tree

datadog_lambda/tracing.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,8 +402,15 @@ def _extract_context_from_eventbridge_sqs_event(event):
402402
first_record = records[0]
403403
body_str = first_record.get("body")
404404
body = json.loads(body_str)
405+
if not isinstance(body, dict):
406+
return None, False
407+
405408
detail = body.get("detail")
406-
if not isinstance(detail, dict):
409+
if not (
410+
isinstance(detail, dict)
411+
and body.get("detail-type")
412+
and body.get("source")
413+
):
407414
return None, False
408415

409416
dd_context = detail.get("_datadog")

tests/test_tracing.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2815,6 +2815,43 @@ def test_sqs_no_datadog_message_attribute(self):
28152815
# None indicates no DSM context propagation
28162816
self.assertEqual(carrier_get("dd-pathway-ctx-base64"), None)
28172817

2818+
@patch("datadog_lambda.tracing.extract_context_from_lambda_context")
2819+
def test_sqs_detail_body_still_uses_message_attributes(self, mock_extract_context):
2820+
dd_data = {
2821+
"x-datadog-trace-id": "12345",
2822+
"x-datadog-parent-id": "67890",
2823+
"x-datadog-sampling-priority": "1",
2824+
"dd-pathway-ctx-base64": "attr-ctx",
2825+
}
2826+
dd_json_data = json.dumps(dd_data)
2827+
2828+
event = {
2829+
"Records": [
2830+
{
2831+
"eventSourceARN": "arn:aws:sqs:us-east-1:123456789012:test-queue",
2832+
"messageAttributes": {
2833+
"_datadog": {"dataType": "String", "stringValue": dd_json_data}
2834+
},
2835+
"eventSource": "aws:sqs",
2836+
"body": json.dumps({"detail": {"application": "payload"}}),
2837+
}
2838+
]
2839+
}
2840+
2841+
context = extract_context_from_sqs_or_sns_event_or_context(
2842+
event, self.lambda_context, parse_event_source(event)
2843+
)
2844+
2845+
mock_extract_context.assert_not_called()
2846+
self.assertEqual(context.trace_id, 12345)
2847+
self.assertEqual(context.span_id, 67890)
2848+
self.assertEqual(context.sampling_priority, 1)
2849+
self.assertEqual(self.mock_checkpoint.call_count, 1)
2850+
args, _ = self.mock_checkpoint.call_args
2851+
self.assertEqual(args[0], "sqs")
2852+
self.assertEqual(args[1], "arn:aws:sqs:us-east-1:123456789012:test-queue")
2853+
self.assertEqual(args[2]("dd-pathway-ctx-base64"), "attr-ctx")
2854+
28182855
def test_sqs_empty_datadog_message_attribute(self):
28192856
event = {
28202857
"Records": [

0 commit comments

Comments
 (0)