Mountain/IPC/Common/PerformanceMetrics/
ThroughputMetrics.rs1
2use 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}