Skip to content

Commit e27f210

Browse files
committed
Add cold_start_trace_skip_lib.
1 parent 610e85a commit e27f210

File tree

4 files changed

+49
-37
lines changed

4 files changed

+49
-37
lines changed

datadog_lambda/config.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,26 @@ def as_bool(val):
3737
return val.lower() == "true" or val == "1"
3838

3939

40+
def as_list(val):
41+
if isinstance(val, str):
42+
if not val:
43+
return []
44+
return [val.strip() for val in val.split(",") if val.strip()]
45+
return val
46+
47+
4048
class Config:
4149

4250
service = _get_env("DD_SERVICE")
4351
env = _get_env("DD_ENV")
4452

4553
cold_start_tracing = _get_env("DD_COLD_START_TRACING", "true", as_bool)
4654
min_cold_start_trace_duration = _get_env("DD_MIN_COLD_START_DURATION", 3, int)
55+
cold_start_trace_skip_lib = _get_env(
56+
"DD_COLD_START_TRACE_SKIP_LIB", [
57+
"ddtrace.internal.compat",
58+
"ddtrace.filters",
59+
], as_list)
4760

4861
capture_payload_max_depth = _get_env("DD_CAPTURE_LAMBDA_PAYLOAD_MAX_DEPTH", 10, int)
4962
capture_payload_enabled = _get_env("DD_CAPTURE_LAMBDA_PAYLOAD", "false", as_bool)

datadog_lambda/wrapper.py

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@
6060
DD_ENCODE_AUTHORIZER_CONTEXT = "DD_ENCODE_AUTHORIZER_CONTEXT"
6161
DD_DECODE_AUTHORIZER_CONTEXT = "DD_DECODE_AUTHORIZER_CONTEXT"
6262
DD_COLD_START_TRACING = "DD_COLD_START_TRACING"
63-
DD_COLD_START_TRACE_SKIP_LIB = "DD_COLD_START_TRACE_SKIP_LIB"
6463
DD_REQUESTS_SERVICE_NAME = "DD_REQUESTS_SERVICE_NAME"
6564
DD_SERVICE = "DD_SERVICE"
6665
DD_ENV = "DD_ENV"
@@ -139,17 +138,6 @@ def __init__(self, func):
139138
self.cold_start_tracing = depends_on_dd_tracing_enabled(
140139
os.environ.get(DD_COLD_START_TRACING, "true").lower() == "true"
141140
)
142-
self.cold_start_trace_skip_lib = [
143-
"ddtrace.internal.compat",
144-
"ddtrace.filters",
145-
]
146-
if DD_COLD_START_TRACE_SKIP_LIB in os.environ:
147-
try:
148-
self.cold_start_trace_skip_lib = os.environ[
149-
DD_COLD_START_TRACE_SKIP_LIB
150-
].split(",")
151-
except Exception:
152-
logger.debug(f"Malformatted for env {DD_COLD_START_TRACE_SKIP_LIB}")
153141
self.response = None
154142
if config.profiling_enabled:
155143
self.prof = profiler.Profiler(env=config.env, service=config.service)
@@ -334,7 +322,7 @@ def _after(self, event, context):
334322
following_span.start_ns,
335323
trace_ctx,
336324
config.min_cold_start_trace_duration,
337-
self.cold_start_trace_skip_lib,
325+
config.cold_start_trace_skip_lib,
338326
).trace()
339327
except Exception as e:
340328
logger.debug("Failed to create cold start spans. %s", e)

