use std::sync::atomic::{AtomicU64, Ordering};
pub struct Metrics {
pub(crate) selects: AtomicU64,
pub(crate) observations: AtomicU64,
pub(crate) cooldowns_triggered: AtomicU64,
pub(crate) no_provider_available: AtomicU64,
}
impl Metrics {
pub(crate) fn new() -> Self {
Self {
selects: AtomicU64::new(0),
observations: AtomicU64::new(0),
cooldowns_triggered: AtomicU64::new(0),
no_provider_available: AtomicU64::new(0),
}
}
pub fn selects(&self) -> u64 {
self.selects.load(Ordering::Relaxed)
}
pub fn observations(&self) -> u64 {
self.observations.load(Ordering::Relaxed)
}
pub fn cooldowns_triggered(&self) -> u64 {
self.cooldowns_triggered.load(Ordering::Relaxed)
}
pub fn no_provider_available(&self) -> u64 {
self.no_provider_available.load(Ordering::Relaxed)
}
}
impl Default for Metrics {
fn default() -> Self {
Self::new()
}
}