mprober_lib/network/
network_stat.rs

1use std::time::Duration;
2
3#[derive(Default, Debug, Clone)]
4pub struct NetworkSpeed {
5    pub receive:  f64,
6    pub transmit: f64,
7}
8
9#[derive(Default, Debug, Clone, Eq, PartialEq)]
10pub struct NetworkStat {
11    pub receive_bytes:  u64,
12    pub transmit_bytes: u64,
13}
14
15impl NetworkStat {
16    /// Calculate speed between two `NetworkStat` instances at different time.
17    ///
18    /// ```rust
19    /// use std::{thread::sleep, time::Duration};
20    ///
21    /// use mprober_lib::network;
22    ///
23    /// let pre_networks = network::get_networks().unwrap();
24    ///
25    /// let interval = Duration::from_millis(100);
26    ///
27    /// sleep(interval);
28    ///
29    /// let networks = network::get_networks().unwrap();
30    ///
31    /// if !pre_networks.is_empty() && !networks.is_empty() {
32    ///     let network_speed =
33    ///         pre_networks[0].stat.compute_speed(&networks[0].stat, interval);
34    ///
35    ///     println!("Receive: {:.1} B/s", network_speed.receive);
36    ///     println!("Transmit: {:.1} B/s", network_speed.transmit);
37    /// }
38    /// ```
39    #[inline]
40    pub fn compute_speed(
41        &self,
42        network_stat_after_this: &NetworkStat,
43        interval: Duration,
44    ) -> NetworkSpeed {
45        let seconds = interval.as_secs_f64();
46        let d_receive = network_stat_after_this.receive_bytes - self.receive_bytes;
47        let d_transmit = network_stat_after_this.transmit_bytes - self.transmit_bytes;
48
49        let receive = d_receive as f64 / seconds;
50        let transmit = d_transmit as f64 / seconds;
51
52        NetworkSpeed {
53            receive,
54            transmit,
55        }
56    }
57}