22import logging
33import platform
44import sys
5- from typing import TYPE_CHECKING # noqa:F401
65from typing import Any # noqa:F401
76from typing import Union # noqa:F401
87
9- import ddtrace
8+ from ddtrace import _monkey
109from ddtrace .internal import agent
1110from ddtrace .internal .packages import get_distributions
1211from ddtrace .internal .settings import env
1312from ddtrace .internal .settings ._agent import config as agent_config
13+ from ddtrace .internal .settings ._config import config
1414from ddtrace .internal .settings .asm import config as asm_config
1515from ddtrace .internal .utils .cache import callonce
16+ from ddtrace .internal .utils .tracer_debug_info import TracerDebugInfo
1617from ddtrace .internal .writer import AgentWriterInterface
1718from ddtrace .internal .writer import LogWriter
1819from ddtrace .version import __version__
@@ -42,38 +43,37 @@ def tags_to_str(tags: dict[str, Any]) -> str:
4243 return "," .join (["%s:%s" % (k , v ) for k , v in tags .items ()])
4344
4445
45- def collect () -> dict [str , Any ]:
46+ def collect (tracer_info : TracerDebugInfo ) -> dict [str , Any ]:
4647 """Collect system and library information into a serializable dict."""
4748
4849 # Inline expensive imports to avoid unnecessary overhead on startup.
4950 from ddtrace .internal import gitmetadata
5051 from ddtrace .internal .runtime .runtime_metrics import RuntimeWorker
5152 from ddtrace .internal .settings .crashtracker import config as crashtracker_config
52- from ddtrace .trace import tracer
5353
54- if isinstance (tracer . _span_aggregator .writer , LogWriter ):
54+ if isinstance (tracer_info .writer , LogWriter ):
5555 agent_url = "AGENTLESS"
5656 agent_error = None
57- elif isinstance (tracer . _span_aggregator .writer , AgentWriterInterface ):
58- writer = tracer . _span_aggregator .writer
57+ elif isinstance (tracer_info .writer , AgentWriterInterface ):
58+ writer = tracer_info .writer
5959 agent_url = writer .intake_url
6060 reachable = agent .is_reachable (agent_url ) # type: ignore[no-untyped-call]
6161 agent_error = None if reachable else "Agent not reachable at %s" % agent_url
6262 else :
6363 agent_url = "CUSTOM"
6464 agent_error = None
6565
66- sampling_rules = [str (rule ) for rule in tracer . _sampler . rules ]
66+ sampling_rules = [str (rule ) for rule in tracer_info . sampling_rules ]
6767
6868 is_venv = in_venv ()
6969
7070 packages_available = {name : version for (name , version ) in get_distributions ().items ()}
7171 integration_configs : dict [str , Union [dict [str , Any ], str ]] = {}
72- for module , enabled in ddtrace . _monkey .PATCH_MODULES .items ():
72+ for module , enabled in _monkey .PATCH_MODULES .items ():
7373 # TODO: this check doesn't work in all cases... we need a mapping
7474 # between the module and the library name.
7575 module_available = module in packages_available
76- module_instrumented = module in ddtrace . _monkey ._PATCHED_MODULES
76+ module_instrumented = module in _monkey ._PATCHED_MODULES
7777 module_imported = module in sys .modules
7878
7979 if enabled :
@@ -83,17 +83,17 @@ def collect() -> dict[str, Any]:
8383 # This also doesn't load work in all cases since we don't always
8484 # name the configuration entry the same as the integration module
8585 # name :/
86- config = ddtrace . config ._config .get (module , "N/A" )
86+ module_config = config ._config .get (module , "N/A" )
8787 else :
88- config = None
88+ module_config = None
8989
9090 if module_available :
9191 integration_configs [module ] = dict (
9292 enabled = enabled ,
9393 instrumented = module_instrumented ,
9494 module_version = packages_available [module ],
9595 module_imported = module_imported ,
96- config = config ,
96+ config = module_config ,
9797 )
9898
9999 pip_version = packages_available .get ("pip" , "N/A" )
@@ -117,26 +117,26 @@ def collect() -> dict[str, Any]:
117117 agent_url = agent_url ,
118118 agent_error = agent_error ,
119119 statsd_url = agent_config .dogstatsd_url ,
120- env = ddtrace . config .env or "" ,
121- ddtrace_enabled = ddtrace . config ._tracing_enabled ,
120+ env = config .env or "" ,
121+ ddtrace_enabled = config ._tracing_enabled ,
122122 sampling_rules = sampling_rules ,
123- service = ddtrace . config .service or "" ,
123+ service = config .service or "" ,
124124 debug = logger .isEnabledFor (logging .DEBUG ),
125125 enabled_cli = "ddtrace" in env .get ("PYTHONPATH" , "" ),
126- log_injection_enabled = ddtrace . config ._logs_injection ,
127- health_metrics_enabled = ddtrace . config ._health_metrics_enabled ,
126+ log_injection_enabled = config ._logs_injection ,
127+ health_metrics_enabled = config ._health_metrics_enabled ,
128128 runtime_metrics_enabled = RuntimeWorker .enabled ,
129- dd_version = ddtrace . config .version or "" ,
130- global_tags = tags_to_str (ddtrace . config .tags ),
131- tracer_tags = tags_to_str (tracer . _tags ),
129+ dd_version = config .version or "" ,
130+ global_tags = tags_to_str (config .tags ),
131+ tracer_tags = tags_to_str (tracer_info . tags ),
132132 integrations = integration_configs ,
133- partial_flush_enabled = tracer . _span_aggregator .partial_flush_enabled ,
134- partial_flush_min_spans = tracer . _span_aggregator .partial_flush_min_spans ,
133+ partial_flush_enabled = tracer_info .partial_flush_enabled ,
134+ partial_flush_min_spans = tracer_info .partial_flush_min_spans ,
135135 asm_enabled = asm_config ._asm_enabled ,
136136 iast_enabled = asm_config ._iast_enabled ,
137137 waf_timeout = asm_config ._waf_timeout ,
138- remote_config_enabled = ddtrace . config ._remote_config_enabled ,
139- config_endpoint = ddtrace . config ._from_endpoint ,
138+ remote_config_enabled = config ._remote_config_enabled ,
139+ config_endpoint = config ._from_endpoint ,
140140 crashtracking_enabled = crashtracker_config .enabled ,
141141 gitmetadata_enabled = gitmetadata .config .enabled ,
142142 git_repository_url = git_repository_url ,
@@ -146,7 +146,7 @@ def collect() -> dict[str, Any]:
146146 )
147147
148148
149- def pretty_collect (color = True ):
149+ def pretty_collect (tracer : Any , color = True ):
150150 class bcolors :
151151 HEADER = "\033 [95m"
152152 OKBLUE = "\033 [94m"
@@ -167,7 +167,7 @@ class bcolors:
167167 bcolors .ENDC = ""
168168 bcolors .BOLD = ""
169169
170- info = collect ()
170+ info = collect (TracerDebugInfo . from_tracer ( tracer ) )
171171
172172 info_pretty = """{blue}{bold}Tracer Configurations:{end}
173173 Tracer enabled: {tracer_enabled}
0 commit comments