@@ -170,7 +170,9 @@ def extract_context_from_lambda_context(lambda_context):
170
170
return trace_id , parent_id , sampling_priority
171
171
172
172
173
- def extract_context_from_http_event_or_context (event , lambda_context , event_source : _EventSource ):
173
+ def extract_context_from_http_event_or_context (
174
+ event , lambda_context , event_source : _EventSource
175
+ ):
174
176
"""
175
177
Extract Datadog trace context from the `headers` key in from the Lambda
176
178
`event` object.
@@ -340,10 +342,13 @@ def get_injected_authorizer_data(event, event_source: _EventSource) -> dict:
340
342
# has '_datadog' header and not cached because integrationLatency > 0
341
343
authorizer_headers = event .get ("requestContext" , {}).get ("authorizer" , {})
342
344
343
- # [API_GATEWAY V1]if integrationLatency == 0, it's cached and no trace for the authorizer func
344
- if event_source .equals (
345
- EventTypes .API_GATEWAY , subtype = EventSubtypes .API_GATEWAY
346
- ) and int (authorizer_headers .get ("integrationLatency" , 0 )) == 0 :
345
+ # [API_GATEWAY V1]if integrationLatency == 0, it's cached and no trace for the authorizer
346
+ if (
347
+ event_source .equals (
348
+ EventTypes .API_GATEWAY , subtype = EventSubtypes .API_GATEWAY
349
+ )
350
+ and int (authorizer_headers .get ("integrationLatency" , 0 )) == 0
351
+ ):
347
352
return None
348
353
349
354
if event_source .equals (EventTypes .API_GATEWAY , subtype = EventSubtypes .HTTP_API ):
@@ -383,7 +388,9 @@ def extract_dd_trace_context(event, lambda_context, extractor=None):
383
388
trace_id ,
384
389
parent_id ,
385
390
sampling_priority ,
386
- ) = extract_context_from_http_event_or_context (event , lambda_context , event_source )
391
+ ) = extract_context_from_http_event_or_context (
392
+ event , lambda_context , event_source
393
+ )
387
394
elif event_source .equals (EventTypes .SNS ) or event_source .equals (EventTypes .SQS ):
388
395
(
389
396
trace_id ,
@@ -689,13 +696,29 @@ def create_inferred_span_from_api_gateway_websocket_event(event, context):
689
696
}
690
697
tracer .set_tags ({"_dd.origin" : "lambda" })
691
698
upstream_authorizer_span = None
692
- injected_authorizer_data = get_injected_authorizer_data (event , _EventSource (EventTypes .API_GATEWAY , EventSubtypes .WEBSOCKET ))
699
+ finish_time_s = None
700
+ injected_authorizer_data = get_injected_authorizer_data (
701
+ event , _EventSource (EventTypes .API_GATEWAY , EventSubtypes .WEBSOCKET )
702
+ )
693
703
if injected_authorizer_data :
694
704
try :
695
- start_time_s = int (injected_authorizer_data .get (OtherConsts .parentSpanFinishTimeHeader )) / 1000
696
- finish_time_s = request_time_epoch_s + \
697
- (int (request_context .get ("authorizer" , {}).get ("integrationLatency" , 0 ))
698
- ) / 1000
705
+ start_time_s = (
706
+ int (
707
+ injected_authorizer_data .get (OtherConsts .parentSpanFinishTimeHeader )
708
+ )
709
+ / 1000
710
+ )
711
+ finish_time_s = (
712
+ request_time_epoch_s
713
+ + (
714
+ int (
715
+ request_context .get ("authorizer" , {}).get (
716
+ "integrationLatency" , 0
717
+ )
718
+ )
719
+ )
720
+ / 1000
721
+ )
699
722
upstream_authorizer_span = insert_upstream_authorizer_span (
700
723
args , tags , start_time_s , finish_time_s
701
724
)
@@ -714,7 +737,9 @@ def create_inferred_span_from_api_gateway_websocket_event(event, context):
714
737
span = tracer .trace ("aws.apigateway.websocket" , ** args )
715
738
if span :
716
739
span .set_tags (tags )
717
- span .start = finish_time_s if finish_time_s is not None else request_time_epoch_s
740
+ span .start = (
741
+ finish_time_s if finish_time_s is not None else request_time_epoch_s
742
+ )
718
743
if upstream_authorizer_span :
719
744
span .parent_id = upstream_authorizer_span .span_id
720
745
return span
@@ -751,12 +776,28 @@ def create_inferred_span_from_api_gateway_event(event, context):
751
776
tracer .set_tags ({"_dd.origin" : "lambda" })
752
777
upstream_authorizer_span = None
753
778
finish_time_s = None
754
- injected_authorizer_data = get_injected_authorizer_data (event , _EventSource (EventTypes .API_GATEWAY , EventSubtypes .API_GATEWAY ))
779
+ injected_authorizer_data = get_injected_authorizer_data (
780
+ event , _EventSource (EventTypes .API_GATEWAY , EventSubtypes .API_GATEWAY )
781
+ )
755
782
if injected_authorizer_data :
756
783
try :
757
- start_time_s = int (injected_authorizer_data .get (OtherConsts .parentSpanFinishTimeHeader )) / 1000
758
- finish_time_s = request_time_epoch_s + \
759
- (int (request_context .get ("authorizer" , {}).get ("integrationLatency" , 0 ))) / 1000
784
+ start_time_s = (
785
+ int (
786
+ injected_authorizer_data .get (OtherConsts .parentSpanFinishTimeHeader )
787
+ )
788
+ / 1000
789
+ )
790
+ finish_time_s = (
791
+ request_time_epoch_s
792
+ + (
793
+ int (
794
+ request_context .get ("authorizer" , {}).get (
795
+ "integrationLatency" , 0
796
+ )
797
+ )
798
+ )
799
+ / 1000
800
+ )
760
801
upstream_authorizer_span = insert_upstream_authorizer_span (
761
802
args , tags , start_time_s , finish_time_s
762
803
)
@@ -775,7 +816,9 @@ def create_inferred_span_from_api_gateway_event(event, context):
775
816
if span :
776
817
span .set_tags (tags )
777
818
# start time pushed by the inserted authorizer span
778
- span .start = finish_time_s if finish_time_s is not None else request_time_epoch_s
819
+ span .start = (
820
+ finish_time_s if finish_time_s is not None else request_time_epoch_s
821
+ )
779
822
if upstream_authorizer_span :
780
823
span .parent_id = upstream_authorizer_span .span_id
781
824
return span
@@ -815,11 +858,18 @@ def create_inferred_span_from_http_api_event(event, context):
815
858
tracer .set_tags ({"_dd.origin" : "lambda" })
816
859
upstream_authorizer_span = None
817
860
finish_time_s = None
818
- injected_authorizer_data = get_injected_authorizer_data (event , _EventSource (EventTypes .API_GATEWAY , EventSubtypes .HTTP_API ))
861
+ injected_authorizer_data = get_injected_authorizer_data (
862
+ event , _EventSource (EventTypes .API_GATEWAY , EventSubtypes .HTTP_API )
863
+ )
819
864
if injected_authorizer_data :
820
865
try :
821
- start_time_s = int (injected_authorizer_data .get (OtherConsts .parentSpanFinishTimeHeader )) / 1000
822
- finish_time_s = start_time_s # we don't have the integrationLatency info for the authorizer
866
+ start_time_s = (
867
+ int (
868
+ injected_authorizer_data .get (OtherConsts .parentSpanFinishTimeHeader )
869
+ )
870
+ / 1000
871
+ )
872
+ finish_time_s = start_time_s # no integrationLatency info in this case
823
873
upstream_authorizer_span = insert_upstream_authorizer_span (
824
874
args , tags , start_time_s , finish_time_s
825
875
)
@@ -836,7 +886,9 @@ def create_inferred_span_from_http_api_event(event, context):
836
886
span = tracer .trace ("aws.httpapi" , ** args )
837
887
if span :
838
888
span .set_tags (tags )
839
- span .start = finish_time_s if finish_time_s is not None else request_time_epoch_s
889
+ span .start = (
890
+ finish_time_s if finish_time_s is not None else request_time_epoch_s
891
+ )
840
892
if upstream_authorizer_span :
841
893
span .parent_id = upstream_authorizer_span .span_id
842
894
return span
0 commit comments