Skip to main content

Mountain/IPC/Common/PerformanceMetrics/
ThroughputMetrics.rs

1
2//! Per-direction message + byte counters with a fixed start time so
3//! `MessagesPerSecond*` / `BytesPerSecond*` are derivable as
4//! divisions over the elapsed period.
5
6use std::time::Instant;
7
8#[derive(Debug, Clone)]
9pub struct Struct {
10	pub MessagesReceived:u64,
11
12	pub MessagesSent:u64,
13
14	pub BytesReceived:u64,
15
16	pub BytesSent:u64,
17
18	pub StartTime:Instant,
19}
20
21impl Struct {
22	pub fn new() -> Self {
23		Self {
24			MessagesReceived:0,
25
26			MessagesSent:0,
27
28			BytesReceived:0,
29
30			BytesSent:0,
31
32			StartTime:Instant::now(),
33		}
34	}
35
36	pub fn RecordReceived(&mut self, Bytes:u64) {
37		self.MessagesReceived += 1;
38
39		self.BytesReceived += Bytes;
40	}
41
42	pub fn RecordSent(&mut self, Bytes:u64) {
43		self.MessagesSent += 1;
44
45		self.BytesSent += Bytes;
46	}
47
48	pub fn MessagesPerSecondReceived(&self) -> f64 {
49		let Elapsed = self.StartTime.elapsed().as_secs_f64();
50
51		if Elapsed > 0.0 { self.MessagesReceived as f64 / Elapsed } else { 0.0 }
52	}
53
54	pub fn MessagesPerSecondSent(&self) -> f64 {
55		let Elapsed = self.StartTime.elapsed().as_secs_f64();
56
57		if Elapsed > 0.0 { self.MessagesSent as f64 / Elapsed } else { 0.0 }
58	}
59
60	pub fn BytesPerSecondReceived(&self) -> f64 {
61		let Elapsed = self.StartTime.elapsed().as_secs_f64();
62
63		if Elapsed > 0.0 { self.BytesReceived as f64 / Elapsed } else { 0.0 }
64	}
65
66	pub fn BytesPerSecondSent(&self) -> f64 {
67		let Elapsed = self.StartTime.elapsed().as_secs_f64();
68
69		if Elapsed > 0.0 { self.BytesSent as f64 / Elapsed } else { 0.0 }
70	}
71}
72
73impl Default for Struct {
74	fn default() -> Self { Self::new() }
75}