From 3f691ecd475b8375d9257dab01010fa18f821500 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Mon, 21 Apr 2025 14:35:11 -0400 Subject: [PATCH 1/3] chore(stable_config): collect debug logs when DD_TRACE_DEBUG is True --- ddtrace/internal/native/__init__.py | 5 ++--- tests/internal/test_native.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/ddtrace/internal/native/__init__.py b/ddtrace/internal/native/__init__.py index 9cc6a7806b8..b4cbbe3a18b 100644 --- a/ddtrace/internal/native/__init__.py +++ b/ddtrace/internal/native/__init__.py @@ -8,9 +8,7 @@ from ._native import store_metadata # noqa: F401 -def get_configuration_from_disk( - debug_logs: bool = False, -) -> Tuple[Dict[str, str], Dict[str, str]]: +def get_configuration_from_disk() -> Tuple[Dict[str, str], Dict[str, str]]: """ Retrieves the tracer configuration from disk. Calls the PyConfigurator object to read the configuration from the disk using the libdatadog shared library @@ -18,6 +16,7 @@ def get_configuration_from_disk( See https://github.com/DataDog/libdatadog/blob/06d2b6a19d7ec9f41b3bfd4ddf521585c55298f6/library-config/src/lib.rs for more information on how the configuration is read from disk """ + debug_logs = os.getenv("DD_TRACE_DEBUG", "false").lower().strip() in ("true", "1") configurator = PyConfigurator(debug_logs) # Check if the file override is provided via environment variables diff --git a/tests/internal/test_native.py b/tests/internal/test_native.py index d5905a7ba64..809d342b1e6 100644 --- a/tests/internal/test_native.py +++ b/tests/internal/test_native.py @@ -1,3 +1,6 @@ +import os +import tempfile + import pytest @@ -39,6 +42,31 @@ def test_get_configuration_from_disk_managed_stable_config_priority(): assert config.version == "c", f"Expected DD_VERSION to be 'c' but got {config.version}" +def test_get_configuration_debug_logs(run_python_code_in_subprocess): + """ + Verify stable config debug log enablement + """ + # Create managed config + with tempfile.NamedTemporaryFile(suffix=".yaml", prefix="managed_config") as managed_config: + managed_config.write( + b""" +apm_configuration_default: + DD_VERSION: "c" +""" + ) + managed_config.flush() + + env = os.environ.copy() + env["DD_TRACE_DEBUG"] = "true" + env["_DD_SC_MANAGED_FILE_OVERRIDE"] = managed_config.name + + _, err, status, _ = run_python_code_in_subprocess("from ddtrace import config", env=env) + assert status == 0, err + assert b"Read the following static config: StableConfig" in err + assert b'ConfigMap([(DdVersion, "c")]), tags: {}, rules: [] }' in err + assert b"configurator: Configurator { debug_logs: true }" in err + + @pytest.mark.subprocess(parametrize={"DD_VERSION": ["b", None]}) def test_get_configuration_from_disk_local_config_priority(tmp_path): """ From e2b76bad57ccc24704662823a30d33ebfc5f0cc2 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Mon, 21 Apr 2025 14:44:22 -0400 Subject: [PATCH 2/3] run test in subprocess --- tests/internal/test_native.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/tests/internal/test_native.py b/tests/internal/test_native.py index 809d342b1e6..0c5aa0db439 100644 --- a/tests/internal/test_native.py +++ b/tests/internal/test_native.py @@ -1,6 +1,3 @@ -import os -import tempfile - import pytest @@ -42,10 +39,17 @@ def test_get_configuration_from_disk_managed_stable_config_priority(): assert config.version == "c", f"Expected DD_VERSION to be 'c' but got {config.version}" -def test_get_configuration_debug_logs(run_python_code_in_subprocess): +@pytest.mark.subprocess(parametrize={"DD_TRACE_DEBUG": ["TRUE", "1"]}, err=None) +def test_get_configuration_debug_logs(): """ Verify stable config debug log enablement """ + import os + import sys + import tempfile + + from tests.utils import call_program + # Create managed config with tempfile.NamedTemporaryFile(suffix=".yaml", prefix="managed_config") as managed_config: managed_config.write( @@ -60,7 +64,7 @@ def test_get_configuration_debug_logs(run_python_code_in_subprocess): env["DD_TRACE_DEBUG"] = "true" env["_DD_SC_MANAGED_FILE_OVERRIDE"] = managed_config.name - _, err, status, _ = run_python_code_in_subprocess("from ddtrace import config", env=env) + _, err, status, _ = call_program(sys.executable, "-c", "import ddtrace", env=env) assert status == 0, err assert b"Read the following static config: StableConfig" in err assert b'ConfigMap([(DdVersion, "c")]), tags: {}, rules: [] }' in err From aec3ed3ccc36744562b3920ba05919bc4b8cd8da Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Thu, 1 May 2025 09:18:30 -0400 Subject: [PATCH 3/3] fmt --- ddtrace/internal/native/__init__.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ddtrace/internal/native/__init__.py b/ddtrace/internal/native/__init__.py index 6f741120ad8..06c5b956a19 100644 --- a/ddtrace/internal/native/__init__.py +++ b/ddtrace/internal/native/__init__.py @@ -9,8 +9,7 @@ from ._native import store_metadata # noqa: F401 -def get_configuration_from_disk( -) -> Tuple[Dict[str, str], Dict[str, str], Dict[str, Optional[str]]]: +def get_configuration_from_disk() -> Tuple[Dict[str, str], Dict[str, str], Dict[str, Optional[str]]]: """ Retrieves the tracer configuration from disk. Calls the PyConfigurator object to read the configuration from the disk using the libdatadog shared library