Mountain/IPC/Common/ServiceInfo/
ServicePerformance.rs1use std::time::Instant;
7
8use serde::Serialize;
9
10#[derive(Debug, Clone, Serialize)]
11pub struct Struct {
12 pub RequestCount:u64,
13
14 pub ErrorCount:u64,
15
16 pub AverageResponseTimeMs:f64,
17
18 #[serde(skip)]
19 pub LastUpdated:Instant,
20}
21
22impl Struct {
23 pub fn new() -> Self {
24 Self {
25 RequestCount:0,
26
27 ErrorCount:0,
28
29 AverageResponseTimeMs:0.0,
30
31 LastUpdated:Instant::now(),
32 }
33 }
34
35 pub fn RecordRequest(&mut self, ResponseTimeMs:f64) {
36 self.RequestCount += 1;
37
38 if self.AverageResponseTimeMs == 0.0 {
39 self.AverageResponseTimeMs = ResponseTimeMs;
40 } else {
41 self.AverageResponseTimeMs = (self.AverageResponseTimeMs * (self.RequestCount - 1) as f64 + ResponseTimeMs)
42 / self.RequestCount as f64;
43 }
44
45 self.LastUpdated = Instant::now();
46 }
47
48 pub fn RecordError(&mut self) {
49 self.ErrorCount += 1;
50
51 self.LastUpdated = Instant::now();
52 }
53
54 pub fn ErrorRate(&self) -> f64 {
55 if self.RequestCount == 0 {
56 return 0.0;
57 }
58
59 self.ErrorCount as f64 / self.RequestCount as f64
60 }
61}
62
63impl Default for Struct {
64 fn default() -> Self { Self::new() }
65}