Skip to content

Commit 8bd253d

Browse files
committed
Implement PR feedback
1 parent b40dcb6 commit 8bd253d

File tree

3 files changed

+47
-37
lines changed

3 files changed

+47
-37
lines changed

datadog_lambda/tracing.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,15 @@
1616
TraceContextSource,
1717
)
1818
from ddtrace import tracer, patch
19+
from ddtrace.propagation.http import HTTPPropagator
1920

2021
logger = logging.getLogger(__name__)
2122

2223
dd_trace_context = {}
2324
dd_tracing_enabled = os.environ.get("DD_TRACE_ENABLED", "false").lower() == "true"
2425

26+
propagator = HTTPPropagator()
27+
2528

2629
def _convert_xray_trace_id(xray_trace_id):
2730
"""
@@ -221,3 +224,36 @@ def is_lambda_context():
221224
regular `Context` (e.g., when testing lambda functions locally).
222225
"""
223226
return type(xray_recorder.context) == LambdaContext
227+
228+
229+
def create_function_execution_span(
230+
context,
231+
function_name,
232+
handler_name,
233+
is_cold_start,
234+
trace_context,
235+
merge_xray_traces,
236+
):
237+
span_context = None
238+
if trace_context["source"] == TraceContextSource.EVENT or merge_xray_traces:
239+
headers = get_dd_trace_context()
240+
span_context = propagator.extract(headers)
241+
242+
tags = {}
243+
if context:
244+
tags = {
245+
"cold_start": is_cold_start,
246+
"function_arn": context.invoked_function_arn,
247+
"request_id": context.aws_request_id,
248+
"resource_names": context.function_name,
249+
}
250+
args = {
251+
"service": function_name,
252+
"resource": handler_name,
253+
"span_type": "serverless",
254+
"child_of": span_context,
255+
}
256+
span = tracer.start_span("aws.lambda", **args)
257+
if span:
258+
span.set_tags(tags)
259+
return span

datadog_lambda/wrapper.py

Lines changed: 10 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,10 @@
1717
from datadog_lambda.tracing import (
1818
extract_dd_trace_context,
1919
inject_correlation_ids,
20-
get_dd_trace_context,
2120
dd_tracing_enabled,
2221
set_correlation_ids,
22+
create_function_execution_span,
2323
)
24-
from datadog_lambda.constants import TraceContextSource
25-
from ddtrace import tracer
26-
from ddtrace.propagation.http import HTTPPropagator
27-
2824

2925
logger = logging.getLogger(__name__)
3026

@@ -91,7 +87,6 @@ def __init__(self, func):
9187
)
9288
self.handler_name = os.environ.get("_HANDLER", "handler")
9389
self.function_name = os.environ.get("AWS_LAMBDA_FUNCTION_NAME", "function")
94-
self.propagator = HTTPPropagator()
9590

9691
# Inject trace correlation ids to logs
9792
if self.logs_injection:
@@ -126,7 +121,15 @@ def _before(self, event, context):
126121

127122
self.span = None
128123
if dd_tracing_enabled:
129-
self.span = self._create_dd_trace_py_span(context, dd_context)
124+
125+
self.span = create_function_execution_span(
126+
context,
127+
self.function_name,
128+
self.handler_name,
129+
is_cold_start(),
130+
dd_context,
131+
self.merge_xray_traces,
132+
)
130133
else:
131134
set_correlation_ids()
132135

@@ -144,33 +147,5 @@ def _after(self, event, context):
144147
except Exception:
145148
traceback.print_exc()
146149

147-
def _create_dd_trace_py_span(self, context, trace_context):
148-
span_context = None
149-
if (
150-
trace_context["source"] == TraceContextSource.EVENT
151-
or self.merge_xray_traces
152-
):
153-
headers = get_dd_trace_context()
154-
span_context = self.propagator.extract(headers)
155-
156-
tags = {}
157-
if context:
158-
tags = {
159-
"cold_start": is_cold_start(),
160-
"function_arn": context.invoked_function_arn,
161-
"request_id": context.aws_request_id,
162-
"resource_names": context.function_name,
163-
}
164-
args = {
165-
"service": self.function_name,
166-
"resource": self.handler_name,
167-
"span_type": "serverless",
168-
"child_of": span_context,
169-
}
170-
span = tracer.start_span("aws.lambda", **args)
171-
if span:
172-
span.set_tags(tags)
173-
return span
174-
175150

176151
datadog_lambda_wrapper = _LambdaDecorator

tests/Dockerfile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,4 @@ WORKDIR /test
88

99
# Install datadog-lambda with dev dependencies from local
1010
COPY . .
11-
RUN pip install .[dev]
12-
RUN pip install --find-links=https://s3.amazonaws.com/pypi.datadoghq.com/trace-dev/index.html ddtrace==0.35.1.dev5+g1e11b2dd -t .[dev]
11+
RUN pip install .[dev]

0 commit comments

Comments
 (0)