Skip to content

Commit c5cc5f3

Browse files
committed
remove xray
1 parent 21fc337 commit c5cc5f3

File tree

6 files changed

+80
-140
lines changed

6 files changed

+80
-140
lines changed

LICENSE-3rdparty.csv

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
Component,Origin,License,Copyright
2-
aws-xray-sdk-python,github.com/aws/aws-xray-sdk-python,Apache-2.0,
32
flake8,gitlab.com/pycqa/flake8,MIT,"Copyright (C) 2011-2013 Tarek Ziade <[email protected]>. Copyright (C) 2012-2016 Ian Cordasco <[email protected]>."
43
nose2,github.com/nose-devs/nose2,BSD-2-Clause,"Copyright (c) 2012, Jason Pellerin. All rights reserved."
5-
requests,github.com/kennethreitz/requests,Apache-2.0,"Copyright 2018 Kenneth Reitz"
64
wrapt,github.com/GrahamDumpleton/wrapt,BSD-2-Clause,"Copyright (c) 2013-2019, Graham Dumpleton"

datadog_lambda/constants.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,7 @@ class TraceContextSource(object):
3434
XRAY = "xray"
3535
EVENT = "event"
3636
DDTRACE = "ddtrace"
37+
38+
39+
XRAY_TRACE_ID_HEADER_NAME = "_X_AMZN_TRACE_ID"
40+
FUNCTION_NAME_HEADER_NAME = "AWS_LAMBDA_FUNCTION_NAME"

datadog_lambda/tracing.py

Lines changed: 31 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,12 @@
77
import os
88
import json
99

10-
from aws_xray_sdk.core import xray_recorder
11-
from aws_xray_sdk.core.lambda_launcher import LambdaContext
1210
from datadog_lambda.constants import (
1311
SamplingPriority,
1412
TraceHeader,
1513
XraySubsegment,
1614
TraceContextSource,
15+
XRAY_TRACE_ID_HEADER_NAME
1716
)
1817
from ddtrace import tracer, patch
1918
from ddtrace import __version__ as ddtrace_version
@@ -54,19 +53,18 @@ def _convert_xray_sampling(xray_sampled):
5453

5554

5655
def _get_xray_trace_context():
57-
if not is_lambda_context():
56+
xray_trace_entity = _get_context_from_raw_xray_trace_id(os.environ.get(XRAY_TRACE_ID_HEADER_NAME,""))
57+
if xray_trace_entity is None:
5858
return None
59-
60-
xray_trace_entity = xray_recorder.get_trace_entity() # xray (sub)segment
6159
trace_context = {
62-
"trace-id": _convert_xray_trace_id(xray_trace_entity.trace_id),
63-
"parent-id": _convert_xray_entity_id(xray_trace_entity.id),
64-
"sampling-priority": _convert_xray_sampling(xray_trace_entity.sampled),
60+
"trace-id": _convert_xray_trace_id(xray_trace_entity.get("trace_id")),
61+
"parent-id": _convert_xray_entity_id(xray_trace_entity.get("id")),
62+
"sampling-priority": _convert_xray_sampling(xray_trace_entity.get("sampled")),
6563
}
6664
logger.debug(
6765
"Converted trace context %s from X-Ray segment %s",
6866
trace_context,
69-
(xray_trace_entity.trace_id, xray_trace_entity.id, xray_trace_entity.sampled),
67+
(xray_trace_entity.get("trace_id"), xray_trace_entity.get("id"), xray_trace_entity.get("sampled")),
7068
)
7169
return trace_context
7270

@@ -97,29 +95,28 @@ def _context_obj_to_headers(obj):
9795
TraceHeader.SAMPLING_PRIORITY: str(obj.get("sampling-priority")),
9896
}
9997

