Skip to content

Commit e31c8f8

Browse files
committed
add sqs/sns support
1 parent e490610 commit e31c8f8

File tree

2 files changed

+24
-14
lines changed

2 files changed

+24
-14
lines changed

datadog_lambda/tracing.py

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,15 @@ def extract_context_from_sqs_or_sns_event_or_context(event, lambda_context):
272272

273273
if dd_json_data:
274274
dd_data = json.loads(dd_json_data)
275+
276+
if is_step_function_event(dd_data):
277+
try:
278+
return extract_context_from_step_functions(dd_data, None)
279+
except Exception:
280+
logger.debug(
281+
"Failed to extract Step Functions context from SQS/SNS event."
282+
)
283+
275284
return propagator.extract(dd_data)
276285
else:
277286
# Handle case where trace context is injected into attributes.AWSTraceHeader
@@ -314,9 +323,10 @@ def _extract_context_from_eventbridge_sqs_event(event):
314323
body = json.loads(body_str)
315324
detail = body.get("detail")
316325
dd_context = detail.get("_datadog")
326+
317327
if is_step_function_event(dd_context):
318328
try:
319-
return extract_context_from_step_functions(detail, None)
329+
return extract_context_from_step_functions(dd_context, None)
320330
except Exception:
321331
logger.debug(
322332
"Failed to extract Step Functions context from EventBridge to SQS event."
@@ -338,8 +348,10 @@ def extract_context_from_eventbridge_event(event, lambda_context):
338348
dd_context = detail.get("_datadog")
339349
if not dd_context:
340350
return extract_context_from_lambda_context(lambda_context)
351+
341352
if is_step_function_event(dd_context):
342-
return extract_context_from_step_functions(detail, lambda_context)
353+
return extract_context_from_step_functions(dd_context, lambda_context)
354+
343355
return propagator.extract(dd_context)
344356
except Exception as e:
345357
logger.debug("The trace extractor returned with error %s", e)
@@ -450,26 +462,24 @@ def extract_context_from_step_functions(event, lambda_context):
450462
"""
451463
try:
452464
event = event.get("Payload", event)
465+
event = event.get("_datadog", event)
453466

454467
meta = {}
455-
dd_data = event.get("_datadog")
456468

457-
if dd_data and dd_data.get("serverless-version") == "v1":
458-
if "x-datadog-trace-id" in dd_data: # lambda root
459-
trace_id = int(dd_data.get("x-datadog-trace-id"))
460-
high_64_bit_trace_id = _parse_high_64_bits(
461-
dd_data.get("x-datadog-tags")
462-
)
469+
if event.get("serverless-version") == "v1":
470+
if "x-datadog-trace-id" in event: # lambda root
471+
trace_id = int(event.get("x-datadog-trace-id"))
472+
high_64_bit_trace_id = _parse_high_64_bits(event.get("x-datadog-tags"))
463473
if high_64_bit_trace_id:
464474
meta["_dd.p.tid"] = high_64_bit_trace_id
465475
else: # sfn root
466-
root_execution_id = dd_data.get("RootExecutionId")
476+
root_execution_id = event.get("RootExecutionId")
467477
trace_id = _generate_sfn_trace_id(root_execution_id, LOWER_64_BITS)
468478
meta["_dd.p.tid"] = _generate_sfn_trace_id(
469479
root_execution_id, HIGHER_64_BITS
470480
)
471481

472-
parent_id = _generate_sfn_parent_id(dd_data)
482+
parent_id = _generate_sfn_parent_id(event)
473483
else:
474484
execution_id = event.get("Execution").get("Id")
475485
trace_id = _generate_sfn_trace_id(execution_id, LOWER_64_BITS)
@@ -1331,7 +1341,8 @@ def create_inferred_span_from_eventbridge_event(event, context):
13311341
span.start = dt.replace(tzinfo=timezone.utc).timestamp()
13321342

13331343
# Since inferred span will later parent Lambda, preserve Lambda's current parent
1334-
span.parent_id = dd_trace_context.span_id
1344+
if dd_trace_context.span_id:
1345+
span.parent_id = dd_trace_context.span_id
13351346

13361347
return span
13371348

datadog_lambda/trigger.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -386,9 +386,8 @@ def is_step_function_event(event):
386386

387387
# JSONata style
388388
if "_datadog" in event:
389-
datadog_context = event["_datadog"]
390389
return all(
391-
field in event
390+
field in event["_datadog"]
392391
for field in ("Execution", "StateMachine", "State", "serverless-version")
393392
)
394393

0 commit comments

Comments
 (0)