datadog_lambda 5.91.0__tar.gz → 5.92.0__tar.gz
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-5.91.0 → datadog_lambda-5.92.0}/PKG-INFO +1 -1
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/tracing.py +47 -21
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/wrapper.py +2 -8
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/pyproject.toml +1 -1
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/LICENSE +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/LICENSE-3rdparty.csv +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/NOTICE +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/README.md +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/__init__.py +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/api.py +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/cold_start.py +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/constants.py +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/dogstatsd.py +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/extension.py +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/handler.py +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/logger.py +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/metric.py +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/module_name.py +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/patch.py +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/stats_writer.py +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/statsd_writer.py +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/tag_object.py +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/tags.py +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/thread_stats_writer.py +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/trigger.py +0 -0
- {datadog_lambda-5.91.0 → datadog_lambda-5.92.0}/datadog_lambda/xray.py +0 -0
|
@@ -68,6 +68,8 @@ if dd_tracing_enabled:
|
|
|
68
68
|
|
|
69
69
|
propagator = HTTPPropagator()
|
|
70
70
|
|
|
71
|
+
DD_TRACE_JAVA_TRACE_ID_PADDING = "00000000"
|
|
72
|
+
|
|
71
73
|
|
|
72
74
|
def _convert_xray_trace_id(xray_trace_id):
|
|
73
75
|
"""
|
|
@@ -248,28 +250,52 @@ def extract_context_from_sqs_or_sns_event_or_context(event, lambda_context):
|
|
|
248
250
|
first_record.get("Sns", {}).get("MessageAttributes", {}),
|
|
249
251
|
)
|
|
250
252
|
dd_payload = msg_attributes.get("_datadog", {})
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
dd_payload.get(
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
dd_payload.get(
|
|
264
|
-
|
|
253
|
+
if dd_payload:
|
|
254
|
+
# SQS uses dataType and binaryValue/stringValue
|
|
255
|
+
# SNS uses Type and Value
|
|
256
|
+
dd_json_data = None
|
|
257
|
+
dd_json_data_type = dd_payload.get("Type", dd_payload.get("dataType", ""))
|
|
258
|
+
if dd_json_data_type == "Binary":
|
|
259
|
+
dd_json_data = dd_payload.get(
|
|
260
|
+
"binaryValue",
|
|
261
|
+
dd_payload.get("Value", r"{}"),
|
|
262
|
+
)
|
|
263
|
+
dd_json_data = base64.b64decode(dd_json_data)
|
|
264
|
+
elif dd_json_data_type == "String":
|
|
265
|
+
dd_json_data = dd_payload.get(
|
|
266
|
+
"stringValue",
|
|
267
|
+
dd_payload.get("Value", r"{}"),
|
|
268
|
+
)
|
|
269
|
+
else:
|
|
270
|
+
logger.debug(
|
|
271
|
+
"Datadog Lambda Python only supports extracting trace"
|
|
272
|
+
"context from String or Binary SQS/SNS message attributes"
|
|
273
|
+
)
|
|
274
|
+
|
|
275
|
+
if dd_json_data:
|
|
276
|
+
dd_data = json.loads(dd_json_data)
|
|
277
|
+
return propagator.extract(dd_data)
|
|
265
278
|
else:
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
279
|
+
# Handle case where trace context is injected into attributes.AWSTraceHeader
|
|
280
|
+
# example: Root=1-654321ab-000000001234567890abcdef;Parent=0123456789abcdef;Sampled=1
|
|
281
|
+
x_ray_header = first_record.get("attributes", {}).get("AWSTraceHeader")
|
|
282
|
+
if x_ray_header:
|
|
283
|
+
x_ray_context = parse_xray_header(x_ray_header)
|
|
284
|
+
trace_id_parts = x_ray_context.get("trace_id", "").split("-")
|
|
285
|
+
if len(trace_id_parts) > 2 and trace_id_parts[2].startswith(
|
|
286
|
+
DD_TRACE_JAVA_TRACE_ID_PADDING
|
|
287
|
+
):
|
|
288
|
+
# If it starts with eight 0's padding,
|
|
289
|
+
# then this AWSTraceHeader contains Datadog injected trace context
|
|
290
|
+
logger.debug(
|
|
291
|
+
"Found dd-trace injected trace context from AWSTraceHeader"
|
|
292
|
+
)
|
|
293
|
+
return Context(
|
|
294
|
+
trace_id=int(trace_id_parts[2][8:], 16),
|
|
295
|
+
span_id=int(int(x_ray_context["parent_id"], 16)),
|
|
296
|
+
sampling_priority=float(x_ray_context["sampled"]),
|
|
297
|
+
)
|
|
298
|
+
return extract_context_from_lambda_context(lambda_context)
|
|
273
299
|
except Exception as e:
|
|
274
300
|
logger.debug("The trace extractor returned with error %s", e)
|
|
275
301
|
return extract_context_from_lambda_context(lambda_context)
|
|
@@ -22,7 +22,6 @@ from datadog_lambda.constants import (
|
|
|
22
22
|
TraceContextSource,
|
|
23
23
|
XraySubsegment,
|
|
24
24
|
Headers,
|
|
25
|
-
TraceHeader,
|
|
26
25
|
)
|
|
27
26
|
from datadog_lambda.metric import (
|
|
28
27
|
flush_stats,
|
|
@@ -44,6 +43,7 @@ from datadog_lambda.tracing import (
|
|
|
44
43
|
InferredSpanInfo,
|
|
45
44
|
is_authorizer_response,
|
|
46
45
|
tracer,
|
|
46
|
+
propagator,
|
|
47
47
|
)
|
|
48
48
|
from datadog_lambda.trigger import (
|
|
49
49
|
extract_trigger_tags,
|
|
@@ -254,13 +254,7 @@ class _LambdaDecorator(object):
|
|
|
254
254
|
injected_headers = {}
|
|
255
255
|
source_span = self.inferred_span if self.inferred_span else self.span
|
|
256
256
|
span_context = source_span.context
|
|
257
|
-
|
|
258
|
-
injected_headers[TraceHeader.PARENT_ID] = str(span_context.span_id)
|
|
259
|
-
sampling_priority = span_context.sampling_priority
|
|
260
|
-
if sampling_priority is not None:
|
|
261
|
-
injected_headers[TraceHeader.SAMPLING_PRIORITY] = str(
|
|
262
|
-
span_context.sampling_priority
|
|
263
|
-
)
|
|
257
|
+
propagator.inject(span_context, injected_headers)
|
|
264
258
|
injected_headers[Headers.Parent_Span_Finish_Time] = finish_time_ns
|
|
265
259
|
if request_id is not None:
|
|
266
260
|
injected_headers[Headers.Authorizing_Request_Id] = request_id
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|