tests/test_config.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,16 @@ def set_env(key, value):
192192
("DD_LOCAL_TEST", "local_test", "1", True), # CHANGED
193193
("DD_LOCAL_TEST", "local_test", "0", False),
194194
("DD_LOCAL_TEST", "local_test", "purple", False),
195+
("DD_COLD_START_TRACE_SKIP_LIB", "cold_start_trace_skip_lib", None, ["ddtrace.internal.compat", "ddtrace.filters"]),
196+
("DD_COLD_START_TRACE_SKIP_LIB", "cold_start_trace_skip_lib", "", []),
197+
("DD_COLD_START_TRACE_SKIP_LIB", "cold_start_trace_skip_lib", " ", []),
198+
("DD_COLD_START_TRACE_SKIP_LIB", "cold_start_trace_skip_lib", ",", []),
199+
("DD_COLD_START_TRACE_SKIP_LIB", "cold_start_trace_skip_lib", " , ", []),
200+
("DD_COLD_START_TRACE_SKIP_LIB", "cold_start_trace_skip_lib", "a", ["a"]),
201+
("DD_COLD_START_TRACE_SKIP_LIB", "cold_start_trace_skip_lib", "a,", ["a"]),
202+
("DD_COLD_START_TRACE_SKIP_LIB", "cold_start_trace_skip_lib", "a, ", ["a"]),
203+
("DD_COLD_START_TRACE_SKIP_LIB", "cold_start_trace_skip_lib", "a,b", ["a", "b"]),
204+
("DD_COLD_START_TRACE_SKIP_LIB", "cold_start_trace_skip_lib", "a, b", ["a", "b"]),
195205
)
196206

197207

tests/test_wrapper.py

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -641,39 +641,40 @@ def handler(event, context):
641641

642642

643643
class TestLambdaWrapperFlushExtension(unittest.TestCase):
644-
def setUp(self):
645-
self.orig_environ = os.environ
644+
@patch("datadog_lambda.config.Config.local_test", True)
645+
@patch("datadog_lambda.wrapper.should_use_extension", True)
646+
def test_local_test_true_flushing(self):
647+
flushes = []
648+
lambda_event = {}
649+
lambda_context = get_mock_context()
646650

647-
def tearDown(self):
648-
os.environ = self.orig_environ
651+
def flush():
652+
flushes.append(1)
649653

654+
@patch("datadog_lambda.wrapper.flush_extension", flush)
655+
@wrapper.datadog_lambda_wrapper
656+
def lambda_handler(event, context):
657+
pass
658+
659+
lambda_handler(lambda_event, lambda_context)
660+
661+
self.assertEqual(len(flushes), 1)
662+
663+
@patch("datadog_lambda.config.Config.local_test", False)
650664
@patch("datadog_lambda.wrapper.should_use_extension", True)
651-
def test_local_test_envvar_flushing(self):
665+
def test_local_test_false_flushing(self):
652666
flushes = []
653667
lambda_event = {}
654668
lambda_context = get_mock_context()
655669

656670
def flush():
657671
flushes.append(1)
658672

659-
for environ, flush_called in (
660-
({"DD_LOCAL_TEST": "True"}, True),
661-
({"DD_LOCAL_TEST": "true"}, True),
662-
({"DD_LOCAL_TEST": "1"}, True),
663-
({"DD_LOCAL_TEST": "False"}, False),
664-
({"DD_LOCAL_TEST": "false"}, False),
665-
({"DD_LOCAL_TEST": "0"}, False),
666-
({"DD_LOCAL_TEST": ""}, False),
667-
({}, False),
668-
):
669-
os.environ = environ
670-
flushes.clear()
671-
672-
@patch("datadog_lambda.wrapper.flush_extension", flush)
673-
@wrapper.datadog_lambda_wrapper
674-
def lambda_handler(event, context):
675-
pass
673+
@patch("datadog_lambda.wrapper.flush_extension", flush)
674+
@wrapper.datadog_lambda_wrapper
675+
def lambda_handler(event, context):
676+
pass
676677

677-
lambda_handler(lambda_event, lambda_context)
678+
lambda_handler(lambda_event, lambda_context)
678679

679-
self.assertEqual(flush_called, len(flushes) == 1)
680+
self.assertEqual(len(flushes), 0)

0 commit comments

Comments
 (0)