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}