Skip to content

Commit adfe3ec

Browse files
committed
Add make_inferred_span.
1 parent 2dfd8ad commit adfe3ec

4 files changed

Lines changed: 37 additions & 21 deletions

File tree

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
@@ -129,9 +129,6 @@ def __init__(self, func):
129129
depends_on_dd_tracing_enabled = (
130130
lambda original_boolean: config.trace_enabled and original_boolean
131131
)
132-
self.make_inferred_span = depends_on_dd_tracing_enabled(
133-
os.environ.get(DD_TRACE_MANAGED_SERVICES, "true").lower() == "true"
134-
)
135132
self.encode_authorizer_context = depends_on_dd_tracing_enabled(
136133
os.environ.get(DD_ENCODE_AUTHORIZER_CONTEXT, "true").lower() == "true"
137134
)
@@ -269,7 +266,7 @@ def _before(self, event, context):
269266

270267
if config.trace_enabled:
271268
set_dd_trace_py_root(trace_context_source, config.merge_xray_traces)
272-
if self.make_inferred_span:
269+
if config.make_inferred_span:
273270
self.inferred_span = create_inferred_span(
274271
event, context, event_source, self.decode_authorizer_context
275272
)

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
@@ -510,6 +510,7 @@ def lambda_handler(event, context):
510510
self.assertEqual(os.environ.get("DD_REQUESTS_SERVICE_NAME"), "myAwesomeService")
511511
del os.environ["DD_SERVICE"]
512512

513+
@patch("datadog_lambda.config.Config.make_inferred_span", False)
513514
def test_encode_authorizer_span(self):
514515
@wrapper.datadog_lambda_wrapper
515516
def lambda_handler(event, context):
@@ -536,7 +537,6 @@ def lambda_handler(event, context):
536537
trace_ctx.sampling_priority = 1
537538
test_span.finish()
538539
lambda_handler.inferred_span = test_span
539-
lambda_handler.make_inferred_span = False
540540
result = lambda_handler(lambda_event, lambda_context)
541541
raw_inject_data = result["context"]["_datadog"]
542542
self.assertIsInstance(raw_inject_data, str)
@@ -622,11 +622,9 @@ def lambda_handler(event, context):
622622
class TestLambdaDecoratorSettings(unittest.TestCase):
623623
@patch("datadog_lambda.config.Config.trace_enabled", False)
624624
def test_some_envs_should_depend_on_dd_tracing_enabled(self):
625-
os.environ[wrapper.DD_TRACE_MANAGED_SERVICES] = "true"
626625
os.environ[wrapper.DD_ENCODE_AUTHORIZER_CONTEXT] = "true"
627626
os.environ[wrapper.DD_DECODE_AUTHORIZER_CONTEXT] = "true"
628627
decorator = wrapper._LambdaDecorator(func=None)
629-
self.assertFalse(decorator.make_inferred_span)
630628
self.assertFalse(decorator.encode_authorizer_context)
631629
self.assertFalse(decorator.decode_authorizer_context)
632630

0 commit comments

Comments
 (0)