From 68565e716277a2343b8197f13b8c8a75f1baab48 Mon Sep 17 00:00:00 2001 From: Ayan Khan Date: Mon, 30 Mar 2026 23:42:37 -0400 Subject: [PATCH 1/6] fix(telemetry): use configured extended heartbeat interval instead of hardcoded 24h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL was parsed from the environment into config but never used — the scheduler hardcoded 24h. This wires up the config value so the interval is actually configurable for testing. The default remains 24h (set in config.rs). This only matters for system tests that need a shorter interval to validate the event fires. Co-Authored-By: Claude Opus 4.6 (1M context) --- libdd-telemetry/src/worker/mod.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libdd-telemetry/src/worker/mod.rs b/libdd-telemetry/src/worker/mod.rs index 3bfa1bcccb..2bcbd0163b 100644 --- a/libdd-telemetry/src/worker/mod.rs +++ b/libdd-telemetry/src/worker/mod.rs @@ -1108,6 +1108,7 @@ impl TelemetryWorkerBuilder { let token = CancellationToken::new(); let config = self.config; let telemetry_heartbeat_interval = config.telemetry_heartbeat_interval; + let telemetry_extended_heartbeat_interval = config.telemetry_extended_heartbeat_interval; let client = http_client::from_config(&config); let metrics_flush_interval = @@ -1140,7 +1141,7 @@ impl TelemetryWorkerBuilder { (metrics_flush_interval, LifecycleAction::FlushMetricAggr), (telemetry_heartbeat_interval, LifecycleAction::FlushData), ( - time::Duration::from_secs(60 * 60 * 24), + telemetry_extended_heartbeat_interval, LifecycleAction::ExtendedHeartbeat, ), ]), From 41bd935c7903044b9a2da524b5a8183ee6bd6642 Mon Sep 17 00:00:00 2001 From: Ayan Khan Date: Mon, 30 Mar 2026 23:47:38 -0400 Subject: [PATCH 2/6] fix(telemetry): add telemetry_extended_heartbeat_interval to Config struct The field was only on Settings but not propagated to Config, which is what the worker actually uses. Co-Authored-By: Claude Opus 4.6 (1M context) --- libdd-telemetry/src/config.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libdd-telemetry/src/config.rs b/libdd-telemetry/src/config.rs index 07dd8dfb69..eb4d3efde3 100644 --- a/libdd-telemetry/src/config.rs +++ b/libdd-telemetry/src/config.rs @@ -27,6 +27,7 @@ pub struct Config { /// Enables debug logging pub telemetry_debug_logging_enabled: bool, pub telemetry_heartbeat_interval: Duration, + pub telemetry_extended_heartbeat_interval: Duration, pub direct_submission_enabled: bool, /// Prevents LifecycleAction::Stop from terminating the worker (except if the WorkerHandle is /// dropped) @@ -163,6 +164,7 @@ impl Default for Config { endpoint: None, telemetry_debug_logging_enabled: false, telemetry_heartbeat_interval: Duration::from_secs(60), + telemetry_extended_heartbeat_interval: Duration::from_secs(60 * 60 * 24), direct_submission_enabled: false, restartable: false, debug_enabled: false, @@ -246,6 +248,7 @@ impl Config { endpoint: None, telemetry_debug_logging_enabled: settings.shared_lib_debug, telemetry_heartbeat_interval: settings.telemetry_heartbeat_interval, + telemetry_extended_heartbeat_interval: settings.telemetry_extended_heartbeat_interval, direct_submission_enabled: settings.direct_submission_enabled, restartable: false, debug_enabled: false, From 5ae72b2ebc3e75a7909de88bc01f17fbe5e692da Mon Sep 17 00:00:00 2001 From: Ayan Khan Date: Tue, 31 Mar 2026 12:29:41 -0400 Subject: [PATCH 3/6] test(telemetry): add unit tests for extended heartbeat interval propagation Verify that Config::from_settings() correctly propagates a custom extended_heartbeat_interval from Settings, and that the default value is 24h. Co-Authored-By: Claude Opus 4.6 (1M context) --- libdd-telemetry/src/config.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/libdd-telemetry/src/config.rs b/libdd-telemetry/src/config.rs index eb4d3efde3..c84e497e14 100644 --- a/libdd-telemetry/src/config.rs +++ b/libdd-telemetry/src/config.rs @@ -476,4 +476,29 @@ mod tests { .to_string_lossy() ); } + + #[test] + fn test_from_settings_propagates_extended_heartbeat_interval() { + use std::time::Duration; + + let custom_interval = Duration::from_secs(120); + let settings = Settings { + telemetry_extended_heartbeat_interval: custom_interval, + ..Default::default() + }; + let cfg = Config::from_settings(&settings); + assert_eq!(cfg.telemetry_extended_heartbeat_interval, custom_interval); + } + + #[test] + fn test_from_settings_default_extended_heartbeat_interval() { + use std::time::Duration; + + let settings = Settings::default(); + let cfg = Config::from_settings(&settings); + assert_eq!( + cfg.telemetry_extended_heartbeat_interval, + Duration::from_secs(60 * 60 * 24) + ); + } } From 8707073f3bd0e9e976200adf772c877e536bd779 Mon Sep 17 00:00:00 2001 From: Ayan Khan Date: Tue, 31 Mar 2026 12:34:01 -0400 Subject: [PATCH 4/6] test(telemetry): add env var test for DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Verify the full env var → Settings::from_env() → Config flow by setting DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL=5 and asserting the parsed duration is 5s. Co-Authored-By: Claude Opus 4.6 (1M context) --- libdd-telemetry/src/config.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/libdd-telemetry/src/config.rs b/libdd-telemetry/src/config.rs index c84e497e14..6c5cfcde1f 100644 --- a/libdd-telemetry/src/config.rs +++ b/libdd-telemetry/src/config.rs @@ -501,4 +501,23 @@ mod tests { Duration::from_secs(60 * 60 * 24) ); } + + #[test] + fn test_extended_heartbeat_interval_from_env() { + use std::time::Duration; + + // SAFETY: env var tests in this repo use set_var directly; run with + // --test-threads=1 if parallel env mutation is a concern. + unsafe { + std::env::set_var("DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL", "5"); + } + let settings = Settings::from_env(); + assert_eq!( + settings.telemetry_extended_heartbeat_interval, + Duration::from_secs(5) + ); + unsafe { + std::env::remove_var("DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL"); + } + } } From 13d6d5915a7e691d163f76a8a4095709a8f69068 Mon Sep 17 00:00:00 2001 From: Ayan Khan Date: Tue, 31 Mar 2026 13:20:34 -0400 Subject: [PATCH 5/6] refactor(telemetry): use EnvGuard in extended heartbeat env var test Address review feedback: use EnvGuard from libdd-common test_utils instead of raw set_var/remove_var. Add libdd-common test-utils feature to dev-dependencies. Co-Authored-By: Claude Opus 4.6 (1M context) --- libdd-telemetry/Cargo.toml | 1 + libdd-telemetry/src/config.rs | 11 +++-------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/libdd-telemetry/Cargo.toml b/libdd-telemetry/Cargo.toml index 2780fb142b..63494763e0 100644 --- a/libdd-telemetry/Cargo.toml +++ b/libdd-telemetry/Cargo.toml @@ -43,3 +43,4 @@ winver = "1.0.0" [dev-dependencies] tracing-subscriber = "0.3.22" tokio = { version = "1.23", features = ["sync", "io-util", "rt-multi-thread"] } +libdd-common = { path = "../libdd-common", features = ["test-utils"] } diff --git a/libdd-telemetry/src/config.rs b/libdd-telemetry/src/config.rs index 6c5cfcde1f..8a237d5538 100644 --- a/libdd-telemetry/src/config.rs +++ b/libdd-telemetry/src/config.rs @@ -504,20 +504,15 @@ mod tests { #[test] fn test_extended_heartbeat_interval_from_env() { + use libdd_common::test_utils::EnvGuard; use std::time::Duration; - // SAFETY: env var tests in this repo use set_var directly; run with - // --test-threads=1 if parallel env mutation is a concern. - unsafe { - std::env::set_var("DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL", "5"); - } + let _guard = + EnvGuard::set("DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL", "5"); let settings = Settings::from_env(); assert_eq!( settings.telemetry_extended_heartbeat_interval, Duration::from_secs(5) ); - unsafe { - std::env::remove_var("DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL"); - } } } From 8db5dfc4d60cc10a5c8cb30b53edc07120f5e3b2 Mon Sep 17 00:00:00 2001 From: Ayan Khan Date: Tue, 31 Mar 2026 13:21:50 -0400 Subject: [PATCH 6/6] style: fix rustfmt formatting Co-Authored-By: Claude Opus 4.6 (1M context) --- libdd-telemetry/src/config.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libdd-telemetry/src/config.rs b/libdd-telemetry/src/config.rs index 8a237d5538..69da2ac0f0 100644 --- a/libdd-telemetry/src/config.rs +++ b/libdd-telemetry/src/config.rs @@ -507,8 +507,7 @@ mod tests { use libdd_common::test_utils::EnvGuard; use std::time::Duration; - let _guard = - EnvGuard::set("DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL", "5"); + let _guard = EnvGuard::set("DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL", "5"); let settings = Settings::from_env(); assert_eq!( settings.telemetry_extended_heartbeat_interval,