Skip to content

Commit 262dded

Browse files
committed
feat(config): enable telemetry when SCA is on independently from appsec
1 parent 1fac67c commit 262dded

File tree

4 files changed

+52
-25
lines changed

4 files changed

+52
-25
lines changed

datadog_lambda/__init__.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
1+
import datadog_lambda.config # noqa: F401 needs to be imported before `ddtrace`
12
from datadog_lambda.cold_start import initialize_cold_start_tracing
2-
import os
3-
4-
5-
if os.environ.get("DD_INSTRUMENTATION_TELEMETRY_ENABLED") is None:
6-
# Telemetry is required for Appsec Software Composition Analysis
7-
os.environ["DD_INSTRUMENTATION_TELEMETRY_ENABLED"] = os.environ.get(
8-
"DD_APPSEC_ENABLED", "false"
9-
)
103

114

125
initialize_cold_start_tracing()

datadog_lambda/config.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,6 @@ def _resolve_env(self, key, default=None, cast=None, depends_on_tracing=False):
8282
logs_injection = _get_env("DD_LOGS_INJECTION", "true", as_bool)
8383
merge_xray_traces = _get_env("DD_MERGE_XRAY_TRACES", "false", as_bool)
8484

85-
telemetry_enabled = _get_env(
86-
"DD_INSTRUMENTATION_TELEMETRY_ENABLED",
87-
"false",
88-
as_bool,
89-
depends_on_tracing=True,
90-
)
9185
otel_enabled = _get_env("DD_TRACE_OTEL_ENABLED", "false", as_bool)
9286
profiling_enabled = _get_env("DD_PROFILING_ENABLED", "false", as_bool)
9387
llmobs_enabled = _get_env("DD_LLMOBS_ENABLED", "false", as_bool)
@@ -96,6 +90,7 @@ def _resolve_env(self, key, default=None, cast=None, depends_on_tracing=False):
9690
"DD_DATA_STREAMS_ENABLED", "false", as_bool, depends_on_tracing=True
9791
)
9892
appsec_enabled = _get_env("DD_APPSEC_ENABLED", "false", as_bool)
93+
sca_enabled = _get_env("DD_APPSEC_SCA_ENABLED", "false", as_bool)
9994

10095
is_gov_region = _get_env("AWS_REGION", "", lambda x: x.startswith("us-gov-"))
10196

@@ -144,3 +139,11 @@ def _reset(self):
144139
"Python Lambda Layer FIPS mode is %s.",
145140
"enabled" if config.fips_mode_enabled else "not enabled",
146141
)
142+
143+
144+
if (
145+
"DD_INSTRUMENTATION_TELEMETRY_ENABLED" not in os.environ
146+
and not config.sca_enabled
147+
and not config.appsec_enabled
148+
):
149+
os.environ["DD_INSTRUMENTATION_TELEMETRY_ENABLED"] = "false"

datadog_lambda/tracing.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,6 @@
5555
logger = logging.getLogger(__name__)
5656

5757
dd_trace_context = None
58-
if config.telemetry_enabled:
59-
# Enable the telemetry client if the user has opted in
60-
from ddtrace.internal.telemetry import telemetry_writer
61-
62-
telemetry_writer.enable()
6358

6459
propagator = HTTPPropagator()
6560

tests/test_config.py

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import importlib
2+
import sys
3+
14
import pytest
25

36
from datadog_lambda.config import config, _get_env, Config
@@ -14,6 +17,43 @@ def set_env(key, value):
1417
return set_env
1518

1619

20+
def test_config_import_does_not_import_ddtrace(monkeypatch):
21+
baseline = set(sys.modules)
22+
import datadog_lambda
23+
24+
with monkeypatch.context() as mp:
25+
for name in list(sys.modules):
26+
if name == "ddtrace" or name.startswith("ddtrace."):
27+
mp.delitem(sys.modules, name, raising=False)
28+
29+
class _BlockDdtrace(importlib.abc.MetaPathFinder):
30+
def find_spec(self, fullname, path=None, target=None):
31+
if fullname == "ddtrace" or fullname.startswith("ddtrace."):
32+
raise ImportError("ddtrace must not be imported during this test")
33+
return None
34+
35+
blocker = _BlockDdtrace()
36+
mp.setattr(sys, "meta_path", [blocker] + sys.meta_path, raising=False)
37+
38+
mp.delattr(datadog_lambda, "config", raising=False)
39+
mp.delitem(sys.modules, "datadog_lambda.config", raising=False)
40+
importlib.invalidate_caches()
41+
importlib.import_module("datadog_lambda.config")
42+
43+
assert all(
44+
not (n == "ddtrace" or n.startswith("ddtrace.")) for n in sys.modules
45+
), "The config module should not import ddtrace."
46+
47+
introduced = [
48+
n
49+
for n in list(sys.modules)
50+
if (n == "datadog_lambda" or n.startswith("datadog_lambda."))
51+
and n not in baseline
52+
]
53+
for n in introduced:
54+
sys.modules.pop(n, None)
55+
56+
1757
def _test_as_bool(env_key, conf_key, default):
1858
return (
1959
(env_key, conf_key, None, default),
@@ -72,9 +112,6 @@ def _test_as_list(env_key, conf_key, default):
72112
*_test_as_bool("DD_INTEGRATION_TEST", "integration_test", default=False),
73113
*_test_as_bool("DD_BOTOCORE_ADD_SPAN_POINTERS", "add_span_pointers", default=True),
74114
*_test_as_bool("DD_TRACE_OTEL_ENABLED", "otel_enabled", default=False),
75-
*_test_as_bool(
76-
"DD_INSTRUMENTATION_TELEMETRY_ENABLED", "telemetry_enabled", default=False
77-
),
78115
*_test_as_bool("DD_MERGE_XRAY_TRACES", "merge_xray_traces", default=False),
79116
*_test_as_bool("DD_PROFILING_ENABLED", "profiling_enabled", default=False),
80117
*_test_as_bool("DD_LLMOBS_ENABLED", "llmobs_enabled", default=False),
@@ -86,6 +123,8 @@ def _test_as_list(env_key, conf_key, default):
86123
),
87124
*_test_as_bool("DD_LOCAL_TEST", "local_test", default=False),
88125
*_test_as_bool("DD_DATA_STREAMS_ENABLED", "data_streams_enabled", default=False),
126+
*_test_as_bool("DD_APPSEC_ENABLED", "appsec_enabled", default=False),
127+
*_test_as_bool("DD_APPSEC_SCA_ENABLED", "sca_enabled", default=False),
89128
*_test_int(
90129
"DD_CAPTURE_LAMBDA_PAYLOAD_MAX_DEPTH", "capture_payload_max_depth", default=10
91130
),
@@ -143,9 +182,6 @@ def test_config_from_environ(env_key, conf_key, env_val, conf_val, setenv):
143182
"DD_DECODE_AUTHORIZER_CONTEXT", "decode_authorizer_context", default=True
144183
),
145184
*_test_as_bool("DD_DATA_STREAMS_ENABLED", "data_streams_enabled", default=False),
146-
*_test_as_bool(
147-
"DD_INSTRUMENTATION_TELEMETRY_ENABLED", "telemetry_enabled", default=False
148-
),
149185
)
150186

151187

0 commit comments

Comments
 (0)