From 837c52e4f2732bd3a42a7a95eb41e1f85c8cce64 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Mon, 21 Apr 2025 21:58:55 -0400 Subject: [PATCH 01/14] chore(telemetry): use DD_INJECTION_ENABLED to track whether ssi injection was attempted on a host --- ddtrace/settings/_config.py | 3 ++- lib-injection/sources/sitecustomize.py | 1 - tests/telemetry/test_writer.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ddtrace/settings/_config.py b/ddtrace/settings/_config.py index a50387f5dbf..5ae601f7314 100644 --- a/ddtrace/settings/_config.py +++ b/ddtrace/settings/_config.py @@ -646,7 +646,8 @@ def __init__(self): self._inject_force = _get_config("DD_INJECT_FORCE", False, asbool) self._lib_was_injected = False - self._inject_was_attempted = _get_config("_DD_INJECT_WAS_ATTEMPTED", False, asbool) + self._inject_was_attempted = _get_config("DD_INJECTION_ENABLED", False, asbool) + self._lib self._inferred_proxy_services_enabled = _get_config("DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED", False, asbool) def __getattr__(self, name) -> Any: diff --git a/lib-injection/sources/sitecustomize.py b/lib-injection/sources/sitecustomize.py index a5076da6cb7..6047bb71a3f 100644 --- a/lib-injection/sources/sitecustomize.py +++ b/lib-injection/sources/sitecustomize.py @@ -262,7 +262,6 @@ def _inject(): EXECUTABLES_DENY_LIST = build_denied_executables() integration_incomp = False runtime_incomp = False - os.environ["_DD_INJECT_WAS_ATTEMPTED"] = "true" spec = None try: # `find_spec` is only available in Python 3.4+ diff --git a/tests/telemetry/test_writer.py b/tests/telemetry/test_writer.py index ddc0ebc6080..c8497a794ab 100644 --- a/tests/telemetry/test_writer.py +++ b/tests/telemetry/test_writer.py @@ -404,6 +404,7 @@ def test_app_started_event_configuration_override(test_agent_session, run_python {"name": "DD_IAST_TELEMETRY_VERBOSITY", "origin": "default", "value": "INFORMATION"}, {"name": "DD_IAST_VULNERABILITIES_PER_REQUEST", "origin": "default", "value": 2}, {"name": "DD_INJECT_FORCE", "origin": "env_var", "value": True}, + {"name": "DD_INJECTION_ENABLED", "origin": "default", "value": False}, {"name": "DD_INSTRUMENTATION_INSTALL_ID", "origin": "default", "value": None}, {"name": "DD_INSTRUMENTATION_INSTALL_TYPE", "origin": "default", "value": None}, {"name": "DD_INSTRUMENTATION_TELEMETRY_ENABLED", "origin": "env_var", "value": True}, @@ -523,7 +524,6 @@ def test_app_started_event_configuration_override(test_agent_session, run_python {"name": "DD_VERSION", "origin": "default", "value": None}, {"name": "_DD_APPSEC_DEDUPLICATION_ENABLED", "origin": "default", "value": True}, {"name": "_DD_IAST_LAZY_TAINT", "origin": "default", "value": False}, - {"name": "_DD_INJECT_WAS_ATTEMPTED", "origin": "default", "value": False}, {"name": "_DD_TRACE_WRITER_LOG_ERROR_PAYLOADS", "origin": "default", "value": False}, {"name": "ddtrace_auto_used", "origin": "unknown", "value": True}, {"name": "ddtrace_bootstrapped", "origin": "unknown", "value": True}, From 2732ad61ac962e044ed511eb96d1effe42c3786c Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Mon, 21 Apr 2025 22:09:43 -0400 Subject: [PATCH 02/14] actually set _lib_was_injected --- lib-injection/sources/sitecustomize.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib-injection/sources/sitecustomize.py b/lib-injection/sources/sitecustomize.py index 6047bb71a3f..b099f60c0bf 100644 --- a/lib-injection/sources/sitecustomize.py +++ b/lib-injection/sources/sitecustomize.py @@ -429,6 +429,11 @@ def _inject(): ], ), ) + + # Track whether library was successful + from ddtrace import config + + config._lib_was_injected = True except Exception as e: TELEMETRY_DATA.append( create_count_metric( From 2c09f775327ac9205f76a9792521b8d68ec994b3 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Mon, 21 Apr 2025 22:14:11 -0400 Subject: [PATCH 03/14] clean up --- ddtrace/settings/_config.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ddtrace/settings/_config.py b/ddtrace/settings/_config.py index 5ae601f7314..c2d7f2fd586 100644 --- a/ddtrace/settings/_config.py +++ b/ddtrace/settings/_config.py @@ -647,7 +647,6 @@ def __init__(self): self._inject_force = _get_config("DD_INJECT_FORCE", False, asbool) self._lib_was_injected = False self._inject_was_attempted = _get_config("DD_INJECTION_ENABLED", False, asbool) - self._lib self._inferred_proxy_services_enabled = _get_config("DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED", False, asbool) def __getattr__(self, name) -> Any: From c7515facb101176d047e28e5b81fe7e587627c82 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Mon, 21 Apr 2025 22:25:14 -0400 Subject: [PATCH 04/14] update telemetry collection --- lib-injection/sources/sitecustomize.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib-injection/sources/sitecustomize.py b/lib-injection/sources/sitecustomize.py index b099f60c0bf..ab431ac9013 100644 --- a/lib-injection/sources/sitecustomize.py +++ b/lib-injection/sources/sitecustomize.py @@ -431,9 +431,8 @@ def _inject(): ) # Track whether library was successful - from ddtrace import config - - config._lib_was_injected = True + ddtrace.config._lib_was_injected = True + ddtrace.internal.telemetry.telemetry_writer.add_configuration("lib_injection_successful", True, "code") except Exception as e: TELEMETRY_DATA.append( create_count_metric( From 673fe4a4c3f4b6bf5f7a89bfc66fe900a7f7fcfe Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Wed, 23 Apr 2025 12:24:56 -0400 Subject: [PATCH 05/14] clean up --- lib-injection/sources/sitecustomize.py | 1 - tests/telemetry/test_writer.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/lib-injection/sources/sitecustomize.py b/lib-injection/sources/sitecustomize.py index ab431ac9013..dd4ef60eb5a 100644 --- a/lib-injection/sources/sitecustomize.py +++ b/lib-injection/sources/sitecustomize.py @@ -432,7 +432,6 @@ def _inject(): # Track whether library was successful ddtrace.config._lib_was_injected = True - ddtrace.internal.telemetry.telemetry_writer.add_configuration("lib_injection_successful", True, "code") except Exception as e: TELEMETRY_DATA.append( create_count_metric( diff --git a/tests/telemetry/test_writer.py b/tests/telemetry/test_writer.py index c8497a794ab..dc897c32f9b 100644 --- a/tests/telemetry/test_writer.py +++ b/tests/telemetry/test_writer.py @@ -403,8 +403,8 @@ def test_app_started_event_configuration_override(test_agent_session, run_python {"name": "DD_IAST_STACK_TRACE_ENABLED", "origin": "default", "value": True}, {"name": "DD_IAST_TELEMETRY_VERBOSITY", "origin": "default", "value": "INFORMATION"}, {"name": "DD_IAST_VULNERABILITIES_PER_REQUEST", "origin": "default", "value": 2}, + {"name": "DD_INJECTION_ENABLED", "origin": "env_var", "value": True}, {"name": "DD_INJECT_FORCE", "origin": "env_var", "value": True}, - {"name": "DD_INJECTION_ENABLED", "origin": "default", "value": False}, {"name": "DD_INSTRUMENTATION_INSTALL_ID", "origin": "default", "value": None}, {"name": "DD_INSTRUMENTATION_INSTALL_TYPE", "origin": "default", "value": None}, {"name": "DD_INSTRUMENTATION_TELEMETRY_ENABLED", "origin": "env_var", "value": True}, From 3e44674f7b89490c788c47642e604ff8b9939a03 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Wed, 23 Apr 2025 12:28:00 -0400 Subject: [PATCH 06/14] allow test to pass locally --- tests/telemetry/test_writer.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/telemetry/test_writer.py b/tests/telemetry/test_writer.py index dc897c32f9b..0134c415c61 100644 --- a/tests/telemetry/test_writer.py +++ b/tests/telemetry/test_writer.py @@ -283,6 +283,8 @@ def test_app_started_event_configuration_override(test_agent_session, run_python env["DD_API_SECURITY_ENABLED"] = "False" env["DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING_ENABLED"] = "False" env["DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE"] = "disabled" + env["DD_INJECT_FORCE"] = "true" + env["DD_INJECTION_ENABLED"] = "true" # By default telemetry collection is enabled after 10 seconds, so we either need to # to sleep for 10 seconds or manually call _app_started() to generate the app started event. From e94e1597a3285dafea8275742673a79a86bb8f18 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Wed, 23 Apr 2025 12:29:33 -0400 Subject: [PATCH 07/14] fix comment --- lib-injection/sources/sitecustomize.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib-injection/sources/sitecustomize.py b/lib-injection/sources/sitecustomize.py index dd4ef60eb5a..7d4ab385b83 100644 --- a/lib-injection/sources/sitecustomize.py +++ b/lib-injection/sources/sitecustomize.py @@ -429,8 +429,7 @@ def _inject(): ], ), ) - - # Track whether library was successful + # Track whether library injection was successful ddtrace.config._lib_was_injected = True except Exception as e: TELEMETRY_DATA.append( From 2253bc3ffd450b8feb121d8334df8226d775ec34 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Wed, 23 Apr 2025 17:22:45 -0400 Subject: [PATCH 08/14] track lib_injection_successful --- lib-injection/sources/sitecustomize.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib-injection/sources/sitecustomize.py b/lib-injection/sources/sitecustomize.py index 7d4ab385b83..0bc686e09e1 100644 --- a/lib-injection/sources/sitecustomize.py +++ b/lib-injection/sources/sitecustomize.py @@ -431,6 +431,7 @@ def _inject(): ) # Track whether library injection was successful ddtrace.config._lib_was_injected = True + ddtrace.internal.telemetry.telemetry_writer.add_configuration("lib_injection_successful", True, "code") except Exception as e: TELEMETRY_DATA.append( create_count_metric( From d825e4ab3c954e1234672a122a00c8c4c18b28f0 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Wed, 30 Apr 2025 12:30:25 -0400 Subject: [PATCH 09/14] update sources --- ddtrace/bootstrap/sitecustomize.py | 6 ++++-- ddtrace/settings/_config.py | 9 +++++---- lib-injection/sources/sitecustomize.py | 2 +- tests/telemetry/test_writer.py | 24 ++++++++++++++++++++---- 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/ddtrace/bootstrap/sitecustomize.py b/ddtrace/bootstrap/sitecustomize.py index 6da3dab36a0..49a6ea4ad11 100644 --- a/ddtrace/bootstrap/sitecustomize.py +++ b/ddtrace/bootstrap/sitecustomize.py @@ -165,8 +165,10 @@ def _(threading): else: log.debug("additional sitecustomize found in: %s", sys.path) - telemetry_writer.add_configuration("ddtrace_bootstrapped", True, "unknown") - telemetry_writer.add_configuration("ddtrace_auto_used", "ddtrace.auto" in sys.modules, "unknown") + if "ddtrace.auto" in sys.modules: + telemetry_writer.add_configuration("instrumentation_source", "ddtrace.auto", "code") + else: + telemetry_writer.add_configuration("instrumentation_source", "cmd_line", "code") # Loading status used in tests to detect if the `sitecustomize` has been # properly loaded without exceptions. This must be the last action in the module # when the execution ends with a success. diff --git a/ddtrace/settings/_config.py b/ddtrace/settings/_config.py index 5795c49cc84..721629baacf 100644 --- a/ddtrace/settings/_config.py +++ b/ddtrace/settings/_config.py @@ -14,6 +14,7 @@ from ddtrace.internal.serverless import in_azure_function from ddtrace.internal.serverless import in_gcp_function +from ddtrace.internal.telemetry import telemetry_writer from ddtrace.internal.telemetry import validate_otel_envs from ddtrace.internal.utils.cache import cachedmethod @@ -775,10 +776,7 @@ def _set_config_items(self, items): item_names.append(key) item = self._config[key] item.set_value_source(value, origin) - if self._telemetry_enabled: - from ddtrace.internal.telemetry import telemetry_writer - - telemetry_writer.add_configuration(item._name, item.value(), item.source()) + telemetry_writer.add_configuration(item._name, item.value(), item.source()) self._notify_subscribers(item_names) def _reset(self): @@ -868,3 +866,6 @@ def _lower(self, value): config = Config() +# This is used to track the source of the instrumentation. +# By default it is set to "manual" but can be updated to ssi, ddtrace.auto, or ddtrace.run. +telemetry_writer.add_configuration("instrumentation_source", "manual", "code") diff --git a/lib-injection/sources/sitecustomize.py b/lib-injection/sources/sitecustomize.py index 0bc686e09e1..2fdadb607dd 100644 --- a/lib-injection/sources/sitecustomize.py +++ b/lib-injection/sources/sitecustomize.py @@ -431,7 +431,7 @@ def _inject(): ) # Track whether library injection was successful ddtrace.config._lib_was_injected = True - ddtrace.internal.telemetry.telemetry_writer.add_configuration("lib_injection_successful", True, "code") + ddtrace.internal.telemetry.telemetry_writer.add_configuration("instrumentation_source", "ssi", "code") except Exception as e: TELEMETRY_DATA.append( create_count_metric( diff --git a/tests/telemetry/test_writer.py b/tests/telemetry/test_writer.py index 0134c415c61..c69f0150c9e 100644 --- a/tests/telemetry/test_writer.py +++ b/tests/telemetry/test_writer.py @@ -18,6 +18,7 @@ from ddtrace.internal.utils.version import _pep440_to_semver from ddtrace.settings._config import DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP_DEFAULT from tests.conftest import DEFAULT_DDTRACE_SUBPROCESS_TEST_SERVICE_NAME +from tests.utils import call_program from tests.utils import override_global_config @@ -159,8 +160,7 @@ def test_app_started_event(telemetry_writer, test_agent_session, mock_time): {"name": "DD_TRACE_WRITER_INTERVAL_SECONDS", "origin": "unknown", "value": 1.0}, {"name": "DD_TRACE_WRITER_MAX_PAYLOAD_SIZE_BYTES", "origin": "unknown", "value": 20 << 20}, {"name": "DD_TRACE_WRITER_REUSE_CONNECTIONS", "origin": "unknown", "value": False}, - {"name": "ddtrace_auto_used", "origin": "unknown", "value": False}, - {"name": "ddtrace_bootstrapped", "origin": "unknown", "value": False}, + {"name": "instrumentation_source", "origin": "code", "value": "manual"}, {"name": "profiling_enabled", "origin": "default", "value": "false"}, {"name": "data_streams_enabled", "origin": "default", "value": "false"}, {"name": "appsec_enabled", "origin": "default", "value": "false"}, @@ -527,8 +527,7 @@ def test_app_started_event_configuration_override(test_agent_session, run_python {"name": "_DD_APPSEC_DEDUPLICATION_ENABLED", "origin": "default", "value": True}, {"name": "_DD_IAST_LAZY_TAINT", "origin": "default", "value": False}, {"name": "_DD_TRACE_WRITER_LOG_ERROR_PAYLOADS", "origin": "default", "value": False}, - {"name": "ddtrace_auto_used", "origin": "unknown", "value": True}, - {"name": "ddtrace_bootstrapped", "origin": "unknown", "value": True}, + {"name": "instrumentation_source", "origin": "code", "value": "ddtrace.auto"}, {"name": "python_build_gnu_type", "origin": "unknown", "value": sysconfig.get_config_var("BUILD_GNU_TYPE")}, {"name": "python_host_gnu_type", "origin": "unknown", "value": sysconfig.get_config_var("HOST_GNU_TYPE")}, {"name": "python_soabi", "origin": "unknown", "value": sysconfig.get_config_var("SOABI")}, @@ -550,6 +549,23 @@ def test_update_dependencies_event(test_agent_session, ddtrace_run_python_code_i assert len(deps) == 1, deps +def test_instrumentation_source_config( + test_agent_session, ddtrace_run_python_code_in_subprocess, run_python_code_in_subprocess +): + env = os.environ.copy() + env["_DD_INSTRUMENTATION_TELEMETRY_TESTS_FORCE_APP_STARTED"] = "true" + + _, stderr, status, _ = call_program("ddtrace-run", sys.executable, "-c", "", env=env) + assert status == 0, stderr + configs = test_agent_session.get_configurations("instrumentation_source") + assert configs and configs[-1]["value"] == "cmd_line" + + _, stderr, status, _ = call_program(sys.executable, "-c", "import ddtrace.auto", env=env) + assert status == 0, stderr + configs = test_agent_session.get_configurations("instrumentation_source") + assert configs and configs[-1]["value"] == "ddtrace.auto" + + def test_update_dependencies_event_when_disabled(test_agent_session, ddtrace_run_python_code_in_subprocess): env = os.environ.copy() # app-started events are sent 10 seconds after ddtrace imported, this configuration overrides this From bd8ca4e6782fe85b16c0ad544f866135e7ecccb8 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Wed, 30 Apr 2025 15:57:30 -0400 Subject: [PATCH 10/14] detect using python path --- ddtrace/bootstrap/sitecustomize.py | 17 +++++++++-------- ddtrace/settings/_config.py | 3 --- tests/telemetry/test_writer.py | 9 ++++++++- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/ddtrace/bootstrap/sitecustomize.py b/ddtrace/bootstrap/sitecustomize.py index 49a6ea4ad11..545bffb676e 100644 --- a/ddtrace/bootstrap/sitecustomize.py +++ b/ddtrace/bootstrap/sitecustomize.py @@ -13,21 +13,21 @@ # to allow injecting a custom sitecustomize.py file into the Python process to # perform the correct initialisation for the library. All the actual # initialisation logic should be placed in preload.py. -from ddtrace import LOADED_MODULES # isort:skip - +import ddtrace # isort:skip import logging # noqa:I001 import os # noqa:F401 import sys import warnings # noqa:F401 -from ddtrace.internal.telemetry import telemetry_writer from ddtrace import config # noqa:F401 from ddtrace._logger import DD_LOG_FORMAT from ddtrace.internal.logger import get_logger # noqa:F401 from ddtrace.internal.module import ModuleWatchdog # noqa:F401 from ddtrace.internal.module import is_module_installed +from ddtrace.internal.telemetry import telemetry_writer from ddtrace.internal.utils.formats import asbool # noqa:F401 + # Debug mode from the tracer will do the same here, so only need to do this otherwise. if config._logs_injection: from ddtrace import patch @@ -88,7 +88,7 @@ def drop(module_name): "wrapt", ] ) - for m in list(_ for _ in sys.modules if _ not in LOADED_MODULES): + for m in list(_ for _ in sys.modules if _ not in ddtrace.LOADED_MODULES): if any(m == _ or m.startswith(_ + ".") for _ in KEEP_MODULES): continue @@ -164,11 +164,12 @@ def _(threading): log.debug("additional sitecustomize not found") else: log.debug("additional sitecustomize found in: %s", sys.path) - - if "ddtrace.auto" in sys.modules: - telemetry_writer.add_configuration("instrumentation_source", "ddtrace.auto", "code") - else: + # Detect if ddtrace-run is being used by checking if the bootstrap directory is in the python path + bootstrap_dir = os.path.join(os.path.dirname(ddtrace.__file__), "bootstrap") + if bootstrap_dir in sys.path: telemetry_writer.add_configuration("instrumentation_source", "cmd_line", "code") + else: + telemetry_writer.add_configuration("instrumentation_source", "manual", "code") # Loading status used in tests to detect if the `sitecustomize` has been # properly loaded without exceptions. This must be the last action in the module # when the execution ends with a success. diff --git a/ddtrace/settings/_config.py b/ddtrace/settings/_config.py index 721629baacf..5c5f127a034 100644 --- a/ddtrace/settings/_config.py +++ b/ddtrace/settings/_config.py @@ -866,6 +866,3 @@ def _lower(self, value): config = Config() -# This is used to track the source of the instrumentation. -# By default it is set to "manual" but can be updated to ssi, ddtrace.auto, or ddtrace.run. -telemetry_writer.add_configuration("instrumentation_source", "manual", "code") diff --git a/tests/telemetry/test_writer.py b/tests/telemetry/test_writer.py index c69f0150c9e..5c709300adf 100644 --- a/tests/telemetry/test_writer.py +++ b/tests/telemetry/test_writer.py @@ -559,11 +559,18 @@ def test_instrumentation_source_config( assert status == 0, stderr configs = test_agent_session.get_configurations("instrumentation_source") assert configs and configs[-1]["value"] == "cmd_line" + test_agent_session.clear() _, stderr, status, _ = call_program(sys.executable, "-c", "import ddtrace.auto", env=env) assert status == 0, stderr configs = test_agent_session.get_configurations("instrumentation_source") - assert configs and configs[-1]["value"] == "ddtrace.auto" + assert configs and configs[-1]["value"] == "manual" + test_agent_session.clear() + + _, stderr, status, _ = call_program(sys.executable, "-c", "import ddtrace", env=env) + assert status == 0, stderr + configs = test_agent_session.get_configurations("instrumentation_source") + assert not configs, "instrumentation_source should not be set when ddtrace instrumentation is not used" def test_update_dependencies_event_when_disabled(test_agent_session, ddtrace_run_python_code_in_subprocess): From 72e12a93c744f720bfb536a54b3960e146571e37 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Thu, 1 May 2025 10:15:57 -0400 Subject: [PATCH 11/14] fix broken/stale test --- tests/telemetry/test_writer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/telemetry/test_writer.py b/tests/telemetry/test_writer.py index 5c709300adf..cc40510d629 100644 --- a/tests/telemetry/test_writer.py +++ b/tests/telemetry/test_writer.py @@ -527,7 +527,7 @@ def test_app_started_event_configuration_override(test_agent_session, run_python {"name": "_DD_APPSEC_DEDUPLICATION_ENABLED", "origin": "default", "value": True}, {"name": "_DD_IAST_LAZY_TAINT", "origin": "default", "value": False}, {"name": "_DD_TRACE_WRITER_LOG_ERROR_PAYLOADS", "origin": "default", "value": False}, - {"name": "instrumentation_source", "origin": "code", "value": "ddtrace.auto"}, + {"name": "instrumentation_source", "origin": "code", "value": "manual"}, {"name": "python_build_gnu_type", "origin": "unknown", "value": sysconfig.get_config_var("BUILD_GNU_TYPE")}, {"name": "python_host_gnu_type", "origin": "unknown", "value": sysconfig.get_config_var("HOST_GNU_TYPE")}, {"name": "python_soabi", "origin": "unknown", "value": sysconfig.get_config_var("SOABI")}, From 54664e4c0ae19aa3b6a43d6ba835c60839ac3215 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Thu, 1 May 2025 10:30:22 -0400 Subject: [PATCH 12/14] fix DD_INJECTION_ENABLED --- ddtrace/settings/_config.py | 2 +- tests/telemetry/test_writer.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ddtrace/settings/_config.py b/ddtrace/settings/_config.py index 5c5f127a034..0e75de752f1 100644 --- a/ddtrace/settings/_config.py +++ b/ddtrace/settings/_config.py @@ -647,7 +647,7 @@ def __init__(self): self._inject_force = _get_config("DD_INJECT_FORCE", False, asbool) self._lib_was_injected = False - self._inject_was_attempted = _get_config("DD_INJECTION_ENABLED", False, asbool) + self._inject_enabled = _get_config("DD_INJECTION_ENABLED", "none") self._inferred_proxy_services_enabled = _get_config("DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED", False, asbool) def __getattr__(self, name) -> Any: diff --git a/tests/telemetry/test_writer.py b/tests/telemetry/test_writer.py index cc40510d629..1be8dec2e7b 100644 --- a/tests/telemetry/test_writer.py +++ b/tests/telemetry/test_writer.py @@ -284,7 +284,7 @@ def test_app_started_event_configuration_override(test_agent_session, run_python env["DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING_ENABLED"] = "False" env["DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE"] = "disabled" env["DD_INJECT_FORCE"] = "true" - env["DD_INJECTION_ENABLED"] = "true" + env["DD_INJECTION_ENABLED"] = "tracer" # By default telemetry collection is enabled after 10 seconds, so we either need to # to sleep for 10 seconds or manually call _app_started() to generate the app started event. @@ -405,7 +405,7 @@ def test_app_started_event_configuration_override(test_agent_session, run_python {"name": "DD_IAST_STACK_TRACE_ENABLED", "origin": "default", "value": True}, {"name": "DD_IAST_TELEMETRY_VERBOSITY", "origin": "default", "value": "INFORMATION"}, {"name": "DD_IAST_VULNERABILITIES_PER_REQUEST", "origin": "default", "value": 2}, - {"name": "DD_INJECTION_ENABLED", "origin": "env_var", "value": True}, + {"name": "DD_INJECTION_ENABLED", "origin": "env_var", "value": "tracer"}, {"name": "DD_INJECT_FORCE", "origin": "env_var", "value": True}, {"name": "DD_INSTRUMENTATION_INSTALL_ID", "origin": "default", "value": None}, {"name": "DD_INSTRUMENTATION_INSTALL_TYPE", "origin": "default", "value": None}, From 99006fad40caf2c7cf5c3cd2458c94f3f11cb5b4 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Thu, 1 May 2025 11:46:46 -0400 Subject: [PATCH 13/14] make default none --- ddtrace/settings/_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ddtrace/settings/_config.py b/ddtrace/settings/_config.py index 0e75de752f1..886a69f383e 100644 --- a/ddtrace/settings/_config.py +++ b/ddtrace/settings/_config.py @@ -647,7 +647,7 @@ def __init__(self): self._inject_force = _get_config("DD_INJECT_FORCE", False, asbool) self._lib_was_injected = False - self._inject_enabled = _get_config("DD_INJECTION_ENABLED", "none") + self._inject_enabled = _get_config("DD_INJECTION_ENABLED") self._inferred_proxy_services_enabled = _get_config("DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED", False, asbool) def __getattr__(self, name) -> Any: From 8837ae259098dfae050799c58630afbdbe6d1353 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Thu, 1 May 2025 12:11:51 -0400 Subject: [PATCH 14/14] fix inject force and inject enabled --- ddtrace/settings/_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ddtrace/settings/_config.py b/ddtrace/settings/_config.py index 886a69f383e..ba982801b90 100644 --- a/ddtrace/settings/_config.py +++ b/ddtrace/settings/_config.py @@ -645,7 +645,7 @@ def __init__(self): self._llmobs_ml_app = _get_config("DD_LLMOBS_ML_APP") self._llmobs_agentless_enabled = _get_config("DD_LLMOBS_AGENTLESS_ENABLED", None, asbool) - self._inject_force = _get_config("DD_INJECT_FORCE", False, asbool) + self._inject_force = _get_config("DD_INJECT_FORCE", None, asbool) self._lib_was_injected = False self._inject_enabled = _get_config("DD_INJECTION_ENABLED") self._inferred_proxy_services_enabled = _get_config("DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED", False, asbool)