100-
101-
def create_dd_dummy_metadata_subsegment(
102-
subsegment_metadata_value, subsegment_metadata_key
103-
):
104-
"""
105-
Create a Datadog subsegment to pass the Datadog trace context or Lambda function
106-
tags into its metadata field, so the X-Ray trace can be converted to a Datadog
107-
trace in the Datadog backend with the correct context.
108-
"""
109-
try:
110-
xray_recorder.begin_subsegment(XraySubsegment.NAME)
111-
subsegment = xray_recorder.current_subsegment()
112-
subsegment.put_metadata(
113-
subsegment_metadata_key, subsegment_metadata_value, XraySubsegment.NAMESPACE
114-
)
115-
xray_recorder.end_subsegment()
116-
except Exception as e:
117-
logger.debug(
118-
"failed to create dd dummy metadata subsegment with error %s",
119-
e,
120-
exc_info=True,
121-
)
122-
98+
def _get_context_from_raw_xray_trace_id(raw_trace_id):
99+
#example : Root=1-5e272390-8c398be037738dc042009320;Parent=94ae789b969f1cc5;Sampled=1
100+
if len(raw_trace_id) == 0:
101+
return None
102+
parts = raw_trace_id.split(";")
103+
if len(parts) != 3:
104+
return None
105+
root = parts[0].replace("Root=", "")
106+
parent = parts[1].replace("Parent=", "")
107+
sampled = parts[2].replace("Sampled=", "")
108+
if len(root) == len(parts[0]) or len(parent) == len(parts[1]) or len(sampled) == len(parts[2]):
109+
return None
110+
print({
111+
"id": parent,
112+
"trace_id": root,
113+
"sampled": sampled,
114+
})
115+
return {
116+
"id": parent,
117+
"trace_id": root,
118+
"sampled": sampled,
119+
}
123120

124121
def extract_context_from_lambda_context(lambda_context):
125122
"""
@@ -301,6 +298,7 @@ def get_dd_trace_context():
301298
return _context_obj_to_headers(context) if context is not None else {}
302299

303300

301+
304302
def set_correlation_ids():
305303
"""
306304
Create a dummy span, and overrides its trace_id and span_id, to make
@@ -353,14 +351,8 @@ def inject_correlation_ids():
353351

354352
logger.debug("logs injection configured")
355353

356-
357354
def is_lambda_context():
358-
"""
359-
Return True if the X-Ray context is `LambdaContext`, rather than the
360-
regular `Context` (e.g., when testing lambda functions locally).
361-
"""
362-
return type(xray_recorder.context) == LambdaContext
363-
355+
return os.environ.get("FUNCTION_NAME_HEADER_NAME", "") != ""
364356

365357
def set_dd_trace_py_root(trace_context_source, merge_xray_traces):
366358
if trace_context_source == TraceContextSource.EVENT or merge_xray_traces:

datadog_lambda/wrapper.py

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
from datadog_lambda.extension import should_use_extension, flush_extension
1212
from datadog_lambda.cold_start import set_cold_start, is_cold_start
13-
from datadog_lambda.constants import XraySubsegment, TraceContextSource
1413
from datadog_lambda.metric import (
1514
flush_stats,
1615
submit_invocations_metric,
@@ -20,7 +19,6 @@
2019
from datadog_lambda.patch import patch_all
2120
from datadog_lambda.tracing import (
2221
extract_dd_trace_context,
23-
create_dd_dummy_metadata_subsegment,
2422
inject_correlation_ids,
2523
dd_tracing_enabled,
2624
set_correlation_ids,
@@ -140,11 +138,6 @@ def _before(self, event, context):
140138
dd_context, trace_context_source = extract_dd_trace_context(
141139
event, context, extractor=self.trace_extractor
142140
)
143-
# Create a Datadog X-Ray subsegment with the trace context
144-
if dd_context and trace_context_source == TraceContextSource.EVENT:
145-
create_dd_dummy_metadata_subsegment(
146-
dd_context, XraySubsegment.TRACE_KEY
147-
)
148141

149142
if dd_tracing_enabled:
150143
set_dd_trace_py_root(trace_context_source, self.merge_xray_traces)
@@ -168,12 +161,6 @@ def _after(self, event, context):
168161
status_code = extract_http_status_code_tag(self.trigger_tags, self.response)
169162
if status_code:
170163
self.trigger_tags["http.status_code"] = status_code
171-
# Create a new dummy Datadog subsegment for function trigger tags so we
172-
# can attach them to X-Ray spans when hybrid tracing is used
173-
if self.trigger_tags:
174-
create_dd_dummy_metadata_subsegment(
175-
self.trigger_tags, XraySubsegment.LAMBDA_FUNCTION_TAGS_KEY
176-
)
177164

178165
if not self.flush_to_log or should_use_extension:
179166
flush_stats()

setup.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
packages=["datadog_lambda"],
3030
python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4",
3131
install_requires=[
32-
"aws-xray-sdk==2.8.0",
3332
"datadog==0.41.0",
3433
"ddtrace==0.48.0",
3534
"wrapt==1.11.2",

0 commit comments

Comments
 (0)