Skip to content

Commit c1eb928

Browse files
authored
fix(tracer): add warm start annotation (ColdStart=False) (#851)
1 parent c3f6298 commit c1eb928

File tree

2 files changed

+27
-7
lines changed

2 files changed

+27
-7
lines changed

aws_lambda_powertools/tracing/tracer.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -304,9 +304,10 @@ def handler(event, context):
304304
def decorate(event, context, **kwargs):
305305
with self.provider.in_subsegment(name=f"## {lambda_handler_name}") as subsegment:
306306
global is_cold_start
307+
logger.debug("Annotating cold start")
308+
subsegment.put_annotation(key="ColdStart", value=is_cold_start)
309+
307310
if is_cold_start:
308-
logger.debug("Annotating cold start")
309-
subsegment.put_annotation(key="ColdStart", value=True)
310311
is_cold_start = False
311312

312313
try:

tests/unit/test_tracing.py

+24-5
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ def patch(self, *args, **kwargs):
5151
def reset_tracing_config(mocker):
5252
Tracer._reset_config()
5353
# reset global cold start module
54-
mocker.patch("aws_lambda_powertools.tracing.tracer.is_cold_start", return_value=True)
54+
mocker.patch(
55+
"aws_lambda_powertools.tracing.tracer.is_cold_start", new_callable=mocker.PropertyMock(return_value=True)
56+
)
5557
yield
5658

5759

@@ -79,7 +81,7 @@ class InSubsegment(NamedTuple):
7981
yield in_subsegment
8082

8183

82-
def test_tracer_lambda_handler(mocker, dummy_response, provider_stub, in_subsegment_mock):
84+
def test_tracer_lambda_handler_subsegment(mocker, dummy_response, provider_stub, in_subsegment_mock):
8385
# GIVEN Tracer is initialized with booking as the service name
8486
provider = provider_stub(in_subsegment=in_subsegment_mock.in_subsegment)
8587
tracer = Tracer(provider=provider, service="booking")
@@ -92,15 +94,13 @@ def handler(event, context):
9294
handler({}, mocker.MagicMock())
9395

9496
# THEN we should have a subsegment named handler
95-
# annotate cold start, and add its response as trace metadata
97+
# add its response as trace metadata
9698
# and use service name as a metadata namespace
9799
assert in_subsegment_mock.in_subsegment.call_count == 1
98100
assert in_subsegment_mock.in_subsegment.call_args == mocker.call(name="## handler")
99101
assert in_subsegment_mock.put_metadata.call_args == mocker.call(
100102
key="handler response", value=dummy_response, namespace="booking"
101103
)
102-
assert in_subsegment_mock.put_annotation.call_count == 1
103-
assert in_subsegment_mock.put_annotation.call_args == mocker.call(key="ColdStart", value=True)
104104

105105

106106
def test_tracer_method(mocker, dummy_response, provider_stub, in_subsegment_mock):
@@ -571,3 +571,22 @@ def greeting(name, message):
571571

572572
# THEN we should not add any metadata
573573
assert in_subsegment_mock.put_metadata.call_count == 0
574+
575+
576+
def test_tracer_lambda_handler_cold_start(mocker, dummy_response, provider_stub, in_subsegment_mock):
577+
# GIVEN
578+
provider = provider_stub(in_subsegment=in_subsegment_mock.in_subsegment)
579+
tracer = Tracer(provider=provider, service="booking")
580+
581+
# WHEN
582+
@tracer.capture_lambda_handler
583+
def handler(event, context):
584+
return dummy_response
585+
586+
handler({}, mocker.MagicMock())
587+
588+
# THEN
589+
assert in_subsegment_mock.put_annotation.call_args == mocker.call(key="ColdStart", value=True)
590+
591+
handler({}, mocker.MagicMock())
592+
assert in_subsegment_mock.put_annotation.call_args == mocker.call(key="ColdStart", value=False)

0 commit comments

Comments
 (0)