radiate_core/stats/
time_statistic.rs

1use 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}