pub struct ConnectionHealthMonitor {
pub thresholds: AlertThresholds,
pub connections: HashMap<String, ConnectionHealth>,
pub alerts: VecDeque<ChmHealthAlert>,
pub max_alerts: usize,
}Expand description
Tracks connection quality metrics per peer with health scoring, anomaly detection, and alerting.
Fields§
§thresholds: AlertThresholdsThreshold configuration for generating alerts.
connections: HashMap<String, ConnectionHealth>Per-peer health records.
alerts: VecDeque<ChmHealthAlert>Ring buffer of recent alerts.
max_alerts: usizeMaximum number of alerts to retain.
Implementations§
Source§impl ConnectionHealthMonitor
impl ConnectionHealthMonitor
Sourcepub fn new(thresholds: AlertThresholds, max_alerts: usize) -> Self
pub fn new(thresholds: AlertThresholds, max_alerts: usize) -> Self
Create a new monitor with the given thresholds and alert capacity.
Sourcepub fn record(&mut self, sample: ChmHealthSample) -> Vec<ChmHealthAlert>
pub fn record(&mut self, sample: ChmHealthSample) -> Vec<ChmHealthAlert>
Record a new sample for a peer, recompute its health score, and return any new alerts that were triggered.
Sourcepub fn health_score(&self, peer_id: &str) -> Option<f64>
pub fn health_score(&self, peer_id: &str) -> Option<f64>
Return the current health score for a peer, if tracked.
Sourcepub fn compute_health_score(conn: &ConnectionHealth) -> f64
pub fn compute_health_score(conn: &ConnectionHealth) -> f64
Compute the composite health score from a peer’s sample window.
Components and weights:
- Latency (0.30):
exp(-avg_latency / 1000.0) - Bandwidth (0.20):
(avg_bandwidth / 1_000_000.0).min(1.0) - Availability (0.20):
1.0 - avg_packet_loss - Jitter (0.15):
exp(-avg_jitter / 200.0) - Reliability (0.15):
1.0 - avg_error_rate
Missing metrics default to 0.5.
Sourcepub fn check_thresholds(
&self,
peer_id: &str,
metric: &ChmHealthMetric,
value: f64,
now: u64,
) -> Vec<ChmHealthAlert>
pub fn check_thresholds( &self, peer_id: &str, metric: &ChmHealthMetric, value: f64, now: u64, ) -> Vec<ChmHealthAlert>
Check whether value crosses warning or critical thresholds for the
given metric, and return any generated alerts.
Sourcepub fn peers_below_threshold(&self, min_score: f64) -> Vec<&str>
pub fn peers_below_threshold(&self, min_score: f64) -> Vec<&str>
Return the IDs of peers whose health score is below min_score,
sorted lexicographically.
Sourcepub fn recent_alerts(&self, since: u64) -> Vec<&ChmHealthAlert>
pub fn recent_alerts(&self, since: u64) -> Vec<&ChmHealthAlert>
Return all alerts with timestamp >= since.
Sourcepub fn clear_peer(&mut self, peer_id: &str) -> bool
pub fn clear_peer(&mut self, peer_id: &str) -> bool
Remove all health data for a peer. Returns true if the peer existed.
Sourcepub fn evict_stale(&mut self, max_age_ms: u64, now: u64) -> usize
pub fn evict_stale(&mut self, max_age_ms: u64, now: u64) -> usize
Evict peers that have not been updated within max_age_ms milliseconds.
Returns the number of peers evicted.
Sourcepub fn top_peers(&self, n: usize) -> Vec<(&str, f64)>
pub fn top_peers(&self, n: usize) -> Vec<(&str, f64)>
Return the top n peers by health score in descending order.
Sourcepub fn stats(&self) -> ChmMonitorStats
pub fn stats(&self) -> ChmMonitorStats
Compute aggregate statistics across all tracked peers.
Auto Trait Implementations§
impl Freeze for ConnectionHealthMonitor
impl RefUnwindSafe for ConnectionHealthMonitor
impl Send for ConnectionHealthMonitor
impl Sync for ConnectionHealthMonitor
impl Unpin for ConnectionHealthMonitor
impl UnsafeUnpin for ConnectionHealthMonitor
impl UnwindSafe for ConnectionHealthMonitor
Blanket Implementations§
impl<T> Allocation for T
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more