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