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