mprober_lib/volume/
volume_stat.rs

1use std::time::Duration;
2
3#[derive(Default, Debug, Clone)]
4pub struct VolumeSpeed {
5    pub read:  f64,
6    pub write: f64,
7}
8
9#[derive(Default, Debug, Clone, Eq, PartialEq)]
10pub struct VolumeStat {
11    pub read_bytes:  u64,
12    pub write_bytes: u64,
13}
14
15impl VolumeStat {
16    /// Calculate speed between two `VolumeStat` instances at different time.
17    ///
18    /// ```rust
19    /// use std::{thread::sleep, time::Duration};
20    ///
21    /// use mprober_lib::volume;
22    ///
23    /// let pre_volumes = volume::get_volumes().unwrap();
24    ///
25    /// let interval = Duration::from_millis(100);
26    ///
27    /// sleep(interval);
28    ///
29    /// let volumes = volume::get_volumes().unwrap();
30    ///
31    /// if !pre_volumes.is_empty() && !volumes.is_empty() {
32    ///     let volume_speed =
33    ///         pre_volumes[0].stat.compute_speed(&volumes[0].stat, interval);
34    ///
35    ///     println!("Read: {:.1} B/s", volume_speed.read);
36    ///     println!("Write: {:.1} B/s", volume_speed.write);
37    /// }
38    /// ```
39    #[inline]
40    pub fn compute_speed(
41        &self,
42        volume_stat_after_this: &VolumeStat,
43        interval: Duration,
44    ) -> VolumeSpeed {
45        let seconds = interval.as_secs_f64();
46        let d_read = volume_stat_after_this.read_bytes - self.read_bytes;
47        let d_write = volume_stat_after_this.write_bytes - self.write_bytes;
48
49        let read = d_read as f64 / seconds;
50        let write = d_write as f64 / seconds;
51
52        VolumeSpeed {
53            read,
54            write,
55        }
56    }
57}