7
7
import os
8
8
import json
9
9
from datetime import datetime , timezone
10
- from typing import Optional , Dict
11
-
12
- try :
13
- from typing import Literal
14
- except ImportError :
15
- # Literal was added to typing in python 3.8
16
- from typing_extensions import Literal
10
+ from typing import Optional , Literal , Dict
17
11
18
12
from datadog_lambda .constants import (
19
13
SamplingPriority ,
@@ -448,30 +442,24 @@ def is_api_gateway_invocation_async(event):
448
442
449
443
450
444
def create_inferred_span_from_api_gateway_websocket_event (event , context ):
451
- request_context = event ["requestContext" ]
452
- domain = request_context ["domainName" ]
453
- endpoint = request_context ["routeKey" ]
445
+ domain = event ["requestContext" ]["domainName" ]
446
+ endpoint = event ["requestContext" ]["routeKey" ]
454
447
tags = {
455
448
"operation_name" : "aws.apigateway.websocket" ,
456
449
"http.url" : domain + endpoint ,
457
450
"endpoint" : endpoint ,
458
- "resource_names" : endpoint ,
459
- "apiid" : request_context ["apiId" ],
460
- "apiname" : request_context ["apiId" ],
461
- "stage" : request_context ["stage" ],
462
- "request_id" : request_context ["requestId" ],
463
- "connection_id" : request_context ["connectionId" ],
464
- "event_type" : request_context ["eventType" ],
465
- "message_direction" : request_context ["messageDirection" ],
451
+ "resource_names" : domain + endpoint ,
452
+ "request_id" : context .aws_request_id ,
453
+ "connection_id" : event ["requestContext" ]["connectionId" ],
466
454
}
467
- request_time_epoch = request_context ["requestTimeEpoch" ]
468
455
if is_api_gateway_invocation_async (event ):
469
456
InferredSpanInfo .set_tags (tags , tag_source = "self" , synchronicity = "async" )
470
457
else :
471
458
InferredSpanInfo .set_tags (tags , tag_source = "self" , synchronicity = "sync" )
459
+ request_time_epoch = event ["requestContext" ]["requestTimeEpoch" ]
472
460
args = {
473
461
"service" : domain ,
474
- "resource" : endpoint ,
462
+ "resource" : domain + endpoint ,
475
463
"span_type" : "web" ,
476
464
}
477
465
tracer .set_tags ({"_dd.origin" : "lambda" })
@@ -483,30 +471,24 @@ def create_inferred_span_from_api_gateway_websocket_event(event, context):
483
471
484
472
485
473
def create_inferred_span_from_api_gateway_event (event , context ):
486
- request_context = event ["requestContext" ]
487
- domain = request_context ["domainName" ]
488
- method = event ["httpMethod" ]
474
+ domain = event ["requestContext" ]["domainName" ]
489
475
path = event ["path" ]
490
- resource = "{0} {1}" .format (method , path )
491
476
tags = {
492
477
"operation_name" : "aws.apigateway.rest" ,
493
478
"http.url" : domain + path ,
494
479
"endpoint" : path ,
495
- "http.method" : method ,
496
- "resource_names" : resource ,
497
- "apiid" : request_context ["apiId" ],
498
- "apiname" : request_context ["apiId" ],
499
- "stage" : request_context ["stage" ],
500
- "request_id" : request_context ["requestId" ],
480
+ "http.method" : event ["httpMethod" ],
481
+ "resource_names" : domain + path ,
482
+ "request_id" : context .aws_request_id ,
501
483
}
502
- request_time_epoch = request_context ["requestTimeEpoch" ]
503
484
if is_api_gateway_invocation_async (event ):
504
485
InferredSpanInfo .set_tags (tags , tag_source = "self" , synchronicity = "async" )
505
486
else :
506
487
InferredSpanInfo .set_tags (tags , tag_source = "self" , synchronicity = "sync" )
488
+ request_time_epoch = event ["requestContext" ]["requestTimeEpoch" ]
507
489
args = {
508
490
"service" : domain ,
509
- "resource" : resource ,
491
+ "resource" : domain + path ,
510
492
"span_type" : "http" ,
511
493
}
512
494
tracer .set_tags ({"_dd.origin" : "lambda" })
@@ -518,33 +500,24 @@ def create_inferred_span_from_api_gateway_event(event, context):
518
500
519
501
520
502
def create_inferred_span_from_http_api_event (event , context ):
521
- request_context = event ["requestContext" ]
522
- domain = request_context ["domainName" ]
523
- method = request_context ["http" ]["method" ]
503
+ domain = event ["requestContext" ]["domainName" ]
524
504
path = event ["rawPath" ]
525
- resource = "{0} {1}" .format (method , path )
526
505
tags = {
527
506
"operation_name" : "aws.httpapi" ,
528
- "endpoint" : path ,
529
507
"http.url" : domain + path ,
530
- "http.method" : request_context ["http" ]["method" ],
531
- "http.protocol" : request_context ["http" ]["protocol" ],
532
- "http.source_ip" : request_context ["http" ]["sourceIp" ],
533
- "http.user_agent" : request_context ["http" ]["userAgent" ],
534
- "resource_names" : resource ,
508
+ "endpoint" : path ,
509
+ "http.method" : event ["requestContext" ]["http" ]["method" ],
510
+ "resource_names" : domain + path ,
535
511
"request_id" : context .aws_request_id ,
536
- "apiid" : request_context ["apiId" ],
537
- "apiname" : request_context ["apiId" ],
538
- "stage" : request_context ["stage" ],
539
512
}
540
- request_time_epoch = request_context ["timeEpoch" ]
541
513
if is_api_gateway_invocation_async (event ):
542
514
InferredSpanInfo .set_tags (tags , tag_source = "self" , synchronicity = "async" )
543
515
else :
544
516
InferredSpanInfo .set_tags (tags , tag_source = "self" , synchronicity = "sync" )
517
+ request_time_epoch = event ["requestContext" ]["timeEpoch" ]
545
518
args = {
546
519
"service" : domain ,
547
- "resource" : resource ,
520
+ "resource" : domain + path ,
548
521
"span_type" : "http" ,
549
522
}
550
523
tracer .set_tags ({"_dd.origin" : "lambda" })
@@ -557,15 +530,10 @@ def create_inferred_span_from_http_api_event(event, context):
557
530
558
531
def create_inferred_span_from_sqs_event (event , context ):
559
532
event_record = get_first_record (event )
560
- event_source_arn = event_record ["eventSourceARN" ]
561
- queue_name = event_source_arn .split (":" )[- 1 ]
533
+ queue_name = event_record ["eventSourceARN" ].split (":" )[- 1 ]
562
534
tags = {
563
535
"operation_name" : "aws.sqs" ,
564
536
"resource_names" : queue_name ,
565
- "queuename" : queue_name ,
566
- "event_source_arn" : event_source_arn ,
567
- "receipt_handle" : event_record ["receiptHandle" ],
568
- "sender_id" : event_record ["attributes" ]["SenderId" ],
569
537
}
570
538
InferredSpanInfo .set_tags (tags , tag_source = "self" , synchronicity = "async" )
571
539
request_time_epoch = event_record ["attributes" ]["SentTimestamp" ]
@@ -584,18 +552,10 @@ def create_inferred_span_from_sqs_event(event, context):
584
552
585
553
def create_inferred_span_from_sns_event (event , context ):
586
554
event_record = get_first_record (event )
587
- sns_message = event_record ["Sns" ]
588
- topic_arn = event_record ["Sns" ]["TopicArn" ]
589
- topic_name = topic_arn .split (":" )[- 1 ]
555
+ topic_name = event_record ["Sns" ]["TopicArn" ].split (":" )[- 1 ]
590
556
tags = {
591
557
"operation_name" : "aws.sns" ,
592
558
"resource_names" : topic_name ,
593
- "topicname" : topic_name ,
594
- "topic_arn" : topic_arn ,
595
- "message_id" : sns_message ["MessageId" ],
596
- "type" : sns_message ["Type" ],
597
- "subject" : sns_message ["Subject" ],
598
- "event_subscription_arn" : event_record ["EventSubscriptionArn" ],
599
559
}
600
560
InferredSpanInfo .set_tags (tags , tag_source = "self" , synchronicity = "async" )
601
561
sns_dt_format = "%Y-%m-%dT%H:%M:%S.%fZ"
@@ -617,20 +577,10 @@ def create_inferred_span_from_sns_event(event, context):
617
577
618
578
def create_inferred_span_from_kinesis_event (event , context ):
619
579
event_record = get_first_record (event )
620
- event_source_arn = event_record ["eventSourceARN" ]
621
- event_id = event_record ["eventID" ]
622
- stream_name = event_source_arn .split (":" )[- 1 ]
623
- shard_id = event_id .split (":" )[0 ]
580
+ stream_name = event_record ["eventSourceARN" ].split (":" )[- 1 ]
624
581
tags = {
625
582
"operation_name" : "aws.kinesis" ,
626
583
"resource_names" : stream_name ,
627
- "streamname" : stream_name ,
628
- "shardid" : shard_id ,
629
- "event_source_arn" : event_source_arn ,
630
- "event_id" : event_id ,
631
- "event_name" : event_record ["eventName" ],
632
- "event_version" : event_record ["eventVersion" ],
633
- "partition_key" : event_record ["kinesis" ]["partitionKey" ],
634
584
}
635
585
InferredSpanInfo .set_tags (tags , tag_source = "self" , synchronicity = "async" )
636
586
request_time_epoch = event_record ["kinesis" ]["approximateArrivalTimestamp" ]
@@ -650,22 +600,14 @@ def create_inferred_span_from_kinesis_event(event, context):
650
600
651
601
def create_inferred_span_from_dynamodb_event (event , context ):
652
602
event_record = get_first_record (event )
653
- event_source_arn = event_record ["eventSourceARN" ]
654
- table_name = event_source_arn .split ("/" )[1 ]
655
- dynamodb_message = event_record ["dynamodb" ]
603
+ table_name = event_record ["eventSourceARN" ].split ("/" )[1 ]
656
604
tags = {
657
605
"operation_name" : "aws.dynamodb" ,
658
606
"resource_names" : table_name ,
659
- "tablename" : table_name ,
660
- "event_source_arn" : event_source_arn ,
661
- "event_id" : event_record ["eventID" ],
662
- "event_name" : event_record ["eventName" ],
663
- "event_version" : event_record ["eventVersion" ],
664
- "stream_view_type" : dynamodb_message ["StreamViewType" ],
665
- "size_bytes" : dynamodb_message ["SizeBytes" ],
666
607
}
667
608
InferredSpanInfo .set_tags (tags , synchronicity = "async" , tag_source = "self" )
668
609
request_time_epoch = event_record ["dynamodb" ]["ApproximateCreationDateTime" ]
610
+
669
611
args = {
670
612
"service" : "dynamodb" ,
671
613
"resource" : table_name ,
@@ -675,7 +617,6 @@ def create_inferred_span_from_dynamodb_event(event, context):
675
617
span = tracer .trace ("aws.dynamodb" , ** args )
676
618
if span :
677
619
span .set_tags (tags )
678
-
679
620
span .start = int (request_time_epoch )
680
621
return span
681
622
@@ -686,12 +627,6 @@ def create_inferred_span_from_s3_event(event, context):
686
627
tags = {
687
628
"operation_name" : "aws.s3" ,
688
629
"resource_names" : bucket_name ,
689
- "event_name" : event_record ["eventName" ],
690
- "bucketname" : bucket_name ,
691
- "bucket_arn" : event_record ["s3" ]["bucket" ]["arn" ],
692
- "object_key" : event_record ["s3" ]["object" ]["key" ],
693
- "object_size" : event_record ["s3" ]["object" ]["size" ],
694
- "object_etag" : event_record ["s3" ]["etag" ],
695
630
}
696
631
InferredSpanInfo .set_tags (tags , synchronicity = "async" , tag_source = "self" )
697
632
dt_format = "%Y-%m-%dT%H:%M:%S.%fZ"
@@ -716,7 +651,6 @@ def create_inferred_span_from_eventbridge_event(event, context):
716
651
tags = {
717
652
"operation_name" : "aws.eventbridge" ,
718
653
"resource_names" : source ,
719
- "detail_type" : event ["detail-type" ],
720
654
}
721
655
InferredSpanInfo .set_tags (
722
656
tags ,
0 commit comments