use std::time::Duration;
use netring::prelude::*;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let iface = std::env::args().nth(1).unwrap_or_else(|| "lo".into());
let mut table = LabelTable::new();
table.set(L4Proto::Tcp, 8765, "grpc-internal");
table.set(L4Proto::Tcp, 9101, "telemetry");
table.set(L4Proto::Udp, 6831, "jaeger");
eprintln!("monitor_label_table: per-app bandwidth on {iface} with custom labels (Ctrl-C)");
Monitor::builder()
.interface(&iface)
.label_table(table) .on_bandwidth(Duration::from_secs(5), |bw: &BandwidthReport<'_>| {
println!("─── bandwidth by app ───");
for (app, bps) in bw.top(15) {
println!("{app:<16} {bps:>12.0} B/s");
}
Ok(())
})
.sink(StdoutSink::default())
.build()?
.run_until_signal()
.await?;
Ok(())
}