datadog_lambda 6.100.0__py3-none-any.whl → 6.102.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- datadog_lambda/span_pointers.py +67 -24
- datadog_lambda/tracing.py +4 -1
- datadog_lambda/version.py +1 -1
- {datadog_lambda-6.100.0.dist-info → datadog_lambda-6.102.0.dist-info}/METADATA +2 -2
- {datadog_lambda-6.100.0.dist-info → datadog_lambda-6.102.0.dist-info}/RECORD +9 -9
- {datadog_lambda-6.100.0.dist-info → datadog_lambda-6.102.0.dist-info}/LICENSE +0 -0
- {datadog_lambda-6.100.0.dist-info → datadog_lambda-6.102.0.dist-info}/LICENSE-3rdparty.csv +0 -0
- {datadog_lambda-6.100.0.dist-info → datadog_lambda-6.102.0.dist-info}/NOTICE +0 -0
- {datadog_lambda-6.100.0.dist-info → datadog_lambda-6.102.0.dist-info}/WHEEL +0 -0
datadog_lambda/span_pointers.py
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
from itertools import chain
|
|
2
2
|
import logging
|
|
3
|
+
import os
|
|
3
4
|
from typing import List
|
|
5
|
+
from typing import Optional
|
|
4
6
|
|
|
5
|
-
from ddtrace._trace.utils_botocore.span_pointers.dynamodb import (
|
|
6
|
-
_aws_dynamodb_item_span_pointer_description,
|
|
7
|
-
)
|
|
8
|
-
from ddtrace._trace.utils_botocore.span_pointers.s3 import (
|
|
9
|
-
_aws_s3_object_span_pointer_description,
|
|
10
|
-
)
|
|
11
7
|
from ddtrace._trace._span_pointer import _SpanPointerDirection
|
|
12
8
|
from ddtrace._trace._span_pointer import _SpanPointerDescription
|
|
13
9
|
from datadog_lambda.trigger import EventTypes
|
|
@@ -16,19 +12,26 @@ from datadog_lambda.trigger import EventTypes
|
|
|
16
12
|
logger = logging.getLogger(__name__)
|
|
17
13
|
|
|
18
14
|
|
|
15
|
+
dd_botocore_add_span_pointers = os.environ.get(
|
|
16
|
+
"DD_BOTOCORE_ADD_SPAN_POINTERS", "true"
|
|
17
|
+
).lower() in ("true", "1")
|
|
18
|
+
|
|
19
|
+
|
|
19
20
|
def calculate_span_pointers(
|
|
20
21
|
event_source,
|
|
21
22
|
event,
|
|
23
|
+
botocore_add_span_pointers=dd_botocore_add_span_pointers,
|
|
22
24
|
) -> List[_SpanPointerDescription]:
|
|
23
25
|
try:
|
|
24
|
-
if
|
|
25
|
-
|
|
26
|
+
if botocore_add_span_pointers:
|
|
27
|
+
if event_source.equals(EventTypes.S3):
|
|
28
|
+
return _calculate_s3_span_pointers_for_event(event)
|
|
26
29
|
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
elif event_source.equals(EventTypes.DYNAMODB):
|
|
31
|
+
return _calculate_dynamodb_span_pointers_for_event(event)
|
|
29
32
|
|
|
30
33
|
except Exception as e:
|
|
31
|
-
logger.
|
|
34
|
+
logger.debug(
|
|
32
35
|
"failed to calculate span pointers for event: %s",
|
|
33
36
|
e,
|
|
34
37
|
)
|
|
@@ -73,24 +76,42 @@ def _calculate_s3_span_pointers_for_object_created_s3_information(
|
|
|
73
76
|
etag = s3_information["object"]["eTag"]
|
|
74
77
|
|
|
75
78
|
except KeyError as e:
|
|
76
|
-
logger.
|
|
79
|
+
logger.debug(
|
|
77
80
|
"missing s3 information required to make a span pointer: %s",
|
|
78
81
|
e,
|
|
79
82
|
)
|
|
80
83
|
return []
|
|
81
84
|
|
|
82
85
|
try:
|
|
83
|
-
|
|
84
|
-
_aws_s3_object_span_pointer_description
|
|
86
|
+
from ddtrace._trace.utils_botocore.span_pointers.s3 import (
|
|
87
|
+
_aws_s3_object_span_pointer_description,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
try:
|
|
91
|
+
span_pointer_description = _aws_s3_object_span_pointer_description(
|
|
92
|
+
operation="S3.LambdaEvent",
|
|
93
|
+
pointer_direction=_SpanPointerDirection.UPSTREAM,
|
|
94
|
+
bucket=bucket,
|
|
95
|
+
key=key,
|
|
96
|
+
etag=etag,
|
|
97
|
+
)
|
|
98
|
+
except TypeError:
|
|
99
|
+
# The older version of this function did not have an operation
|
|
100
|
+
# parameter.
|
|
101
|
+
span_pointer_description = _aws_s3_object_span_pointer_description(
|
|
85
102
|
pointer_direction=_SpanPointerDirection.UPSTREAM,
|
|
86
103
|
bucket=bucket,
|
|
87
104
|
key=key,
|
|
88
105
|
etag=etag,
|
|
89
106
|
)
|
|
90
|
-
|
|
107
|
+
|
|
108
|
+
if span_pointer_description is None:
|
|
109
|
+
return []
|
|
110
|
+
|
|
111
|
+
return [span_pointer_description]
|
|
91
112
|
|
|
92
113
|
except Exception as e:
|
|
93
|
-
logger.
|
|
114
|
+
logger.debug(
|
|
94
115
|
"failed to generate S3 span pointer: %s",
|
|
95
116
|
e,
|
|
96
117
|
)
|
|
@@ -114,33 +135,53 @@ def _calculate_dynamodb_span_pointers_for_event_record(
|
|
|
114
135
|
) -> List[_SpanPointerDescription]:
|
|
115
136
|
try:
|
|
116
137
|
table_name = _extract_table_name_from_dynamodb_stream_record(record)
|
|
138
|
+
if table_name is None:
|
|
139
|
+
return []
|
|
140
|
+
|
|
117
141
|
primary_key = record["dynamodb"]["Keys"]
|
|
118
142
|
|
|
119
143
|
except Exception as e:
|
|
120
|
-
logger.
|
|
144
|
+
logger.debug(
|
|
121
145
|
"missing DynamoDB information required to make a span pointer: %s",
|
|
122
146
|
e,
|
|
123
147
|
)
|
|
124
148
|
return []
|
|
125
149
|
|
|
126
150
|
try:
|
|
127
|
-
|
|
128
|
-
_aws_dynamodb_item_span_pointer_description
|
|
151
|
+
from ddtrace._trace.utils_botocore.span_pointers.dynamodb import (
|
|
152
|
+
_aws_dynamodb_item_span_pointer_description,
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
try:
|
|
156
|
+
span_pointer_description = _aws_dynamodb_item_span_pointer_description(
|
|
157
|
+
operation="DynamoDB.LambdaEvent",
|
|
158
|
+
pointer_direction=_SpanPointerDirection.UPSTREAM,
|
|
159
|
+
table_name=table_name,
|
|
160
|
+
primary_key=primary_key,
|
|
161
|
+
)
|
|
162
|
+
except TypeError:
|
|
163
|
+
# The older version of this function did not have an operation
|
|
164
|
+
# parameter.
|
|
165
|
+
span_pointer_description = _aws_dynamodb_item_span_pointer_description(
|
|
129
166
|
pointer_direction=_SpanPointerDirection.UPSTREAM,
|
|
130
167
|
table_name=table_name,
|
|
131
168
|
primary_key=primary_key,
|
|
132
169
|
)
|
|
133
|
-
|
|
170
|
+
|
|
171
|
+
if span_pointer_description is None:
|
|
172
|
+
return []
|
|
173
|
+
|
|
174
|
+
return [span_pointer_description]
|
|
134
175
|
|
|
135
176
|
except Exception as e:
|
|
136
|
-
logger.
|
|
177
|
+
logger.debug(
|
|
137
178
|
"failed to generate DynamoDB span pointer: %s",
|
|
138
179
|
e,
|
|
139
180
|
)
|
|
140
181
|
return []
|
|
141
182
|
|
|
142
183
|
|
|
143
|
-
def _extract_table_name_from_dynamodb_stream_record(record) -> str:
|
|
184
|
+
def _extract_table_name_from_dynamodb_stream_record(record) -> Optional[str]:
|
|
144
185
|
# Example eventSourceARN:
|
|
145
186
|
# arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2024-06-10T19:26:16.525
|
|
146
187
|
event_source_arn = record["eventSourceARN"]
|
|
@@ -149,10 +190,12 @@ def _extract_table_name_from_dynamodb_stream_record(record) -> str:
|
|
|
149
190
|
":", maxsplit=5
|
|
150
191
|
)
|
|
151
192
|
if _arn != "arn" or _aws != "aws" or _dynamodb != "dynamodb":
|
|
152
|
-
|
|
193
|
+
logger.debug("unexpected eventSourceARN format: %s", event_source_arn)
|
|
194
|
+
return None
|
|
153
195
|
|
|
154
196
|
[_table, table_name, _stream, _timestamp] = dynamodb_info.split("/")
|
|
155
197
|
if _table != "table" or _stream != "stream":
|
|
156
|
-
|
|
198
|
+
logger.debug("unexpected eventSourceARN format: %s", event_source_arn)
|
|
199
|
+
return None
|
|
157
200
|
|
|
158
201
|
return table_name
|
datadog_lambda/tracing.py
CHANGED
|
@@ -411,7 +411,10 @@ def is_legacy_lambda_step_function(event):
|
|
|
411
411
|
"""
|
|
412
412
|
Check if the event is a step function that called a legacy lambda
|
|
413
413
|
"""
|
|
414
|
-
event
|
|
414
|
+
if not isinstance(event, dict) or "Payload" not in event:
|
|
415
|
+
return False
|
|
416
|
+
|
|
417
|
+
event = event.get("Payload")
|
|
415
418
|
return "Execution" in event and "StateMachine" in event and "State" in event
|
|
416
419
|
|
|
417
420
|
|
datadog_lambda/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "6.
|
|
1
|
+
__version__ = "6.102.0"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: datadog_lambda
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.102.0
|
|
4
4
|
Summary: The Datadog AWS Lambda Library
|
|
5
5
|
Home-page: https://github.com/DataDog/datadog-lambda-python
|
|
6
6
|
License: Apache-2.0
|
|
@@ -19,7 +19,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
19
19
|
Provides-Extra: dev
|
|
20
20
|
Requires-Dist: boto3 (>=1.34.0,<2.0.0) ; extra == "dev"
|
|
21
21
|
Requires-Dist: datadog (>=0.41.0,<1.0.0)
|
|
22
|
-
Requires-Dist: ddtrace (>=2.
|
|
22
|
+
Requires-Dist: ddtrace (>=2.16.0)
|
|
23
23
|
Requires-Dist: flake8 (>=5.0.4,<6.0.0) ; extra == "dev"
|
|
24
24
|
Requires-Dist: pytest (>=8.0.0,<9.0.0) ; extra == "dev"
|
|
25
25
|
Requires-Dist: pytest-benchmark (>=4.0,<5.0) ; extra == "dev"
|
|
@@ -9,20 +9,20 @@ datadog_lambda/logger.py,sha256=nGxNMouF7wcjmoPsgivzzjNLvSy3WbGtKElxOvITZDg,766
|
|
|
9
9
|
datadog_lambda/metric.py,sha256=hxA5nmKkUKpoo13f0Z5Ug87F9A-fv1hP-l2fWYfq6ao,6276
|
|
10
10
|
datadog_lambda/module_name.py,sha256=5FmOCjjgjq78b6a83QePZZFmqahAoy9XHdUNWdq2D1Q,139
|
|
11
11
|
datadog_lambda/patch.py,sha256=6a-BqovSRKsU5hTQpzxgY-_bducT-UEVCLvd3fdxeWc,4710
|
|
12
|
-
datadog_lambda/span_pointers.py,sha256=
|
|
12
|
+
datadog_lambda/span_pointers.py,sha256=P0SBWcKnc6GNWHZ5VPuUgGojFC_pIkOkKt6SfEXRpUw,6142
|
|
13
13
|
datadog_lambda/stats_writer.py,sha256=SIac96wu45AxDOZ4GraCbK3r1RKr4AFgXcEPHg1VX0A,243
|
|
14
14
|
datadog_lambda/statsd_writer.py,sha256=F4SCJ6-J6YfvQNh0uQfAkP6QYiAtV3-MCsxz4QnaBBI,403
|
|
15
15
|
datadog_lambda/tag_object.py,sha256=cZ7W9Ae5k3YxLOZzN5Hu8UqvOKtq5AWARele0L18Gjs,2091
|
|
16
16
|
datadog_lambda/tags.py,sha256=wy6uH8eAGMn7cfZEdHpL9uEGoM85bVyyXhYwSQtfHHc,2532
|
|
17
17
|
datadog_lambda/thread_stats_writer.py,sha256=zOHdzdkQFCHnLU09CSYWsGq1optbTKzHVLcDXDjtiHU,2891
|
|
18
|
-
datadog_lambda/tracing.py,sha256=
|
|
18
|
+
datadog_lambda/tracing.py,sha256=_H-nilG6bUmiDobO3A5V_8byjlTVaa8-KKJWMN6EmSU,50421
|
|
19
19
|
datadog_lambda/trigger.py,sha256=3S7u-LBHxX-o2Ds8BAtXEQMNPXz-Av8OdWBQuozLl54,12445
|
|
20
|
-
datadog_lambda/version.py,sha256=
|
|
20
|
+
datadog_lambda/version.py,sha256=aiWn9nRTzBwTEQp9ElhvklO999AVnZiiuMG8X9ynB48,24
|
|
21
21
|
datadog_lambda/wrapper.py,sha256=xTOO-NhrndReagcPJ0Ab9Xd8NRMCqsgZH4bJ7mpQXnI,15972
|
|
22
22
|
datadog_lambda/xray.py,sha256=jvA4Fk76PLMgsjUoUZ7gp2otv53hFt39Nvso1ZNaivg,3749
|
|
23
|
-
datadog_lambda-6.
|
|
24
|
-
datadog_lambda-6.
|
|
25
|
-
datadog_lambda-6.
|
|
26
|
-
datadog_lambda-6.
|
|
27
|
-
datadog_lambda-6.
|
|
28
|
-
datadog_lambda-6.
|
|
23
|
+
datadog_lambda-6.102.0.dist-info/LICENSE,sha256=4yQmjpKp1MKL7DdRDPVHkKYc2W0aezm5SIDske8oAdM,11379
|
|
24
|
+
datadog_lambda-6.102.0.dist-info/LICENSE-3rdparty.csv,sha256=9CDAR1GKawwTbZkqt1RP0uwEcaRM3RhOeTB5tWXr8Ts,1381
|
|
25
|
+
datadog_lambda-6.102.0.dist-info/METADATA,sha256=L9v2c8sUDizBM3PsVXJ3zmcKq9uH_0GugpdcRasEDFY,7469
|
|
26
|
+
datadog_lambda-6.102.0.dist-info/NOTICE,sha256=Jue-d8mQ1ENIHDZdYc2-X8mVYtScXb8pzF1pTLN-kRc,141
|
|
27
|
+
datadog_lambda-6.102.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
28
|
+
datadog_lambda-6.102.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|