1use std::sync::atomic::{AtomicU64, Ordering};
2
3#[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}