use std::time::Instant;
#[derive(Debug, Clone)]
pub struct KeepAliveConfig {
pub keep_alive_interval: std::time::Duration,
pub stale_threshold: std::time::Duration,
pub enable_proactive_ping: bool,
pub ping_timeout: std::time::Duration,
}
impl Default for KeepAliveConfig {
fn default() -> Self {
Self {
keep_alive_interval: std::time::Duration::from_secs(30),
stale_threshold: std::time::Duration::from_secs(60),
enable_proactive_ping: true,
ping_timeout: std::time::Duration::from_secs(5),
}
}
}
#[derive(Debug, Clone)]
pub struct KeepAliveStatistics {
pub total_connections_created: usize,
pub total_connections_refreshed: usize,
pub total_stale_detected: usize,
pub total_proactive_pings: usize,
pub total_ping_failures: usize,
pub active_connections: usize,
pub avg_time_saved_ms: u64,
pub last_activity: Instant,
}
impl Default for KeepAliveStatistics {
fn default() -> Self {
Self {
total_connections_created: 0,
total_connections_refreshed: 0,
total_stale_detected: 0,
total_proactive_pings: 0,
total_ping_failures: 0,
active_connections: 0,
avg_time_saved_ms: 0,
last_activity: Instant::now(),
}
}
}
impl KeepAliveStatistics {
pub fn update_activity(&mut self) {
self.last_activity = Instant::now();
}
}