|
4 | 4 | # Copyright 2019 Datadog, Inc. |
5 | 5 |
|
6 | 6 | import logging |
| 7 | +import os |
7 | 8 |
|
8 | 9 | from aws_xray_sdk.core import xray_recorder |
9 | 10 | from aws_xray_sdk.core.lambda_launcher import LambdaContext |
10 | 11 |
|
11 | | -from ddtrace import patch, tracer |
12 | 12 | from datadog_lambda.constants import ( |
13 | 13 | SamplingPriority, |
14 | 14 | TraceHeader, |
15 | 15 | XraySubsegment, |
16 | 16 | Source, |
17 | 17 | ) |
18 | | -from datadog_lambda.trace_wrapper import trace_wrapper |
| 18 | +from ddtrace import tracer, patch |
19 | 19 |
|
20 | 20 | logger = logging.getLogger(__name__) |
21 | 21 |
|
22 | 22 | dd_trace_context = {} |
| 23 | +dd_native_tracing_enabled = ( |
| 24 | + os.environ.get("DD_TRACE_ENABLED", "false").lower() == "true" |
| 25 | +) |
23 | 26 |
|
24 | 27 |
|
25 | 28 | def _convert_xray_trace_id(xray_trace_id): |
@@ -60,11 +63,26 @@ def _get_xray_trace_context(): |
60 | 63 | } |
61 | 64 |
|
62 | 65 |
|
| 66 | +def _get_dd_trace_native_context(): |
| 67 | + span = tracer.current_span() |
| 68 | + if not span: |
| 69 | + return None |
| 70 | + |
| 71 | + parent_id = span.context.span_id |
| 72 | + trace_id = span.context.trace_id |
| 73 | + return { |
| 74 | + "parent_id": str(parent_id), |
| 75 | + "trace_id": str(trace_id), |
| 76 | + "sampling_priority": SamplingPriority.AUTO_KEEP, |
| 77 | + "source": Source.DDTRACE, |
| 78 | + } |
| 79 | + |
| 80 | + |
63 | 81 | def _context_obj_to_headers(obj): |
64 | 82 | return { |
65 | | - TraceHeader.TRACE_ID: str(obj.get("trace_id")), |
66 | | - TraceHeader.PARENT_ID: str(obj.get("parent_id")), |
67 | | - TraceHeader.SAMPLING_PRIORITY: str(obj.get("sampling_priority")), |
| 83 | + TraceHeader.TRACE_ID: str(obj.get("trace-id")), |
| 84 | + TraceHeader.PARENT_ID: str(obj.get("parent-id")), |
| 85 | + TraceHeader.SAMPLING_PRIORITY: str(obj.get("sampling-priority")), |
68 | 86 | } |
69 | 87 |
|
70 | 88 |
|
@@ -122,10 +140,11 @@ def get_dd_trace_context(): |
122 | 140 | """ |
123 | 141 | global dd_trace_context |
124 | 142 |
|
125 | | - native_trace_context = trace_wrapper.trace_context |
126 | | - if native_trace_context: |
127 | | - logger.info("get_dd_trace_context using dd-trace context") |
128 | | - return _context_obj_to_headers(native_trace_context) |
| 143 | + if dd_native_tracing_enabled: |
| 144 | + native_trace_context = _get_dd_trace_native_context() |
| 145 | + if native_trace_context is not None: |
| 146 | + logger.info("get_dd_trace_context using dd-trace context") |
| 147 | + return _context_obj_to_headers(native_trace_context) |
129 | 148 |
|
130 | 149 | try: |
131 | 150 | trace_headers = _context_obj_to_headers(dd_trace_context) |
@@ -155,6 +174,9 @@ def set_correlation_ids(): |
155 | 174 | if not is_lambda_context(): |
156 | 175 | logger.debug("set_correlation_ids is only supported in LambdaContext") |
157 | 176 | return |
| 177 | + if dd_native_tracing_enabled: |
| 178 | + logger.debug("using ddtrace implementation for spans") |
| 179 | + return |
158 | 180 |
|
159 | 181 | context = get_dd_trace_context() |
160 | 182 |
|
|
0 commit comments