diff options
author | ClementTsang <clementjhtsang@gmail.com> | 2019-09-15 01:29:49 -0400 |
---|---|---|
committer | ClementTsang <clementjhtsang@gmail.com> | 2019-09-15 01:29:49 -0400 |
commit | 0eb993d1291cf35b1329dd1af08b4723a26b7044 (patch) | |
tree | e388f96c0b5389c6cd6db2a989dc45d29822b96d /src | |
parent | 282acd1395fb521be3ca94c7731abfdfa2c9ae0c (diff) |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/app/data_collection/processes.rs | 2 | ||||
-rw-r--r-- | src/canvas.rs | 30 | ||||
-rw-r--r-- | src/main.rs | 19 |
3 files changed, 41 insertions, 10 deletions
diff --git a/src/app/data_collection/processes.rs b/src/app/data_collection/processes.rs index b1d495bf..85ce5a61 100644 --- a/src/app/data_collection/processes.rs +++ b/src/app/data_collection/processes.rs @@ -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)> { 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?; Ok((process, usage_2 - usage_1)) diff --git a/src/canvas.rs b/src/canvas.rs index 7858c42b..2cd26c4d 100644 --- a/src/canvas.rs +++ b/src/canvas.rs @@ -5,7 +5,7 @@ use tui::{ 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 TEXT_COLOUR : Color = Color::Gray; @@ -27,7 +27,7 @@ pub struct CanvasData { 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 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() .direction(Direction::Vertical) .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()); 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 mut dataset_vector : Vec<Dataset> = Vec::new(); + 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::default() .name(&cpu.0) .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)), ); } + 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() .block(Block::default().title("CPU Usage").borders(Borders::ALL).border_style(border_style)) .x_axis(x_axis) diff --git a/src/main.rs b/src/main.rs index 75f66dc3..d771c6ec 100644 --- a/src/main.rs +++ b/src/main.rs @@ -103,19 +103,28 @@ fn main() -> error::Result<()> { data_state.set_temperature_type(app.temperature_type.clone()); { let tx = tx.clone(); + let mut first_run = true; thread::spawn(move || { let tx = tx.clone(); loop { futures::executor::block_on(data_state.update_data()); tx.send(Event::Update(Box::from(data_state.data.clone()))).unwrap(); - thread::sleep(Duration::from_millis(update_rate_in_milliseconds as u64)); + 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)); + } } }); } // Set up up tui and crossterm 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)?; terminal.hide_cursor()?; terminal.clear()?; @@ -172,7 +181,7 @@ fn main() -> error::Result<()> { } } // Draw! - canvas::draw_data(&mut terminal, &canvas_data)?; + canvas::draw_data(&mut terminal, &app, &canvas_data)?; } 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() { cpu_data_vector.push(( // + 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!("{:3}%", (data.last().unwrap_or(&(0_f64, 0_f64)).1.round() as u64)), + 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)), data.clone(), )) } |