Skip to content

Commit 2437a53

Browse files
committed
Add make_inferred_span.
1 parent c8e8096 commit 2437a53

File tree

4 files changed

+37
-21
lines changed

4 files changed

+37
-21
lines changed

datadog_lambda/config.py

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,26 @@
99
logger = logging.getLogger(__name__)
1010

1111

12-
def _get_env(key, default=None, cast=None):
12+
def _get_env(key, default=None, cast=None, depends_on_tracing=False):
1313
@property
1414
def _getter(self):
1515
if not hasattr(self, prop_key):
16-
val = os.environ.get(key, default)
17-
if cast is not None:
18-
try:
19-
val = cast(val)
20-
except (ValueError, TypeError):
21-
logger.warning(
22-
"Failed to cast environment variable '%s' with value '%s' to type %s. Using default value '%s'.",
23-
key,
24-
val,
25-
cast.__name__,
26-
default,
27-
)
28-
val = default
16+
if depends_on_tracing and not config.trace_enabled:
17+
val = False
18+
else:
19+
val = os.environ.get(key, default)
20+
if cast is not None:
21+
try:
22+
val = cast(val)
23+
except (ValueError, TypeError):
24+
logger.warning(
25+
"Failed to cast environment variable '%s' with value '%s' to type %s. Using default value '%s'.",
26+
key,
27+
val,
28+
cast.__name__,
29+
default,
30+
)
31+
val = default
2932
setattr(self, prop_key, val)
3033
return getattr(self, prop_key)
3134

@@ -75,6 +78,9 @@ class Config:
7578
llmobs_enabled = _get_env("DD_LLMOBS_ENABLED", "false", as_bool)
7679
exception_replay_enabled = _get_env("DD_EXCEPTION_REPLAY_ENABLED", "false", as_bool)
7780

81+
make_inferred_span = _get_env("DD_TRACE_MANAGED_SERVICES", "true", as_bool,
82+
depends_on_tracing=True)
83+
7884
local_test = _get_env("DD_LOCAL_TEST", "false", as_bool)
7985

8086
@property

datadog_lambda/wrapper.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,6 @@ def __init__(self, func):
126126
depends_on_dd_tracing_enabled = (
127127
lambda original_boolean: config.trace_enabled and original_boolean
128128
)
129-
self.make_inferred_span = depends_on_dd_tracing_enabled(
130-
os.environ.get(DD_TRACE_MANAGED_SERVICES, "true").lower() == "true"
131-
)
132129
self.encode_authorizer_context = depends_on_dd_tracing_enabled(
133130
os.environ.get(DD_ENCODE_AUTHORIZER_CONTEXT, "true").lower() == "true"
134131
)
@@ -252,7 +249,7 @@ def _before(self, event, context):
252249

253250
if config.trace_enabled:
254251
set_dd_trace_py_root(trace_context_source, config.merge_xray_traces)
255-
if self.make_inferred_span:
252+
if config.make_inferred_span:
256253
self.inferred_span = create_inferred_span(
257254
event, context, event_source, self.decode_authorizer_context
258255
)

tests/test_config.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,21 @@ def test_config_from_environ(env_key, conf_key, env_val, conf_val, setenv):
109109
assert getattr(config, conf_key) == conf_val
110110

111111

112+
_test_config_from_environ_depends_on_tracing = (
113+
*_test_as_bool("DD_TRACE_MANAGED_SERVICES", "make_inferred_span", default=True),
114+
)
115+
116+
@pytest.mark.parametrize('env_key,conf_key,env_val,conf_val', _test_config_from_environ_depends_on_tracing)
117+
@pytest.mark.parametrize('trace_enabled', [True, False])
118+
def test_config_from_environ_depends_on_tracing(env_key, conf_key, env_val, conf_val, setenv, trace_enabled):
119+
setenv(env_key, env_val)
120+
setenv("DD_TRACE_ENABLED", "true" if trace_enabled else "false")
121+
if trace_enabled:
122+
assert getattr(config, conf_key) is conf_val
123+
else:
124+
assert getattr(config, conf_key) is False
125+
126+
112127
_test_fips_mode_from_environ = (
113128
(None, None, False),
114129
(None, "", False),

tests/test_wrapper.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,7 @@ def lambda_handler(event, context):
506506
self.assertEqual(os.environ.get("DD_REQUESTS_SERVICE_NAME"), "myAwesomeService")
507507
del os.environ["DD_SERVICE"]
508508

509+
@patch("datadog_lambda.config.Config.make_inferred_span", False)
509510
def test_encode_authorizer_span(self):
510511
@wrapper.datadog_lambda_wrapper
511512
def lambda_handler(event, context):
@@ -532,7 +533,6 @@ def lambda_handler(event, context):
532533
trace_ctx.sampling_priority = 1
533534
test_span.finish()
534535
lambda_handler.inferred_span = test_span
535-
lambda_handler.make_inferred_span = False
536536
result = lambda_handler(lambda_event, lambda_context)
537537
raw_inject_data = result["context"]["_datadog"]
538538
self.assertIsInstance(raw_inject_data, str)
@@ -562,11 +562,9 @@ def return_type_test(event, context):
562562
class TestLambdaDecoratorSettings(unittest.TestCase):
563563
@patch("datadog_lambda.config.Config.trace_enabled", False)
564564
def test_some_envs_should_depend_on_dd_tracing_enabled(self):
565-
os.environ[wrapper.DD_TRACE_MANAGED_SERVICES] = "true"
566565
os.environ[wrapper.DD_ENCODE_AUTHORIZER_CONTEXT] = "true"
567566
os.environ[wrapper.DD_DECODE_AUTHORIZER_CONTEXT] = "true"
568567
decorator = wrapper._LambdaDecorator(func=None)
569-
self.assertFalse(decorator.make_inferred_span)
570568
self.assertFalse(decorator.encode_authorizer_context)
571569
self.assertFalse(decorator.decode_authorizer_context)
572570

0 commit comments

Comments
 (0)