Added a few changes - fix for slow start time feel, changed cpu legend display, added logic to make avg cpu display over everything. Also changed tui source to a fork.
This commit is contained in:
parent
282acd1395
commit
0eb993d129
|
@ -22,7 +22,8 @@ sysinfo = "0.9.4"
|
||||||
tokio = "0.2.0-alpha.4"
|
tokio = "0.2.0-alpha.4"
|
||||||
|
|
||||||
[dependencies.tui]
|
[dependencies.tui]
|
||||||
version = "0.6.2"
|
git = "https://github.com/ClementTsang/tui-rs"
|
||||||
|
#path = "../tui-rs"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ['crossterm']
|
features = ['crossterm']
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ Currently, I'm unable to test on MacOS, so I'm not sure how well this will work,
|
||||||
* [heim](https://github.com/heim-rs/heim)
|
* [heim](https://github.com/heim-rs/heim)
|
||||||
* [sysinfo](https://github.com/GuillaumeGomez/sysinfo)
|
* [sysinfo](https://github.com/GuillaumeGomez/sysinfo)
|
||||||
* [tokio](https://github.com/tokio-rs/tokio)
|
* [tokio](https://github.com/tokio-rs/tokio)
|
||||||
* [tui-rs](https://github.com/fdehau/tui-rs)
|
* [tui-rs](https://github.com/fdehau/tui-rs) (note I used a fork due to some issues I faced, you can find that [here](https://github.com/ClementTsang/tui-rs))
|
||||||
|
|
||||||
## Why
|
## Why
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ fn get_ordering<T : std::cmp::PartialOrd>(a_val : T, b_val : T, reverse_order :
|
||||||
|
|
||||||
async fn non_linux_cpu_usage(process : heim::process::Process) -> heim::process::ProcessResult<(heim::process::Process, heim_common::units::Ratio)> {
|
async fn non_linux_cpu_usage(process : heim::process::Process) -> heim::process::ProcessResult<(heim::process::Process, heim_common::units::Ratio)> {
|
||||||
let usage_1 = process.cpu_usage().await?;
|
let usage_1 = process.cpu_usage().await?;
|
||||||
futures_timer::Delay::new(std::time::Duration::from_millis(100)).await?;
|
futures_timer::Delay::new(std::time::Duration::from_millis(100)).await?; // TODO: For windows, make it like the linux check
|
||||||
let usage_2 = process.cpu_usage().await?;
|
let usage_2 = process.cpu_usage().await?;
|
||||||
|
|
||||||
Ok((process, usage_2 - usage_1))
|
Ok((process, usage_2 - usage_1))
|
||||||
|
|
|
@ -5,7 +5,7 @@ use tui::{
|
||||||
Terminal,
|
Terminal,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::utils::error;
|
use crate::{app, utils::error};
|
||||||
|
|
||||||
const COLOUR_LIST : [Color; 6] = [Color::Red, Color::Green, Color::LightYellow, Color::LightBlue, Color::LightCyan, Color::LightMagenta];
|
const COLOUR_LIST : [Color; 6] = [Color::Red, Color::Green, Color::LightYellow, Color::LightBlue, Color::LightCyan, Color::LightMagenta];
|
||||||
const TEXT_COLOUR : Color = Color::Gray;
|
const TEXT_COLOUR : Color = Color::Gray;
|
||||||
|
@ -27,7 +27,7 @@ pub struct CanvasData {
|
||||||
pub cpu_data : Vec<(String, Vec<(f64, f64)>)>,
|
pub cpu_data : Vec<(String, Vec<(f64, f64)>)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn draw_data<B : tui::backend::Backend>(terminal : &mut Terminal<B>, canvas_data : &CanvasData) -> error::Result<()> {
|
pub fn draw_data<B : tui::backend::Backend>(terminal : &mut Terminal<B>, app_data : &app::App, canvas_data : &CanvasData) -> error::Result<()> {
|
||||||
let border_style : Style = Style::default().fg(BORDER_STYLE_COLOUR);
|
let border_style : Style = Style::default().fg(BORDER_STYLE_COLOUR);
|
||||||
|
|
||||||
let temperature_rows = canvas_data.temp_sensor_data.iter().map(|sensor| Row::StyledData(sensor.iter(), Style::default().fg(TEXT_COLOUR)));
|
let temperature_rows = canvas_data.temp_sensor_data.iter().map(|sensor| Row::StyledData(sensor.iter(), Style::default().fg(TEXT_COLOUR)));
|
||||||
|
@ -39,7 +39,7 @@ pub fn draw_data<B : tui::backend::Backend>(terminal : &mut Terminal<B>, canvas_
|
||||||
let vertical_chunks = Layout::default()
|
let vertical_chunks = Layout::default()
|
||||||
.direction(Direction::Vertical)
|
.direction(Direction::Vertical)
|
||||||
.margin(1)
|
.margin(1)
|
||||||
.constraints([Constraint::Percentage(32), Constraint::Percentage(34), Constraint::Percentage(34)].as_ref())
|
.constraints([Constraint::Percentage(34), Constraint::Percentage(34), Constraint::Percentage(33)].as_ref())
|
||||||
.split(f.size());
|
.split(f.size());
|
||||||
|
|
||||||
let middle_chunks = Layout::default()
|
let middle_chunks = Layout::default()
|
||||||
|
@ -67,16 +67,38 @@ pub fn draw_data<B : tui::backend::Backend>(terminal : &mut Terminal<B>, canvas_
|
||||||
let y_axis = Axis::default().style(Style::default().fg(GRAPH_COLOUR)).bounds([-0.5, 100.0]).labels(&["0%", "100%"]);
|
let y_axis = Axis::default().style(Style::default().fg(GRAPH_COLOUR)).bounds([-0.5, 100.0]).labels(&["0%", "100%"]);
|
||||||
|
|
||||||
let mut dataset_vector : Vec<Dataset> = Vec::new();
|
let mut dataset_vector : Vec<Dataset> = Vec::new();
|
||||||
|
|
||||||
for (i, cpu) in canvas_data.cpu_data.iter().enumerate() {
|
for (i, cpu) in canvas_data.cpu_data.iter().enumerate() {
|
||||||
|
let mut avg_cpu_exist_offset = 0;
|
||||||
|
if app_data.show_average_cpu {
|
||||||
|
if i == 0 {
|
||||||
|
// Skip, we want to render the average cpu last!
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
avg_cpu_exist_offset = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dataset_vector.push(
|
dataset_vector.push(
|
||||||
Dataset::default()
|
Dataset::default()
|
||||||
.name(&cpu.0)
|
.name(&cpu.0)
|
||||||
.marker(GRAPH_MARKER)
|
.marker(GRAPH_MARKER)
|
||||||
.style(Style::default().fg(COLOUR_LIST[i % COLOUR_LIST.len()]))
|
.style(Style::default().fg(COLOUR_LIST[i - avg_cpu_exist_offset % COLOUR_LIST.len()]))
|
||||||
.data(&(cpu.1)),
|
.data(&(cpu.1)),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !canvas_data.cpu_data.is_empty() && app_data.show_average_cpu {
|
||||||
|
dataset_vector.push(
|
||||||
|
Dataset::default()
|
||||||
|
.name(&canvas_data.cpu_data[0].0)
|
||||||
|
.marker(GRAPH_MARKER)
|
||||||
|
.style(Style::default().fg(COLOUR_LIST[canvas_data.cpu_data.len() - 1 % COLOUR_LIST.len()]))
|
||||||
|
.data(&(canvas_data.cpu_data[0].1)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
Chart::default()
|
Chart::default()
|
||||||
.block(Block::default().title("CPU Usage").borders(Borders::ALL).border_style(border_style))
|
.block(Block::default().title("CPU Usage").borders(Borders::ALL).border_style(border_style))
|
||||||
.x_axis(x_axis)
|
.x_axis(x_axis)
|
||||||
|
|
17
src/main.rs
17
src/main.rs
|
@ -103,19 +103,28 @@ fn main() -> error::Result<()> {
|
||||||
data_state.set_temperature_type(app.temperature_type.clone());
|
data_state.set_temperature_type(app.temperature_type.clone());
|
||||||
{
|
{
|
||||||
let tx = tx.clone();
|
let tx = tx.clone();
|
||||||
|
let mut first_run = true;
|
||||||
thread::spawn(move || {
|
thread::spawn(move || {
|
||||||
let tx = tx.clone();
|
let tx = tx.clone();
|
||||||
loop {
|
loop {
|
||||||
futures::executor::block_on(data_state.update_data());
|
futures::executor::block_on(data_state.update_data());
|
||||||
tx.send(Event::Update(Box::from(data_state.data.clone()))).unwrap();
|
tx.send(Event::Update(Box::from(data_state.data.clone()))).unwrap();
|
||||||
|
if first_run {
|
||||||
|
// Fix for if you set a really long time for update periods (and just gives a faster first value)
|
||||||
|
thread::sleep(Duration::from_millis(250));
|
||||||
|
first_run = false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
thread::sleep(Duration::from_millis(update_rate_in_milliseconds as u64));
|
thread::sleep(Duration::from_millis(update_rate_in_milliseconds as u64));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up up tui and crossterm
|
// Set up up tui and crossterm
|
||||||
let screen = AlternateScreen::to_alternate(true)?;
|
let screen = AlternateScreen::to_alternate(true)?;
|
||||||
let backend = CrosstermBackend::with_alternate_screen(screen)?;
|
let stdout = std::io::stdout();
|
||||||
|
let backend = CrosstermBackend::with_alternate_screen(stdout, screen)?;
|
||||||
let mut terminal = Terminal::new(backend)?;
|
let mut terminal = Terminal::new(backend)?;
|
||||||
terminal.hide_cursor()?;
|
terminal.hide_cursor()?;
|
||||||
terminal.clear()?;
|
terminal.clear()?;
|
||||||
|
@ -172,7 +181,7 @@ fn main() -> error::Result<()> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Draw!
|
// Draw!
|
||||||
canvas::draw_data(&mut terminal, &canvas_data)?;
|
canvas::draw_data(&mut terminal, &app, &canvas_data)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
debug!("Terminating.");
|
debug!("Terminating.");
|
||||||
|
@ -293,8 +302,8 @@ fn update_cpu_data_points(show_avg_cpu : bool, app_data : &data_collection::Data
|
||||||
for (i, data) in cpu_collection.iter().enumerate() {
|
for (i, data) in cpu_collection.iter().enumerate() {
|
||||||
cpu_data_vector.push((
|
cpu_data_vector.push((
|
||||||
// + 1 to skip total CPU if show_avg_cpu is false
|
// + 1 to skip total CPU if show_avg_cpu is false
|
||||||
(&*(app_data.list_of_cpu_packages.last().unwrap().cpu_vec[i + if show_avg_cpu { 0 } else { 1 }].cpu_name)).to_string()
|
format!("{:4}: ", &*(app_data.list_of_cpu_packages.last().unwrap().cpu_vec[i + if show_avg_cpu { 0 } else { 1 }].cpu_name)).to_uppercase()
|
||||||
+ " " + &format!("{:3}%", (data.last().unwrap_or(&(0_f64, 0_f64)).1.round() as u64)),
|
+ &format!("{:3}%", (data.last().unwrap_or(&(0_f64, 0_f64)).1.round() as u64)),
|
||||||
data.clone(),
|
data.clone(),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue