byteflow/scheduler/
metrics.rs1use std::sync::atomic::{AtomicU64, Ordering};
2
3#[derive(Default)]
8pub struct RuntimeMetrics {
9 pub processes_spawned: AtomicU64,
10 pub processes_completed: AtomicU64,
11 pub processes_failed: AtomicU64,
12 pub messages_sent: AtomicU64,
13 pub steals: AtomicU64,
14 pub reschedules: AtomicU64,
15}
16
17impl RuntimeMetrics {
18 #[inline]
19 pub fn inc(counter: &AtomicU64) {
20 counter.fetch_add(1, Ordering::Relaxed);
21 }
22
23 pub fn snapshot(&self) -> RuntimeMetricsSnapshot {
24 RuntimeMetricsSnapshot {
25 processes_spawned: self.processes_spawned.load(Ordering::Relaxed),
26 processes_completed: self.processes_completed.load(Ordering::Relaxed),
27 processes_failed: self.processes_failed.load(Ordering::Relaxed),
28 messages_sent: self.messages_sent.load(Ordering::Relaxed),
29 steals: self.steals.load(Ordering::Relaxed),
30 reschedules: self.reschedules.load(Ordering::Relaxed),
31 }
32 }
33}
34
35#[derive(Debug, Clone, Copy, Default)]
38pub struct RuntimeMetricsSnapshot {
39 pub processes_spawned: u64,
40 pub processes_completed: u64,
41 pub processes_failed: u64,
42 pub messages_sent: u64,
43 pub steals: u64,
44 pub reschedules: u64,
45}
46
47impl std::fmt::Display for RuntimeMetricsSnapshot {
48 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
49 write!(
50 f,
51 "spawned={} completed={} failed={} messages={} steals={} reschedules={}",
52 self.processes_spawned,
53 self.processes_completed,
54 self.processes_failed,
55 self.messages_sent,
56 self.steals,
57 self.reschedules,
58 )
59 }
60}