Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
c595f6c
Merge trigger code from feature branch only
Nov 3, 2021
e4711b7
fix dockerized tests
Nov 3, 2021
dfe1d75
UNKNOWN event types should return None string
Nov 3, 2021
e87c482
black
Nov 3, 2021
1314463
black
Nov 4, 2021
b6dc6a4
Make integration tests output valid JSON
Nov 4, 2021
e12f2e2
update integration tests
Nov 4, 2021
63aaa52
Fix misspelling in comment
Nov 4, 2021
3eaa36f
Actually update snapshots
Nov 4, 2021
417b326
fix a goof
Nov 9, 2021
a726103
black
Nov 11, 2021
b61dc94
Merge branch 'main' into chris.agocs/lambda_function_url_trigger_and_…
agocs Nov 11, 2021
a89a29f
black
Nov 16, 2021
5d89fa6
Get http status code for lambda function url invocations
Nov 17, 2021
e7d336c
update docstring
Nov 17, 2021
10b13d3
Set the service on a lambda function url to aws.lambda
Nov 17, 2021
d1c6a2d
Update integration tests and samples
Nov 18, 2021
453a96f
span->service
Nov 18, 2021
86da216
fix operation name for fn urls
Nov 19, 2021
6a0ae9c
Remove unused import
Nov 19, 2021
7051ea9
Add some newlines because I guess we're all running Apple ][s here
Nov 19, 2021
f1c2aeb
Remove span.name from the function execution span
agocs Nov 19, 2021
db775d2
remove blank line
agocs Nov 19, 2021
d5eb3ce
change upstream to parent_span part 1
agocs Nov 19, 2021
112eb9f
change upstream to parent_span part 2
agocs Nov 19, 2021
22af910
change upstream to parent_span part 3
agocs Nov 19, 2021
f94c16a
Update snapshots
Nov 19, 2021
384c092
Update datadog_lambda/trigger.py
agocs Nov 19, 2021
4a617f0
Update datadog_lambda/trigger.py
agocs Nov 19, 2021
311781e
Remove extension check for inferred spans
Nov 19, 2021
e1ae32d
Merge branch 'chris.agocs/lambda_function_url_trigger_and_span' of gi…
Nov 19, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions datadog_lambda/tracing.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
TraceContextSource,
XrayDaemon,
)
from datadog_lambda.trigger import parse_event_source, EventTypes
from datadog_lambda.xray import (
send_segment,
parse_xray_header,
Expand Down Expand Up @@ -377,13 +378,62 @@ def set_dd_trace_py_root(trace_context_source, merge_xray_traces):
)


def create_inferred_span(event, context, make_inferred_spans):
event_source = parse_event_source(event)
try:
if event_source.equals(EventTypes.LAMBDA_FUNCTION_URL):
logger.debug("Function URL event detected. Inferring a span")
return create_inferred_span_from_lambda_function_url_event(event, context)
if not make_inferred_spans:
return None
# the rest of the inferred span logic goes here
except Exception as e:
logger.debug(
"Unable to infer span. Detected type: {}. Reason: {}",
event_source.to_string(),
e,
)
return None
logger.debug("Unable to infer a span: unknown event type")
return None


def create_inferred_span_from_lambda_function_url_event(event, context):
domain = event["requestContext"]["domainName"]
path = event["rawPath"]
tags = {
"operation_name": "aws.lambda.url",
"http.url": domain + path,
"endpoint": path,
"http.method": event["requestContext"]["http"]["method"],
"resource_names": domain + path,
"request_id": context.aws_request_id,
"service": "aws.lambda",
}
request_time_epoch = event["requestContext"]["timeEpoch"]
args = {
"resource": domain + path,
"span_type": "http",
}
tracer.set_tags(
{"_dd.origin": "lambda"}
) # function urls don't count as lambda_inferred,
# because they're in the same service as the inferring lambda function
span = tracer.trace("aws.lambda.url", **args)
if span:
span.set_tags(tags)
span.start = request_time_epoch / 1000
return span


def create_function_execution_span(
context,
function_name,
is_cold_start,
trace_context_source,
merge_xray_traces,
trigger_tags,
parent_span=None,
):
tags = {}
if context:
Expand Down Expand Up @@ -415,4 +465,6 @@ def create_function_execution_span(
span = tracer.trace("aws.lambda", **args)
if span:
span.set_tags(tags)
if parent_span:
span.parent_id = parent_span.span_id
return span
Loading