use std::time::Duration;
pub mod nat_traversal {
use super::*;
pub const COORDINATION_TIMEOUT: Duration = Duration::from_secs(10);
pub const COORDINATION_GRACE_PERIOD: Duration = Duration::from_millis(500);
pub const TOTAL_TIMEOUT: Duration = Duration::from_secs(30);
pub const HOLE_PUNCH_TIMEOUT: Duration = Duration::from_secs(5);
pub const KEEP_ALIVE_INTERVAL: Duration = Duration::from_secs(5);
pub const VALIDATION_CACHE_TIMEOUT: Duration = Duration::from_secs(300);
pub const RATE_LIMIT_WINDOW: Duration = Duration::from_secs(60);
pub const SESSION_TIMEOUT: Duration = Duration::from_secs(300);
pub const OBSERVATION_TIMEOUT: Duration = Duration::from_secs(3600);
pub const BASE_TIMEOUT: Duration = Duration::from_millis(1000);
pub const MIN_TIMEOUT: Duration = Duration::from_millis(100);
pub const MAX_TIMEOUT: Duration = Duration::from_secs(30);
}
pub mod discovery {
use super::*;
pub const TOTAL_TIMEOUT: Duration = Duration::from_secs(30);
pub const LOCAL_SCAN_TIMEOUT: Duration = Duration::from_secs(2);
pub const BOOTSTRAP_QUERY_TIMEOUT: Duration = Duration::from_secs(5);
pub const INTERFACE_CACHE_TTL: Duration = Duration::from_secs(60);
pub const SERVER_REFLEXIVE_CACHE_TTL: Duration = Duration::from_secs(300);
pub const LONG_OPERATION_TIMEOUT: Duration = Duration::from_secs(10);
}
pub mod connection {
use super::*;
pub const DIRECT_CONNECTION_TIMEOUT: Duration = Duration::from_secs(5);
pub const CONNECTION_TIMEOUT: Duration = Duration::from_secs(10);
pub const SOCKET_READ_TIMEOUT: Duration = Duration::from_millis(100);
pub const POLL_INTERVAL: Duration = Duration::from_millis(10);
pub const CLEANUP_INTERVAL: Duration = Duration::from_secs(30);
pub const CANDIDATE_TIMEOUT: Duration = Duration::from_secs(300);
pub const VALIDATION_TIMEOUT: Duration = Duration::from_secs(30);
}
pub mod monitoring {
use super::*;
pub const CLEANUP_INTERVAL: Duration = Duration::from_secs(60);
pub const RECOVERY_TIMEOUT: Duration = Duration::from_secs(300);
pub const RETENTION_PERIOD: Duration = Duration::from_secs(3600);
pub const FLUSH_INTERVAL: Duration = Duration::from_secs(60);
pub const EVALUATION_INTERVAL: Duration = Duration::from_secs(30);
pub const DEDUPLICATION_WINDOW: Duration = Duration::from_secs(300);
}
pub mod retry {
use super::*;
pub const INITIAL_DELAY: Duration = Duration::from_millis(100);
pub const STANDARD_DELAY: Duration = Duration::from_millis(500);
pub const MAX_DELAY: Duration = Duration::from_secs(30);
pub const ATTEMPT_TIMEOUT: Duration = Duration::from_secs(10);
}
pub mod rtt {
use super::*;
pub const EXCELLENT_THRESHOLD: Duration = Duration::from_millis(50);
pub const GOOD_THRESHOLD: Duration = Duration::from_millis(100);
pub const FAIR_THRESHOLD: Duration = Duration::from_millis(200);
pub const POOR_THRESHOLD: Duration = Duration::from_millis(500);
pub const DEFAULT_RTT: Duration = Duration::from_millis(100);
pub const BASE_GRACE_PERIOD: Duration = Duration::from_millis(150);
}
pub mod work_limiter {
use super::*;
pub const CYCLE_TIME: Duration = Duration::from_millis(500);
pub const BATCH_TIME: Duration = Duration::from_millis(100);
pub const LOCK_CONTENTION_THRESHOLD: Duration = Duration::from_millis(1);
}
pub mod circuit_breaker {
use super::*;
pub const TIMEOUT: Duration = Duration::from_secs(60);
pub const WINDOW_SIZE: Duration = Duration::from_secs(300);
}
pub mod escalation {
use super::*;
pub const WARNING_TIME: Duration = Duration::from_secs(60);
pub const CRITICAL_TIME: Duration = Duration::from_secs(300);
pub const PAGE_TIME: Duration = Duration::from_secs(600);
}
pub mod workflow {
use super::*;
pub const DEFAULT_TIMEOUT: Duration = Duration::from_secs(300);
pub const STEP_TIMEOUT: Duration = Duration::from_secs(10);
pub const POLL_INTERVAL: Duration = Duration::from_secs(1);
}
pub mod congestion {
use super::*;
pub const PROBE_RTT_TIME: Duration = Duration::from_millis(200);
pub const CYCLE_LENGTH: Duration = Duration::from_secs(10);
}
pub mod helpers {
use super::*;
pub fn from_env_or_default(env_var: &str, default: Duration) -> Duration {
std::env::var(env_var)
.ok()
.and_then(|s| s.parse::<u64>().ok())
.map(Duration::from_secs)
.unwrap_or(default)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_timeout_values_are_reasonable() {
assert!(nat_traversal::MIN_TIMEOUT < nat_traversal::MAX_TIMEOUT);
assert!(rtt::EXCELLENT_THRESHOLD < rtt::GOOD_THRESHOLD);
assert!(rtt::GOOD_THRESHOLD < rtt::FAIR_THRESHOLD);
assert!(rtt::FAIR_THRESHOLD < rtt::POOR_THRESHOLD);
assert!(retry::INITIAL_DELAY < retry::STANDARD_DELAY);
assert!(retry::STANDARD_DELAY < retry::MAX_DELAY);
}
}