41 lines
1.4 KiB
Rust
41 lines
1.4 KiB
Rust
//! For each interface, display the number of bytes sent and received, along with a data rate
|
|
|
|
fn main() {
|
|
let delay = std::time::Duration::from_secs(2);
|
|
|
|
let mut prev_stats = procfs::net::dev_status().unwrap();
|
|
let mut prev_now = std::time::Instant::now();
|
|
loop {
|
|
std::thread::sleep(delay);
|
|
let now = std::time::Instant::now();
|
|
let dev_stats = procfs::net::dev_status().unwrap();
|
|
|
|
// calculate diffs from previous
|
|
let dt = (now - prev_now).as_millis() as f32 / 1000.0;
|
|
|
|
let mut stats: Vec<_> = dev_stats.values().collect();
|
|
stats.sort_by_key(|s| &s.name);
|
|
println!();
|
|
println!(
|
|
"{:>16}: {:<20} {:<20} ",
|
|
"Interface", "bytes recv", "bytes sent"
|
|
);
|
|
println!(
|
|
"{:>16} {:<20} {:<20}",
|
|
"================", "====================", "===================="
|
|
);
|
|
for stat in stats {
|
|
println!(
|
|
"{:>16}: {:<20} {:>6.1} kbps {:<20} {:>6.1} kbps ",
|
|
stat.name,
|
|
stat.recv_bytes,
|
|
(stat.recv_bytes - prev_stats.get(&stat.name).unwrap().recv_bytes) as f32 / dt / 1000.0,
|
|
stat.sent_bytes,
|
|
(stat.sent_bytes - prev_stats.get(&stat.name).unwrap().sent_bytes) as f32 / dt / 1000.0
|
|
);
|
|
}
|
|
|
|
prev_stats = dev_stats;
|
|
prev_now = now;
|
|
}
|
|
}
|