@@ -412,6 +412,18 @@ def create_inferred_span(event, context):
412412 elif event_source .equals (EventTypes .SNS ):
413413 logger .debug ("SNS event detected. Inferring a span" )
414414 return create_inferred_span_from_sns_event (event , context )
415+ elif event_source .equals (EventTypes .KINESIS ):
416+ logger .debug ("Kinesis event detected. Inferring a span" )
417+ return create_inferred_span_from_kinesis_event (event , context )
418+ elif event_source .equals (EventTypes .DYNAMODB ):
419+ logger .debug ("Dynamodb event detected. Inferring a span" )
420+ return create_inferred_span_from_dynamodb_event (event , context )
421+ elif event_source .equals (EventTypes .S3 ):
422+ logger .debug ("S3 event detected. Inferring a span" )
423+ return create_inferred_span_from_s3_event (event , context )
424+ elif event_source .equals (EventTypes .EVENTBRIDGE ):
425+ logger .debug ("Eventbridge event detected. Inferring a span" )
426+ return create_inferred_span_from_eventbridge_event (event , context )
415427
416428 except Exception as e :
417429 logger .debug (
@@ -549,6 +561,101 @@ def create_inferred_span_from_sns_event(event, context):
549561 return span
550562
551563
564+ def create_inferred_span_from_kinesis_event (event , context ):
565+ event_record = get_first_record (event )
566+ stream_name = event_record ["eventSourceARN" ].split (":" )[- 1 ]
567+ tags = {
568+ "operation_name" : "aws.kinesis" ,
569+ "service.name" : "kinesis" ,
570+ "resource_names" : stream_name ,
571+ SPAN_TYPE_TAG : SPAN_TYPE_INFERRED ,
572+ }
573+ request_time_epoch = event_record ["kinesis" ]["approximateArrivalTimestamp" ]
574+
575+ args = {
576+ "resource" : stream_name ,
577+ "span_type" : "web" ,
578+ }
579+ tracer .set_tags ({"_dd.origin" : "lambda" })
580+ span = tracer .trace ("aws.kinesis" , ** args )
581+ if span :
582+ span .set_tags (tags )
583+ span .start = int (request_time_epoch )
584+ return span
585+
586+
587+ def create_inferred_span_from_dynamodb_event (event , context ):
588+ event_record = get_first_record (event )
589+ table_name = event_record ["eventSourceARN" ].split ("/" )[1 ]
590+ tags = {
591+ "operation_name" : "aws.dynamodb" ,
592+ "service.name" : "dynamodb" ,
593+ "resource_names" : table_name ,
594+ SPAN_TYPE_TAG : SPAN_TYPE_INFERRED ,
595+ }
596+ request_time_epoch = event_record ["dynamodb" ]["ApproximateCreationDateTime" ]
597+
598+ args = {
599+ "resource" : table_name ,
600+ "span_type" : "web" ,
601+ }
602+ tracer .set_tags ({"_dd.origin" : "lambda" })
603+ span = tracer .trace ("aws.dynamodb" , ** args )
604+ if span :
605+ span .set_tags (tags )
606+ span .start = int (request_time_epoch )
607+ return span
608+
609+
610+ def create_inferred_span_from_s3_event (event , context ):
611+ event_record = get_first_record (event )
612+ bucket_name = event_record ["s3" ]["bucket" ]["name" ]
613+ tags = {
614+ "operation_name" : "aws.s3" ,
615+ "service.name" : "s3" ,
616+ "resource_names" : bucket_name ,
617+ SPAN_TYPE_TAG : SPAN_TYPE_INFERRED ,
618+ }
619+ dt_format = "%Y-%m-%dT%H:%M:%S.%fZ"
620+ timestamp = event_record ["eventTime" ]
621+ request_time_epoch = datetime .strptime (timestamp , dt_format )
622+
623+ args = {
624+ "resource" : bucket_name ,
625+ "span_type" : "web" ,
626+ }
627+ tracer .set_tags ({"_dd.origin" : "lambda" })
628+ span = tracer .trace ("aws.s3" , ** args )
629+ if span :
630+ span .set_tags (tags )
631+ span .start = int (request_time_epoch .strftime ("%s" ))
632+ return span
633+
634+
635+ def create_inferred_span_from_eventbridge_event (event , context ):
636+ source = event ["source" ]
637+ tags = {
638+ "operation_name" : "aws.eventbridge" ,
639+ "service.name" : "eventbridge" ,
640+ "resource_names" : source ,
641+ SPAN_TYPE_TAG : SPAN_TYPE_INFERRED ,
642+ }
643+ dt_format = "%Y-%m-%dT%H:%M:%SZ"
644+ timestamp = event ["time" ]
645+ request_time_epoch = datetime .strptime (timestamp , dt_format )
646+
647+ args = {
648+ "resource" : source ,
649+ "span_type" : "web" ,
650+ }
651+ tracer .set_tags ({"_dd.origin" : "lambda" })
652+ span = tracer .trace ("aws.eventbridge" , ** args )
653+ if span :
654+ span .set_tags (tags )
655+ span .start = int (request_time_epoch .strftime ("%s" ))
656+ return span
657+
658+
552659def create_function_execution_span (
553660 context ,
554661 function_name ,
0 commit comments