radiate_core/stats/
time_statistic.rs1use crate::Statistic;
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4use std::time::Duration;
5
6#[derive(Clone, PartialEq, Default)]
7#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8pub struct TimeStatistic {
9 pub statistic: Statistic,
10 pub last_time: Duration,
11}
12
13impl TimeStatistic {
14 pub fn new(initial_val: Duration) -> Self {
15 let mut result = TimeStatistic::default();
16 result.add(initial_val);
17 result
18 }
19
20 pub fn add(&mut self, value: Duration) {
21 self.statistic.add(value.as_secs_f32());
22 self.last_time = value;
23 }
24
25 pub fn last_time(&self) -> Duration {
26 self.last_time
27 }
28
29 pub fn count(&self) -> i32 {
30 self.statistic.count()
31 }
32
33 pub fn mean(&self) -> Duration {
34 Duration::from_secs_f32(self.statistic.mean())
35 }
36
37 pub fn variance(&self) -> Duration {
38 Duration::from_secs_f32(self.statistic.variance())
39 }
40
41 pub fn standard_deviation(&self) -> Duration {
42 Duration::from_secs_f32(self.statistic.std_dev())
43 }
44
45 pub fn min(&self) -> Duration {
46 Duration::from_secs_f32(self.statistic.min())
47 }
48
49 pub fn max(&self) -> Duration {
50 Duration::from_secs_f32(self.statistic.max())
51 }
52
53 pub fn sum(&self) -> Duration {
54 Duration::from_secs_f32(self.statistic.sum())
55 }
56
57 pub fn clear(&mut self) {
58 self.statistic.clear();
59 }
60}
61
62impl From<Duration> for TimeStatistic {
63 fn from(value: Duration) -> Self {
64 TimeStatistic::new(value)
65 }
66}