Skip to main content

Mountain/IPC/Common/PerformanceMetrics/
ThroughputMetrics.rs

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