Mountain/IPC/Common/PerformanceMetrics/
ThroughputMetrics.rs1use std::time::Instant;
6
7#[derive(Debug, Clone)]
8pub struct Struct {
9 pub MessagesReceived:u64,
10
11 pub MessagesSent:u64,
12
13 pub BytesReceived:u64,
14
15 pub BytesSent:u64,
16
17 pub StartTime:Instant,
18}
19
20impl Struct {
21 pub fn new() -> Self {
22 Self {
23 MessagesReceived:0,
24
25 MessagesSent:0,
26
27 BytesReceived:0,
28
29 BytesSent:0,
30
31 StartTime:Instant::now(),
32 }
33 }
34
35 pub fn RecordReceived(&mut self, Bytes:u64) {
36 self.MessagesReceived += 1;
37
38 self.BytesReceived += Bytes;
39 }
40
41 pub fn RecordSent(&mut self, Bytes:u64) {
42 self.MessagesSent += 1;
43
44 self.BytesSent += Bytes;
45 }
46
47 pub fn MessagesPerSecondReceived(&self) -> f64 {
48 let Elapsed = self.StartTime.elapsed().as_secs_f64();
49
50 if Elapsed > 0.0 { self.MessagesReceived as f64 / Elapsed } else { 0.0 }
51 }
52
53 pub fn MessagesPerSecondSent(&self) -> f64 {
54 let Elapsed = self.StartTime.elapsed().as_secs_f64();
55
56 if Elapsed > 0.0 { self.MessagesSent as f64 / Elapsed } else { 0.0 }
57 }
58
59 pub fn BytesPerSecondReceived(&self) -> f64 {
60 let Elapsed = self.StartTime.elapsed().as_secs_f64();
61
62 if Elapsed > 0.0 { self.BytesReceived as f64 / Elapsed } else { 0.0 }
63 }
64
65 pub fn BytesPerSecondSent(&self) -> f64 {
66 let Elapsed = self.StartTime.elapsed().as_secs_f64();
67
68 if Elapsed > 0.0 { self.BytesSent as f64 / Elapsed } else { 0.0 }
69 }
70}
71
72impl Default for Struct {
73 fn default() -> Self { Self::new() }
74}