use std::sync::atomic::{AtomicBool, AtomicU64, AtomicUsize, Ordering};
#[derive(Default)]
pub(crate) struct Stats {
pub(crate) active: AtomicBool,
pub(crate) published: AtomicUsize,
pub(crate) publish_failures: AtomicUsize,
pub(crate) polls: AtomicUsize,
pub(crate) poll_failures: AtomicUsize,
pub(crate) calls: AtomicUsize,
pub(crate) punched: AtomicUsize,
pub(crate) served: AtomicUsize,
pub(crate) accepted: AtomicUsize,
pub(crate) last_poll_unix: AtomicU64,
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct Standing {
pub active: bool,
pub published: u64,
pub calls: u64,
pub punched: u64,
pub served: u64,
pub accepted: u64,
pub last_poll_unix: u64,
}
impl Stats {
pub(crate) fn standing(&self) -> Standing {
let n = |counter: &AtomicUsize| counter.load(Ordering::Relaxed) as u64;
Standing {
active: self.active.load(Ordering::Relaxed),
published: n(&self.published),
calls: n(&self.calls),
punched: n(&self.punched),
served: n(&self.served),
accepted: n(&self.accepted),
last_poll_unix: self.last_poll_unix.load(Ordering::Relaxed),
}
}
}