Skip to main content

sprite_core/
metrics.rs

1use std::sync::atomic::{AtomicU64, Ordering};
2
3/// Per-actor metrics. Lightweight, lock-free counters.
4#[derive(Debug)]
5pub struct ActorMetrics {
6    messages_received: AtomicU64,
7    messages_sent: AtomicU64,
8    recoveries: AtomicU64,
9    panics: AtomicU64,
10}
11
12impl ActorMetrics {
13    pub fn new() -> Self {
14        Self {
15            messages_received: AtomicU64::new(0),
16            messages_sent: AtomicU64::new(0),
17            recoveries: AtomicU64::new(0),
18            panics: AtomicU64::new(0),
19        }
20    }
21    pub fn inc_received(&self) { self.messages_received.fetch_add(1, Ordering::Relaxed); }
22    pub fn inc_sent(&self) { self.messages_sent.fetch_add(1, Ordering::Relaxed); }
23    pub fn inc_recovery(&self) { self.recoveries.fetch_add(1, Ordering::Relaxed); }
24    pub fn inc_panic(&self) { self.panics.fetch_add(1, Ordering::Relaxed); }
25    pub fn messages_received(&self) -> u64 { self.messages_received.load(Ordering::Relaxed) }
26    pub fn messages_sent(&self) -> u64 { self.messages_sent.load(Ordering::Relaxed) }
27    pub fn recoveries(&self) -> u64 { self.recoveries.load(Ordering::Relaxed) }
28    pub fn panics(&self) -> u64 { self.panics.load(Ordering::Relaxed) }
29}
30
31impl Default for ActorMetrics {
32    fn default() -> Self { Self::new() }
33}