mirror of
https://github.com/danog/ytop.git
synced 2024-11-30 04:29:10 +01:00
WIP net widget
This commit is contained in:
parent
03136753a4
commit
4b9958df1b
@ -1,7 +1,9 @@
|
|||||||
use num_rational::Ratio;
|
use num_rational::Ratio;
|
||||||
|
use psutil::network;
|
||||||
use tui::buffer::Buffer;
|
use tui::buffer::Buffer;
|
||||||
use tui::layout::Rect;
|
use tui::layout::Rect;
|
||||||
use tui::widgets::Widget;
|
use tui::style::{Color, Style};
|
||||||
|
use tui::widgets::{Sparkline, Widget};
|
||||||
|
|
||||||
use crate::update::UpdatableWidget;
|
use crate::update::UpdatableWidget;
|
||||||
use crate::widgets::block;
|
use crate::widgets::block;
|
||||||
@ -11,6 +13,14 @@ pub struct NetWidget {
|
|||||||
update_interval: Ratio<u64>,
|
update_interval: Ratio<u64>,
|
||||||
|
|
||||||
interfaces: String,
|
interfaces: String,
|
||||||
|
|
||||||
|
bytes_recv: Vec<u64>,
|
||||||
|
bytes_sent: Vec<u64>,
|
||||||
|
|
||||||
|
total_bytes_recv: u64,
|
||||||
|
total_bytes_sent: u64,
|
||||||
|
|
||||||
|
collector: network::NetIoCountersCollector,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NetWidget {
|
impl NetWidget {
|
||||||
@ -20,12 +30,35 @@ impl NetWidget {
|
|||||||
update_interval: Ratio::from_integer(1),
|
update_interval: Ratio::from_integer(1),
|
||||||
|
|
||||||
interfaces,
|
interfaces,
|
||||||
|
|
||||||
|
bytes_recv: Vec::new(),
|
||||||
|
bytes_sent: Vec::new(),
|
||||||
|
|
||||||
|
total_bytes_recv: 0,
|
||||||
|
total_bytes_sent: 0,
|
||||||
|
|
||||||
|
collector: network::NetIoCountersCollector::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl UpdatableWidget for NetWidget {
|
impl UpdatableWidget for NetWidget {
|
||||||
fn update(&mut self) {}
|
fn update(&mut self) {
|
||||||
|
let io_counters = self.collector.net_io_counters().unwrap();
|
||||||
|
|
||||||
|
if self.total_bytes_recv == 0 {
|
||||||
|
self.bytes_recv.push(0);
|
||||||
|
self.bytes_sent.push(0);
|
||||||
|
} else {
|
||||||
|
self.bytes_recv
|
||||||
|
.push(io_counters.bytes_recv() - self.total_bytes_recv);
|
||||||
|
self.bytes_sent
|
||||||
|
.push(io_counters.bytes_sent() - self.total_bytes_sent);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.total_bytes_recv = io_counters.bytes_recv();
|
||||||
|
self.total_bytes_sent = io_counters.bytes_sent();
|
||||||
|
}
|
||||||
|
|
||||||
fn get_update_interval(&self) -> Ratio<u64> {
|
fn get_update_interval(&self) -> Ratio<u64> {
|
||||||
self.update_interval
|
self.update_interval
|
||||||
@ -35,5 +68,36 @@ impl UpdatableWidget for NetWidget {
|
|||||||
impl Widget for NetWidget {
|
impl Widget for NetWidget {
|
||||||
fn draw(&mut self, area: Rect, buf: &mut Buffer) {
|
fn draw(&mut self, area: Rect, buf: &mut Buffer) {
|
||||||
block::new().title(&self.title).draw(area, buf);
|
block::new().title(&self.title).draw(area, buf);
|
||||||
|
|
||||||
|
let x = area.x + 1;
|
||||||
|
let y = area.y + 1;
|
||||||
|
let height = area.height - 2;
|
||||||
|
let width = area.width - 2;
|
||||||
|
|
||||||
|
let top_half = Rect {
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
width,
|
||||||
|
height: height / 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
let bottom_half = Rect {
|
||||||
|
x,
|
||||||
|
y: y + 1 + (height / 2),
|
||||||
|
width,
|
||||||
|
height: height / 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
Sparkline::default()
|
||||||
|
.data(&self.bytes_recv)
|
||||||
|
.max(*self.bytes_recv.iter().max().unwrap())
|
||||||
|
.style(Style::default().fg(Color::Red))
|
||||||
|
.draw(top_half, buf);
|
||||||
|
|
||||||
|
Sparkline::default()
|
||||||
|
.data(&self.bytes_sent)
|
||||||
|
.max(*self.bytes_sent.iter().max().unwrap())
|
||||||
|
.style(Style::default().fg(Color::Red))
|
||||||
|
.draw(bottom_half, buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user