Skip to content

Commit 2d20397

Browse files
committed
SSR changes
1 parent 664124e commit 2d20397

File tree

3 files changed

+62
-28
lines changed

3 files changed

+62
-28
lines changed

datadog_lambda/tracing.py

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# Copyright 2019 Datadog, Inc.
55
import logging
66
import os
7+
import re
78
import traceback
89
import ujson as json
910
from datetime import datetime, timezone
@@ -856,10 +857,15 @@ def create_service_mapping(val):
856857
return new_service_mapping
857858

858859

859-
def determine_service_name(service_mapping, specific_key, generic_key, default_value):
860+
def determine_service_name(service_mapping,
861+
specific_key,
862+
generic_key,
863+
default_value,
864+
fallback=None):
860865
service_name = service_mapping.get(specific_key)
861866
if service_name is None:
862-
service_name = service_mapping.get(generic_key, default_value)
867+
service_name = service_mapping.get(generic_key,
868+
default_value if default_value is not None else fallback)
863869
return service_name
864870

865871

@@ -988,6 +994,7 @@ def create_inferred_span_from_api_gateway_websocket_event(
988994
"http.url": http_url,
989995
"endpoint": endpoint,
990996
"resource_names": endpoint,
997+
"span.kind": "server",
991998
"apiid": api_id,
992999
"apiname": api_id,
9931000
"stage": request_context.get("stage"),
@@ -1046,6 +1053,7 @@ def create_inferred_span_from_api_gateway_event(
10461053
"endpoint": path,
10471054
"http.method": method,
10481055
"resource_names": resource,
1056+
"span.kind": "server",
10491057
"apiid": api_id,
10501058
"apiname": api_id,
10511059
"stage": request_context.get("stage"),
@@ -1150,12 +1158,13 @@ def create_inferred_span_from_sqs_event(event, context):
11501158
event_source_arn = event_record.get("eventSourceARN")
11511159
queue_name = event_source_arn.split(":")[-1]
11521160
service_name = determine_service_name(
1153-
service_mapping, queue_name, "lambda_sqs", "sqs"
1161+
service_mapping, queue_name, "lambda_sqs", queue_name, "sqs"
11541162
)
11551163
attrs = event_record.get("attributes") or {}
11561164
tags = {
11571165
"operation_name": "aws.sqs",
11581166
"resource_names": queue_name,
1167+
"span.kind": "server",
11591168
"queuename": queue_name,
11601169
"event_source_arn": event_source_arn,
11611170
"receipt_handle": event_record.get("receiptHandle"),
@@ -1217,11 +1226,12 @@ def create_inferred_span_from_sns_event(event, context):
12171226
topic_arn = sns_message.get("TopicArn")
12181227
topic_name = topic_arn.split(":")[-1]
12191228
service_name = determine_service_name(
1220-
service_mapping, topic_name, "lambda_sns", "sns"
1229+
service_mapping, topic_name, "lambda_sns", topic_name, "sns"
12211230
)
12221231
tags = {
12231232
"operation_name": "aws.sns",
12241233
"resource_names": topic_name,
1234+
"span.kind": "server",
12251235
"topicname": topic_name,
12261236
"topic_arn": topic_arn,
12271237
"message_id": sns_message.get("MessageId"),
@@ -1252,15 +1262,16 @@ def create_inferred_span_from_kinesis_event(event, context):
12521262
event_record = get_first_record(event)
12531263
event_source_arn = event_record.get("eventSourceARN")
12541264
event_id = event_record.get("eventID")
1255-
stream_name = event_source_arn.split(":")[-1]
1265+
stream_name = re.sub(r"^stream/", "", (event_source_arn or "").split(":")[-1])
12561266
shard_id = event_id.split(":")[0]
12571267
service_name = determine_service_name(
1258-
service_mapping, stream_name, "lambda_kinesis", "kinesis"
1268+
service_mapping, stream_name, "lambda_kinesis", stream_name, "kinesis"
12591269
)
12601270
kinesis = event_record.get("kinesis") or {}
12611271
tags = {
12621272
"operation_name": "aws.kinesis",
12631273
"resource_names": stream_name,
1274+
"span.kind": "server",
12641275
"streamname": stream_name,
12651276
"shardid": shard_id,
12661277
"event_source_arn": event_source_arn,
@@ -1287,12 +1298,13 @@ def create_inferred_span_from_dynamodb_event(event, context):
12871298
event_source_arn = event_record.get("eventSourceARN")
12881299
table_name = event_source_arn.split("/")[1]
12891300
service_name = determine_service_name(
1290-
service_mapping, table_name, "lambda_dynamodb", "dynamodb"
1301+
service_mapping, table_name, "lambda_dynamodb", table_name, "dynamodb"
12911302
)
12921303
dynamodb_message = event_record.get("dynamodb") or {}
12931304
tags = {
12941305
"operation_name": "aws.dynamodb",
12951306
"resource_names": table_name,
1307+
"span.kind": "server",
12961308
"tablename": table_name,
12971309
"event_source_arn": event_source_arn,
12981310
"event_id": event_record.get("eventID"),
@@ -1321,11 +1333,12 @@ def create_inferred_span_from_s3_event(event, context):
13211333
obj = s3.get("object") or {}
13221334
bucket_name = bucket.get("name")
13231335
service_name = determine_service_name(
1324-
service_mapping, bucket_name, "lambda_s3", "s3"
1336+
service_mapping, bucket_name, "lambda_s3", bucket_name, "s3"
13251337
)
13261338
tags = {
13271339
"operation_name": "aws.s3",
13281340
"resource_names": bucket_name,
1341+
"span.kind": "server",
13291342
"event_name": event_record.get("eventName"),
13301343
"bucketname": bucket_name,
13311344
"bucket_arn": bucket.get("arn"),
@@ -1351,11 +1364,12 @@ def create_inferred_span_from_s3_event(event, context):
13511364
def create_inferred_span_from_eventbridge_event(event, context):
13521365
source = event.get("source")
13531366
service_name = determine_service_name(
1354-
service_mapping, source, "lambda_eventbridge", "eventbridge"
1367+
service_mapping, source, "lambda_eventbridge", source, "eventbridge"
13551368
)
13561369
tags = {
13571370
"operation_name": "aws.eventbridge",
13581371
"resource_names": source,
1372+
"span.kind": "server",
13591373
"detail_type": event.get("detail-type"),
13601374
}
13611375
InferredSpanInfo.set_tags(
@@ -1431,7 +1445,7 @@ def create_function_execution_span(
14311445
tracer.set_tags(_dd_origin)
14321446
span = tracer.trace(
14331447
"aws.lambda",
1434-
service="aws.lambda",
1448+
service=config.service if config.service else function_name,
14351449
resource=function_name,
14361450
span_type="serverless",
14371451
)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"Records": [
3+
{
4+
"kinesis": {
5+
"kinesisSchemaVersion": "1.0",
6+
"partitionKey": "partitionkey",
7+
"sequenceNumber": "49624230154685806402418173680709770494154422022871973922",
8+
"data": "eyJmb28iOiAiYmFyIiwgIl9kYXRhZG9nIjogeyJ4LWRhdGFkb2ctdHJhY2UtaWQiOiAiNDk0ODM3NzMxNjM1NzI5MTQyMSIsICJ4LWRhdGFkb2ctcGFyZW50LWlkIjogIjI4NzYyNTMzODAwMTg2ODEwMjYiLCAieC1kYXRhZG9nLXNhbXBsaW5nLXByaW9yaXR5IjogIjEifX0=",
9+
"approximateArrivalTimestamp": 1643638425.163
10+
},
11+
"eventSource": "aws:kinesis",
12+
"eventVersion": "1.0",
13+
"eventID": "shardId-000000000002:49624230154685806402418173680709770494154422022871973922",
14+
"eventName": "aws:kinesis:record",
15+
"invokeIdentityArn": "arn:aws:iam::601427279990:role/inferred-spans-python-dev-eu-west-1-lambdaRole",
16+
"awsRegion": "eu-west-1",
17+
"eventSourceARN": "arn:aws:kinesis:eu-west-1:601427279990:stream/kinesisStream"
18+
}
19+
]
20+
}

tests/test_tracing.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1478,7 +1478,7 @@ def test_remaps_specific_inferred_span_service_names_from_sqs_event(self):
14781478
] = "arn:aws:sqs:eu-west-1:123456789012:different-sqs-url"
14791479
span2 = create_inferred_span(event2, ctx)
14801480
self.assertEqual(span2.get_tag("operation_name"), "aws.sqs")
1481-
self.assertEqual(span2.service, "sqs")
1481+
self.assertEqual(span2.service, "different-sqs-url")
14821482

14831483
def test_remaps_all_inferred_span_service_names_from_sns_event(self):
14841484
self.set_service_mapping({"lambda_sns": "new-name"})
@@ -1524,7 +1524,7 @@ def test_remaps_specific_inferred_span_service_names_from_sns_event(self):
15241524
] = "arn:aws:sns:us-west-2:123456789012:different-sns-topic"
15251525
span2 = create_inferred_span(event2, ctx)
15261526
self.assertEqual(span2.get_tag("operation_name"), "aws.sns")
1527-
self.assertEqual(span2.service, "sns")
1527+
self.assertEqual(span2.service, "different-sns-topic")
15281528

15291529
def test_remaps_all_inferred_span_service_names_from_kinesis_event(self):
15301530
self.set_service_mapping({"lambda_kinesis": "new-name"})
@@ -1561,7 +1561,7 @@ def test_remaps_specific_inferred_span_service_names_from_kinesis_event(self):
15611561

15621562
span1 = create_inferred_span(original_event, ctx)
15631563
self.assertEqual(span1.get_tag("operation_name"), "aws.kinesis")
1564-
self.assertEqual(span1.service, "kinesis")
1564+
self.assertEqual(span1.service, "kinesisStream")
15651565

15661566
# Testing the second event
15671567
event2 = copy.deepcopy(original_event)
@@ -1570,7 +1570,7 @@ def test_remaps_specific_inferred_span_service_names_from_kinesis_event(self):
15701570
] = "arn:aws:kinesis:eu-west-1:601427279990:stream/DifferentKinesisStream"
15711571
span2 = create_inferred_span(event2, ctx)
15721572
self.assertEqual(span2.get_tag("operation_name"), "aws.kinesis")
1573-
self.assertEqual(span2.service, "kinesis")
1573+
self.assertEqual(span2.service, "DifferentKinesisStream")
15741574

15751575
def test_remaps_all_inferred_span_service_names_from_s3_event(self):
15761576
self.set_service_mapping({"lambda_s3": "new-name"})
@@ -1614,7 +1614,7 @@ def test_remaps_specific_inferred_span_service_names_from_s3_event(self):
16141614
event2["Records"][0]["s3"]["bucket"]["name"] = "different-example-bucket"
16151615
span2 = create_inferred_span(event2, ctx)
16161616
self.assertEqual(span2.get_tag("operation_name"), "aws.s3")
1617-
self.assertEqual(span2.service, "s3")
1617+
self.assertEqual(span2.service, "different-example-bucket")
16181618

16191619
def test_remaps_all_inferred_span_service_names_from_dynamodb_event(self):
16201620
self.set_service_mapping({"lambda_dynamodb": "new-name"})
@@ -1660,7 +1660,7 @@ def test_remaps_specific_inferred_span_service_names_from_dynamodb_event(self):
16601660
] = "arn:aws:dynamodb:us-east-1:123456789012:table/DifferentExampleTableWithStream/stream/2015-06-27T00:48:05.899"
16611661
span2 = create_inferred_span(event2, ctx)
16621662
self.assertEqual(span2.get_tag("operation_name"), "aws.dynamodb")
1663-
self.assertEqual(span2.service, "dynamodb")
1663+
self.assertEqual(span2.service, "DifferentExampleTableWithStream")
16641664

16651665
def test_remaps_all_inferred_span_service_names_from_eventbridge_event(self):
16661666
self.set_service_mapping({"lambda_eventbridge": "new-name"})
@@ -1704,7 +1704,7 @@ def test_remaps_specific_inferred_span_service_names_from_eventbridge_event(
17041704
event2["source"] = "different.eventbridge.custom.event.sender"
17051705
span2 = create_inferred_span(event2, ctx)
17061706
self.assertEqual(span2.get_tag("operation_name"), "aws.eventbridge")
1707-
self.assertEqual(span2.service, "eventbridge")
1707+
self.assertEqual(span2.service, "different.eventbridge.custom.event.sender")
17081708

17091709

17101710
class _Span(object):
@@ -1927,7 +1927,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
19271927
(
19281928
"sqs-string-msg-attribute",
19291929
_Span(
1930-
service="sqs",
1930+
service="InferredSpansQueueNode",
19311931
start=1634662094.538,
19321932
span_type="web",
19331933
tags={
@@ -1945,7 +1945,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
19451945
(
19461946
"sns-string-msg-attribute",
19471947
_Span(
1948-
service="sns",
1948+
service="serverlessTracingTopicPy",
19491949
start=1643638421.637,
19501950
span_type="web",
19511951
tags={
@@ -1964,7 +1964,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
19641964
(
19651965
"sns-b64-msg-attribute",
19661966
_Span(
1967-
service="sns",
1967+
service="serverlessTracingTopicPy",
19681968
start=1643638421.637,
19691969
span_type="web",
19701970
tags={
@@ -1981,9 +1981,9 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
19811981
),
19821982
),
19831983
(
1984-
"kinesis",
1984+
"kinesisStream",
19851985
_Span(
1986-
service="kinesis",
1986+
service="kinesisStream",
19871987
start=1643638425.163,
19881988
span_type="web",
19891989
tags={
@@ -2000,16 +2000,16 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
20002000
"operation_name": "aws.kinesis",
20012001
"partition_key": "partitionkey",
20022002
"request_id": None,
2003-
"resource_names": "stream/kinesisStream",
2003+
"resource_names": "kinesisStream",
20042004
"shardid": "shardId-000000000002",
2005-
"streamname": "stream/kinesisStream",
2005+
"streamname": "kinesisStream",
20062006
},
20072007
),
20082008
),
20092009
(
20102010
"dynamodb",
20112011
_Span(
2012-
service="dynamodb",
2012+
service="ExampleTableWithStream",
20132013
start=1428537600.0,
20142014
span_type="web",
20152015
tags={
@@ -2035,7 +2035,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
20352035
(
20362036
"s3",
20372037
_Span(
2038-
service="s3",
2038+
service="example-bucket",
20392039
start=0.0,
20402040
span_type="web",
20412041
tags={
@@ -2060,7 +2060,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
20602060
(
20612061
"eventbridge-custom",
20622062
_Span(
2063-
service="eventbridge",
2063+
service="eventbridge.custom.event.sender",
20642064
start=1635989865.0,
20652065
span_type="web",
20662066
tags={
@@ -2079,7 +2079,7 @@ def __init__(self, service, start, span_type, parent_name=None, tags=None):
20792079
(
20802080
"eventbridge-sqs",
20812081
_Span(
2082-
service="sqs",
2082+
service="eventbridge-sqs-queue",
20832083
start=1691102943.638,
20842084
span_type="web",
20852085
parent_name="aws.eventbridge",

0 commit comments

Comments
 (0)