use std::time::Duration;
use super::connection_stats::PeerConnectionStats;
#[derive(Debug, Clone, Copy)]
pub struct ConnectivityConfig {
pub min_connectivity: usize,
pub connection_pool_refresh_interval: Duration,
pub is_connection_reaping_enabled: bool,
pub reaper_min_connection_threshold: usize,
pub reaper_min_inactive_age: Duration,
pub max_failures_mark_offline: usize,
pub connection_tie_break_linger: Duration,
pub expire_peer_last_seen_duration: Duration,
pub maintain_n_closest_connections_only: Option<usize>,
pub proactive_dialing_floor: usize,
pub proactive_dialing_enabled: bool,
pub dialing_multiplier: f32,
pub success_rate_tracking_window: Duration,
pub circuit_breaker_failure_threshold: usize,
pub circuit_breaker_retry_interval: Duration,
pub max_seed_peer_age: Duration,
}
impl ConnectivityConfig {
pub(crate) fn is_circuit_broken(&self, stats: Option<&PeerConnectionStats>) -> bool {
stats.is_some_and(|stats| !stats.should_allow_connection(self.circuit_breaker_retry_interval))
}
}
impl Default for ConnectivityConfig {
fn default() -> Self {
Self {
min_connectivity: 1,
connection_pool_refresh_interval: Duration::from_secs(60),
reaper_min_inactive_age: Duration::from_secs(20 * 60),
reaper_min_connection_threshold: 50,
is_connection_reaping_enabled: true,
max_failures_mark_offline: 1,
connection_tie_break_linger: Duration::from_secs(2),
expire_peer_last_seen_duration: Duration::from_secs(24 * 60 * 60),
maintain_n_closest_connections_only: None,
proactive_dialing_floor: 8,
proactive_dialing_enabled: true,
dialing_multiplier: 2.5,
success_rate_tracking_window: Duration::from_secs(5 * 60),
circuit_breaker_failure_threshold: 3,
circuit_breaker_retry_interval: Duration::from_secs(2 * 60),
max_seed_peer_age: Duration::from_secs(15 * 60),
}
}
}