4242 tracer ,
4343 propagator ,
4444)
45+ from datadog_lambda .durable import (
46+ extract_durable_function_tags ,
47+ extract_durable_execution_status ,
48+ )
4549from datadog_lambda .trigger import (
4650 extract_trigger_tags ,
4751 extract_http_status_code_tag ,
@@ -152,7 +156,7 @@ def __init__(self, func):
152156 if config .trace_extractor :
153157 extractor_parts = config .trace_extractor .rsplit ("." , 1 )
154158 if len (extractor_parts ) == 2 :
155- ( mod_name , extractor_name ) = extractor_parts
159+ mod_name , extractor_name = extractor_parts
156160 modified_extractor_name = modify_module_name (mod_name )
157161 extractor_module = import_module (modified_extractor_name )
158162 self .trace_extractor = getattr (extractor_module , extractor_name )
@@ -243,6 +247,7 @@ def _before(self, event, context):
243247 submit_invocations_metric (context )
244248
245249 self .trigger_tags = extract_trigger_tags (event , context )
250+ self .durable_function_tags = extract_durable_function_tags (event )
246251 # Extract Datadog trace context and source from incoming requests
247252 dd_context , trace_context_source , event_source = extract_dd_trace_context (
248253 event ,
@@ -280,6 +285,7 @@ def _before(self, event, context):
280285 trace_context_source = trace_context_source ,
281286 merge_xray_traces = config .merge_xray_traces ,
282287 trigger_tags = self .trigger_tags ,
288+ durable_function_tags = self .durable_function_tags ,
283289 parent_span = self .inferred_span ,
284290 span_pointers = calculate_span_pointers (event_source , event ),
285291 )
@@ -289,7 +295,7 @@ def _before(self, event, context):
289295 else :
290296 set_correlation_ids ()
291297 if config .profiling_enabled and profiler and is_new_sandbox ():
292- self .prof .start (stop_on_exit = False , profile_children = True )
298+ self .prof .start ()
293299 logger .debug ("datadog_lambda_wrapper _before() done" )
294300 except Exception as e :
295301 logger .error (format_err_with_traceback (e ))
@@ -302,6 +308,16 @@ def _after(self, event, context):
302308
303309 status_code = extract_http_status_code_tag (self .trigger_tags , self .response )
304310
311+ # Skip creating cold start spans in managed instances mode
312+ # In managed instances, the tracer library handles cold start independently
313+ should_trace_cold_start = (
314+ config .cold_start_tracing
315+ and is_new_sandbox ()
316+ and not is_managed_instances_mode ()
317+ )
318+ if should_trace_cold_start :
319+ trace_ctx = tracer .current_trace_context ()
320+
305321 if self .span :
306322 if config .appsec_enabled and not self .blocking_response :
307323 asm_start_response (
@@ -327,6 +343,13 @@ def _after(self, event, context):
327343 if status_code :
328344 self .span .set_tag ("http.status_code" , status_code )
329345
346+ durable_status = extract_durable_execution_status (self .response , event )
347+ if durable_status :
348+ self .span .set_tag (
349+ "aws_lambda.durable_function.execution_status" ,
350+ durable_status ,
351+ )
352+
330353 self .span .finish ()
331354
332355 if status_code :
@@ -339,15 +362,6 @@ def _after(self, event, context):
339362 create_dd_dummy_metadata_subsegment (
340363 self .trigger_tags , XraySubsegment .LAMBDA_FUNCTION_TAGS_KEY
341364 )
342- # Skip creating cold start spans in managed instances mode
343- # In managed instances, the tracer library handles cold start independently
344- should_trace_cold_start = (
345- config .cold_start_tracing
346- and is_new_sandbox ()
347- and not is_managed_instances_mode ()
348- )
349- if should_trace_cold_start :
350- trace_ctx = tracer .current_trace_context ()
351365
352366 if self .inferred_span :
353367 if status_code :
0 commit comments