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}