Mountain/IPC/Common/PerformanceMetrics/
ThroughputMetrics.rs1#![allow(non_snake_case)]
2
3use 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}