summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.toml3
-rw-r--r--README.md2
-rw-r--r--src/app/data_collection/processes.rs2
-rw-r--r--src/canvas.rs30
-rw-r--r--src/main.rs19
5 files changed, 44 insertions, 12 deletions
diff --git a/Cargo.toml b/Cargo.toml
index f93d7845..fbc29e93 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -22,7 +22,8 @@ sysinfo = "0.9.4"
tokio = "0.2.0-alpha.4"
[dependencies.tui]
-version = "0.6.2"
+git = "https://github.com/ClementTsang/tui-rs"
+#path = "../tui-rs"
default-features = false
features = ['crossterm']
diff --git a/README.md b/README.md
index 3f837540..488db01b 100644
--- a/README.md
+++ b/README.md
@@ -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)
* [sysinfo](https://github.com/GuillaumeGomez/sysinfo)
* [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
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(),
))
}