Skip to content

Commit b9b1d63

Browse files
authored
Parse function version from function arn (#69)
* Parse function version from function arn * Add unit tests for create_function_execution_span * Show what's wrong with format * Fix formatting issues * Default function version to $Latest * $Latest to $LATEST * $Latest to $LATEST
1 parent 16eba03 commit b9b1d63

File tree

3 files changed

+47
-2
lines changed

3 files changed

+47
-2
lines changed

datadog_lambda/tracing.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,9 +239,13 @@ def create_function_execution_span(
239239
tags = {}
240240
if context:
241241
function_arn = (context.invoked_function_arn or "").lower()
242+
tk = function_arn.split(":")
243+
function_arn = ":".join(tk[0:7]) if len(tk) > 7 else function_arn
244+
function_version = tk[7] if len(tk) > 7 else "$LATEST"
242245
tags = {
243246
"cold_start": str(is_cold_start).lower(),
244247
"function_arn": function_arn,
248+
"function_version": function_version,
245249
"request_id": context.aws_request_id,
246250
"resource_names": context.function_name,
247251
}

scripts/check_format.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ if [ "$PYTHON_VERSION" = "2" ]; then
88
fi
99
pip install -Iv black==19.10b0
1010

11-
python -m black --check datadog_lambda/
12-
python -m black --check tests
11+
python -m black --check datadog_lambda/ --diff
12+
python -m black --check tests --diff
1313

1414

1515

tests/test_tracing.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,30 @@
1010
from datadog_lambda.constants import SamplingPriority, TraceHeader, XraySubsegment
1111
from datadog_lambda.tracing import (
1212
extract_dd_trace_context,
13+
create_function_execution_span,
1314
get_dd_trace_context,
1415
set_correlation_ids,
1516
_convert_xray_trace_id,
1617
_convert_xray_entity_id,
1718
_convert_xray_sampling,
1819
)
1920

21+
function_arn = "arn:aws:lambda:us-west-1:123457598159:function:python-layer-test"
22+
23+
24+
def get_mock_context(
25+
aws_request_id="request-id-1",
26+
memory_limit_in_mb="256",
27+
invoked_function_arn=function_arn,
28+
function_version="1",
29+
):
30+
lambda_context = MagicMock()
31+
lambda_context.aws_request_id = aws_request_id
32+
lambda_context.memory_limit_in_mb = memory_limit_in_mb
33+
lambda_context.invoked_function_arn = invoked_function_arn
34+
lambda_context.function_version = function_version
35+
return lambda_context
36+
2037

2138
class TestExtractAndGetDDTraceContext(unittest.TestCase):
2239
def setUp(self):
@@ -195,3 +212,27 @@ def test_set_correlation_ids(self):
195212
trace_id, span_id = get_correlation_ids()
196213
self.assertEqual(trace_id, "123")
197214
self.assertEqual(span_id, "456")
215+
216+
217+
class TestFunctionSpanTags(unittest.TestCase):
218+
def test_function(self):
219+
ctx = get_mock_context()
220+
span = create_function_execution_span(ctx, "", False, {"source": ""}, False)
221+
self.assertEqual(span.get_tag("function_arn"), function_arn)
222+
self.assertEqual(span.get_tag("function_version"), "$LATEST")
223+
224+
def test_function_with_version(self):
225+
function_version = "1"
226+
ctx = get_mock_context(
227+
invoked_function_arn=function_arn + ":" + function_version
228+
)
229+
span = create_function_execution_span(ctx, "", False, {"source": ""}, False)
230+
self.assertEqual(span.get_tag("function_arn"), function_arn)
231+
self.assertEqual(span.get_tag("function_version"), function_version)
232+
233+
def test_function_with_alias(self):
234+
function_alias = "alias"
235+
ctx = get_mock_context(invoked_function_arn=function_arn + ":" + function_alias)
236+
span = create_function_execution_span(ctx, "", False, {"source": ""}, False)
237+
self.assertEqual(span.get_tag("function_arn"), function_arn)
238+
self.assertEqual(span.get_tag("function_version"), function_alias)

0 commit comments

Comments
 (0)