diff --git a/libdd-telemetry/Cargo.toml b/libdd-telemetry/Cargo.toml index d4f300cf4e..66b8cd3f48 100644 --- a/libdd-telemetry/Cargo.toml +++ b/libdd-telemetry/Cargo.toml @@ -45,3 +45,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 07dd8dfb69..69da2ac0f0 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, @@ -473,4 +476,42 @@ 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) + ); + } + + #[test] + fn test_extended_heartbeat_interval_from_env() { + use libdd_common::test_utils::EnvGuard; + use std::time::Duration; + + 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) + ); + } } 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, ), ]),