Skip to content

Track Windows platform support gaps in ADP (compile + runtime) #1719

@thieman

Description

@thieman

Context

ADP does not compile or run on Windows today. There are a handful of existing issues that address specific pieces (#1466 for DogStatsD named pipe, #519 for Agent service integration, #580 for CI), but no issue inventories the full set of compile and runtime gaps across the codebase. This issue serves as that catalog.

Related issues: #1466 (named pipe DogStatsD listener), #519 (Windows service / Agent integration), #580 (CI build/test).


What already exists (skeleton)

  • process-memory (lib/process-memory/src/windows.rs) uses GetProcessMemoryInfo via windows-sys. This is the one fully implemented Windows module.
  • DogStatsD config accepts named_pipe as a valid dogstatsd_eol_required value (no-op, for forward compat).

Compile blockers

1. PlatformSettings — no Windows implementation

File: lib/datadog-agent-commons/src/platform/mod.rs

There is a linux_impl.rs and a macos_impl.rs but no windows_impl.rs. PlatformSettings::get_config_dir_path(), get_log_file_path(), get_default_syslog_uri(), etc. are all gated on Linux/macOS cfg attributes. ADP will fail to compile on Windows because these constants are undefined.

Needs a windows_impl.rs with the standard Datadog Agent Windows paths (e.g., %ProgramData%\Datadog) matching what the Core Agent uses.

2. UDS types used unconditionally

Files: lib/saluki-io/src/net/listener.rs, lib/saluki-io/src/net/addr.rs, lib/saluki-app/src/logging/syslog.rs

All UDS listener and address variants (Unixgram, Unix) are #[cfg(unix)]. On Windows these arms are absent, but call sites that match on ListenAddress without the #[cfg(unix)] arm may produce unreachable/dead-code warnings or errors depending on how exhaustiveness plays out. Syslog unixgram:// / unix:// parsing is entirely #[cfg(unix)] with no Windows Event Log alternative.

3. IPC / secure API client — no named-pipe path

File: bin/agent-data-plane/src/cli/utils.rs

DataPlaneAPIClient::from_config has a #[cfg(unix)] branch for UDS connection. On Windows only TCP is compiled in. The Core Agent communicates with subagents on Windows via named pipes; the IPC cert/auth path also needs to account for Windows paths.


Runtime / feature gaps

4. DogStatsD named pipe listener — tracked in #1466

Files: lib/saluki-components/src/sources/dogstatsd/, lib/saluki-components/src/config_registry/datadog/unsupported.rs

dogstatsd_pipe_name and dogstatsd_windows_pipe_security_descriptor are explicitly marked SupportLevel::Incompatible with // Windows support not implemented. #1466. No ListenAddress::NamedPipe variant exists. See #1466 for full spec.

5. Workload metadata collectors — Linux/Unix only

Files: lib/saluki-env/src/workload/collectors/, lib/saluki-env/src/workload/on_demand_pid.rs

Both the cgroups collector (#[cfg(target_os = "linux")]) and the on-demand PID resolver (#[cfg(target_os = "linux")]) are absent on Windows. Container workload metadata would need a Windows-native mechanism or the remote tagger path used exclusively.

6. UDP autoscaling — Linux only

Same as macOS: SO_REUSEPORT multi-socket UDP autoscaling is Linux-only. On Windows ADP falls back to a single UDP socket.

7. Syslog — no Windows Event Log

File: lib/saluki-app/src/logging/syslog.rs

Syslog transport is #[cfg(unix)] for socket types; the #[cfg(not(unix))] branch only supports UDP/TCP syslog. There is no Windows Event Log integration.

8. APM named pipe config — explicitly not applicable

File: docs/agent-data-plane/configuration/dogstatsd/known-configs-not-applicable.json

apm_config.windows_pipe_name, apm_config.windows_pipe_buffer_size, apm_config.windows_pipe_security_descriptor are listed as not applicable. These will need revisiting when Windows support is active.

9. Agent service registration — tracked in #519

ADP needs a Windows service definition and the Core Agent needs updating to start/stop the ADP service. See #519 for details including the -foreground flag used for Kubernetes subagents on Windows.


Suggested implementation order

  1. PlatformSettings Windows implementation — unblocks compilation; define standard Windows paths matching the Core Agent installer.
  2. #[cfg] audit — ensure all #[cfg(unix)] call sites compile cleanly on Windows (dead code, exhaustive matches, etc.).
  3. Named pipe ListenAddress + DogStatsD listener — see Support Windows named pipe listener for DogStatsD (dogstatsd_pipe_name, dogstatsd_windows_pipe_security_descriptor). #1466 for full spec.
  4. IPC / API client named pipe path — needed for the Core Agent to communicate with ADP on Windows.
  5. Windows service registration — see Look into Agent changes for running ADP on Windows. #519.
  6. Syslog / Windows Event Log — low priority; TCP syslog fallback is usable.
  7. Workload metadata — remote tagger path works; Windows-native PID resolution would be a follow-on.

Metadata

Metadata

Assignees

Labels

area/componentsSources, transforms, and destinations.area/configConfiguration.area/ioGeneral I/O and networking.effort/complexInvolves complicated changes that require guidance and careful review.type/enhancementAn enhancement in functionality or support.

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions