summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClementTsang <clementjhtsang@gmail.com>2019-12-28 01:20:05 -0500
committerClementTsang <clementjhtsang@gmail.com>2019-12-28 01:20:05 -0500
commitad4f124d9d0f87b3f21169d8c8d08267596cfaae (patch)
treeeca62d89c69824b120195ac50400b3f5a91c2f19
parentf7243bd78b571065bf1292d0d06e7736903c519a (diff)
Rearrange to fit legend and extra info.
-rw-r--r--src/app.rs82
-rw-r--r--src/canvas.rs154
-rw-r--r--src/data_conversion.rs28
-rw-r--r--src/utils/gen_util.rs8
4 files changed, 166 insertions, 106 deletions
diff --git a/src/app.rs b/src/app.rs
index 9dc1bedb..19c638f8 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -8,12 +8,12 @@ mod process_killer;
#[derive(Clone, Copy)]
pub enum ApplicationPosition {
- CPU,
- MEM,
- DISK,
- TEMP,
- NETWORK,
- PROCESS,
+ Cpu,
+ Mem,
+ Disk,
+ Temp,
+ Network,
+ Process,
}
pub enum ScrollDirection {
@@ -24,22 +24,23 @@ pub enum ScrollDirection {
}
pub struct App {
+ // Sorting
pub process_sorting_type: processes::ProcessSorting,
pub process_sorting_reverse: bool,
pub to_be_resorted: bool,
+ // Positioning
pub currently_selected_process_position: i64,
pub currently_selected_disk_position: i64,
pub currently_selected_temperature_position: i64,
+ pub scroll_direction: ScrollDirection,
+ pub previous_disk_position: i64,
+ pub previous_temp_position: i64,
+ pub previous_process_position: i64,
pub temperature_type: temperature::TemperatureType,
pub update_rate_in_milliseconds: u64,
pub show_average_cpu: bool,
pub current_application_position: ApplicationPosition,
- pub current_zoom_level_percent: f64, // Make at most 200, least 50?
pub data: data_collection::Data,
- pub scroll_direction: ScrollDirection,
- pub previous_disk_position: i64,
- pub previous_temp_position: i64,
- pub previous_process_position: i64,
awaiting_second_char: bool,
second_char: char,
pub use_dot: bool,
@@ -63,13 +64,12 @@ impl App {
temperature_type,
update_rate_in_milliseconds,
show_average_cpu,
- current_application_position: ApplicationPosition::PROCESS,
- current_zoom_level_percent: 100.0,
- data: data_collection::Data::default(),
+ current_application_position: ApplicationPosition::Process,
scroll_direction: ScrollDirection::DOWN,
previous_process_position: 0,
previous_disk_position: 0,
previous_temp_position: 0,
+ data: data_collection::Data::default(),
awaiting_second_char: false,
second_char: ' ',
use_dot,
@@ -205,9 +205,9 @@ impl App {
// PROC -(up)> Disk, -(left)> Network
pub fn on_left(&mut self) {
self.current_application_position = match self.current_application_position {
- ApplicationPosition::PROCESS => ApplicationPosition::NETWORK,
- ApplicationPosition::DISK => ApplicationPosition::MEM,
- ApplicationPosition::TEMP => ApplicationPosition::MEM,
+ ApplicationPosition::Process => ApplicationPosition::Network,
+ ApplicationPosition::Disk => ApplicationPosition::Mem,
+ ApplicationPosition::Temp => ApplicationPosition::Mem,
_ => self.current_application_position,
};
self.reset_multi_tap_keys();
@@ -215,8 +215,8 @@ impl App {
pub fn on_right(&mut self) {
self.current_application_position = match self.current_application_position {
- ApplicationPosition::MEM => ApplicationPosition::TEMP,
- ApplicationPosition::NETWORK => ApplicationPosition::PROCESS,
+ ApplicationPosition::Mem => ApplicationPosition::Temp,
+ ApplicationPosition::Network => ApplicationPosition::Process,
_ => self.current_application_position,
};
self.reset_multi_tap_keys();
@@ -224,11 +224,11 @@ impl App {
pub fn on_up(&mut self) {
self.current_application_position = match self.current_application_position {
- ApplicationPosition::MEM => ApplicationPosition::CPU,
- ApplicationPosition::NETWORK => ApplicationPosition::MEM,
- ApplicationPosition::PROCESS => ApplicationPosition::DISK,
- ApplicationPosition::TEMP => ApplicationPosition::CPU,
- ApplicationPosition::DISK => ApplicationPosition::TEMP,
+ ApplicationPosition::Mem => ApplicationPosition::Cpu,
+ ApplicationPosition::Network => ApplicationPosition::Mem,
+ ApplicationPosition::Process => ApplicationPosition::Disk,
+ ApplicationPosition::Temp => ApplicationPosition::Cpu,
+ ApplicationPosition::Disk => ApplicationPosition::Temp,
_ => self.current_application_position,
};
self.reset_multi_tap_keys();
@@ -236,10 +236,10 @@ impl App {
pub fn on_down(&mut self) {
self.current_application_position = match self.current_application_position {
- ApplicationPosition::CPU => ApplicationPosition::MEM,
- ApplicationPosition::MEM => ApplicationPosition::NETWORK,
- ApplicationPosition::TEMP => ApplicationPosition::DISK,
- ApplicationPosition::DISK => ApplicationPosition::PROCESS,
+ ApplicationPosition::Cpu => ApplicationPosition::Mem,
+ ApplicationPosition::Mem => ApplicationPosition::Network,
+ ApplicationPosition::Temp => ApplicationPosition::Disk,
+ ApplicationPosition::Disk => ApplicationPosition::Process,
_ => self.current_application_position,
};
self.reset_multi_tap_keys();
@@ -247,20 +247,20 @@ impl App {
pub fn skip_to_first(&mut self) {
match self.current_application_position {
- ApplicationPosition::PROCESS => self.currently_selected_process_position = 0,
- ApplicationPosition::TEMP => self.currently_selected_temperature_position = 0,
- ApplicationPosition::DISK => self.currently_selected_disk_position = 0,
+ ApplicationPosition::Process => self.currently_selected_process_position = 0,
+ ApplicationPosition::Temp => self.currently_selected_temperature_position = 0,
+ ApplicationPosition::Disk => self.currently_selected_disk_position = 0,
_ => {}
}
- self.scroll_direction = ScrollDirection::DOWN;
+ self.scroll_direction = ScrollDirection::UP;
self.reset_multi_tap_keys();
}
pub fn skip_to_last(&mut self) {
match self.current_application_position {
- ApplicationPosition::PROCESS => self.currently_selected_process_position = self.data.list_of_processes.len() as i64 - 1,
- ApplicationPosition::TEMP => self.currently_selected_temperature_position = self.data.list_of_temperature_sensor.len() as i64 - 1,
- ApplicationPosition::DISK => self.currently_selected_disk_position = self.data.list_of_disks.len() as i64 - 1,
+ ApplicationPosition::Process => self.currently_selected_process_position = self.data.list_of_processes.len() as i64 - 1,
+ ApplicationPosition::Temp => self.currently_selected_temperature_position = self.data.list_of_temperature_sensor.len() as i64 - 1,
+ ApplicationPosition::Disk => self.currently_selected_disk_position = self.data.list_of_disks.len() as i64 - 1,
_ => {}
}
self.scroll_direction = ScrollDirection::DOWN;
@@ -269,9 +269,9 @@ impl App {
pub fn decrement_position_count(&mut self) {
match self.current_application_position {
- ApplicationPosition::PROCESS => self.change_process_position(-1),
- ApplicationPosition::TEMP => self.change_temp_position(-1),
- ApplicationPosition::DISK => self.change_disk_position(-1),
+ ApplicationPosition::Process => self.change_process_position(-1),
+ ApplicationPosition::Temp => self.change_temp_position(-1),
+ ApplicationPosition::Disk => self.change_disk_position(-1),
_ => {}
}
self.scroll_direction = ScrollDirection::UP;
@@ -280,9 +280,9 @@ impl App {
pub fn increment_position_count(&mut self) {
match self.current_application_position {
- ApplicationPosition::PROCESS => self.change_process_position(1),
- ApplicationPosition::TEMP => self.change_temp_position(1),
- ApplicationPosition::DISK => self.change_disk_position(1),
+ ApplicationPosition::Process => self.change_process_position(1),
+ ApplicationPosition::Temp => self.change_temp_position(1),
+ ApplicationPosition::Disk => self.change_disk_position(1),
_ => {}
}
self.scroll_direction = ScrollDirection::DOWN;
diff --git a/src/canvas.rs b/src/canvas.rs
index 287d47fd..a72d34f4 100644
--- a/src/canvas.rs
+++ b/src/canvas.rs
@@ -1,10 +1,10 @@
use crate::{app, constants, utils::error, utils::gen_util::*};
use tui::{
backend,
- layout::{Alignment, Constraint, Direction, Layout, Rect},
+ layout::{Alignment, Constraint, Corner, Direction, Layout, Rect},
style::{Color, Modifier, Style},
terminal::Frame,
- widgets::{Axis, Block, Borders, Chart, Dataset, Marker, Paragraph, Row, Table, Text, Widget},
+ widgets::{Axis, Block, Borders, Chart, Dataset, List, Marker, Paragraph, Row, Table, Text, Widget},
Terminal,
};
@@ -162,27 +162,14 @@ pub fn draw_data<B: backend::Backend>(terminal: &mut Terminal<B>, app_state: &mu
)
.split(vertical_chunks[0]);
- let mem_chunk = Layout::default()
- .direction(Direction::Horizontal)
- .margin(0)
- .constraints(
- if app_state.left_legend {
- [Constraint::Percentage(10), Constraint::Percentage(90)]
- } else {
- [Constraint::Percentage(90), Constraint::Percentage(10)]
- }
- .as_ref(),
- )
- .split(middle_chunks[0]);
-
let network_chunk = Layout::default()
- .direction(Direction::Horizontal)
+ .direction(Direction::Vertical)
.margin(0)
.constraints(
if app_state.left_legend {
[Constraint::Percentage(10), Constraint::Percentage(90)]
} else {
- [Constraint::Percentage(90), Constraint::Percentage(10)]
+ [Constraint::Percentage(75), Constraint::Percentage(10)]
}
.as_ref(),
)
@@ -197,17 +184,17 @@ pub fn draw_data<B: backend::Backend>(terminal: &mut Terminal<B>, app_state: &mu
draw_cpu_graph(&mut f, &app_state, &canvas_data.cpu_data, cpu_chunk[graph_index]);
// CPU label
+ draw_cpu_legend(&mut f, &app_state, &canvas_data.cpu_data, cpu_chunk[legend_index]);
//Memory usage graph
- draw_memory_graph(&mut f, &app_state, &canvas_data.mem_data, &canvas_data.swap_data, mem_chunk[graph_index]);
-
- // Memory label
-
- // Temperature table
- draw_temp_table(&mut f, app_state, &canvas_data.temp_sensor_data, middle_divided_chunk_2[0]);
-
- // Disk usage table
- draw_disk_table(&mut f, app_state, &canvas_data.disk_data, middle_divided_chunk_2[1]);
+ draw_memory_graph(
+ &mut f,
+ &app_state,
+ &canvas_data.memory_labels,
+ &canvas_data.mem_data,
+ &canvas_data.swap_data,
+ middle_chunks[0],
+ );
// Network graph
draw_network_graph(
@@ -215,10 +202,24 @@ pub fn draw_data<B: backend::Backend>(terminal: &mut Terminal<B>, app_state: &mu
&app_state,
&canvas_data.network_data_rx,
&canvas_data.network_data_tx,
- network_chunk[graph_index],
+ canvas_data.rx_display.clone(),
+ canvas_data.tx_display.clone(),
+ network_chunk[0],
);
- // Network label
+ draw_network_labels(
+ &mut f,
+ app_state,
+ canvas_data.total_rx_display.clone(),
+ canvas_data.total_tx_display.clone(),
+ network_chunk[1],
+ );
+
+ // Temperature table
+ draw_temp_table(&mut f, app_state, &canvas_data.temp_sensor_data, middle_divided_chunk_2[0]);
+
+ // Disk usage table
+ draw_disk_table(&mut f, app_state, &canvas_data.disk_data, middle_divided_chunk_2[1]);
// Processes table
draw_processes_table(&mut f, app_state, &canvas_data.process_data, bottom_chunks[1]);
@@ -254,7 +255,6 @@ fn draw_cpu_graph<B: backend::Backend>(f: &mut Frame<B>, app_state: &app::App, c
dataset_vector.push(
Dataset::default()
- .name(&cpu.0)
.marker(if app_state.use_dot { Marker::Dot } else { Marker::Braille })
.style(Style::default().fg(COLOUR_LIST[(i - avg_cpu_exist_offset) % COLOUR_LIST.len()]))
.data(&(cpu.1)),
@@ -265,7 +265,6 @@ fn draw_cpu_graph<B: backend::Backend>(f: &mut Frame<B>, app_state: &app::App, c
// Unwrap should be safe here, this assumes that the cpu_data vector is populated...
dataset_vector.push(
Dataset::default()
- //.name(&cpu_data.first().unwrap().0)
.marker(if app_state.use_dot { Marker::Dot } else { Marker::Braille })
.style(Style::default().fg(COLOUR_LIST[(cpu_data.len() - 1) % COLOUR_LIST.len()]))
.data(&(cpu_data.first().unwrap().1)),
@@ -275,10 +274,10 @@ fn draw_cpu_graph<B: backend::Backend>(f: &mut Frame<B>, app_state: &app::App, c
Chart::default()
.block(
Block::default()
- .title("CPU Usage")
+ .title("CPU")
.borders(Borders::ALL)
.border_style(match app_state.current_application_position {
- app::ApplicationPosition::CPU => *CANVAS_HIGHLIGHTED_BORDER_STYLE,
+ app::ApplicationPosition::Cpu => *CANVAS_HIGHLIGHTED_BORDER_STYLE,
_ => *CANVAS_BORDER_STYLE,
}),
)
@@ -288,9 +287,29 @@ fn draw_cpu_graph<B: backend::Backend>(f: &mut Frame<B>, app_state: &app::App, c
.render(f, draw_loc);
}
-fn draw_cpu_legend() {}
+fn draw_cpu_legend<B: backend::Backend>(f: &mut Frame<B>, app_state: &app::App, cpu_data: &[(String, Vec<(f64, f64)>)], draw_loc: Rect) {
+ let mut itx = 0;
+ let label_map = cpu_data.iter().map(|cpu| {
+ itx += 1;
+ Text::styled(&cpu.0, Style::default().fg(COLOUR_LIST[(itx - 1) % COLOUR_LIST.len()]))
+ });
-fn draw_memory_graph<B: backend::Backend>(f: &mut Frame<B>, app_state: &app::App, swap_data: &[(f64, f64)], mem_data: &[(f64, f64)], draw_loc: Rect) {
+ List::new(label_map)
+ .block(
+ Block::default()
+ .borders(Borders::ALL)
+ .border_style(match app_state.current_application_position {
+ app::ApplicationPosition::Cpu => *CANVAS_HIGHLIGHTED_BORDER_STYLE,
+ _ => *CANVAS_BORDER_STYLE,
+ }),
+ )
+ .start_corner(Corner::TopLeft)
+ .render(f, draw_loc);
+}
+
+fn draw_memory_graph<B: backend::Backend>(
+ f: &mut Frame<B>, app_state: &app::App, memory_labels: &[(u64, u64)], mem_data: &[(f64, f64)], swap_data: &[(f64, f64)], draw_loc: Rect,
+) {
let x_axis: Axis<String> = Axis::default()
.style(Style::default().fg(GRAPH_COLOUR))
.bounds([0.0, constants::TIME_STARTS_FROM as f64 * 10.0]);
@@ -299,8 +318,17 @@ fn draw_memory_graph<B: backend::Backend>(f: &mut Frame<B>, app_state: &app::App
.bounds([-0.5, 100.5]) // Offset as the zero value isn't drawn otherwise...
.labels(&["0%", "100%"]);
+ let mem_name = "RAM:".to_string()
+ + &format!("{:3}%", (mem_data.last().unwrap_or(&(0_f64, 0_f64)).1.round() as u64))
+ + &format!(
+ " {:.1}GB/{:.1}GB",
+ memory_labels.first().unwrap_or(&(0, 0)).0 as f64 / 1024.0,
+ memory_labels.first().unwrap_or(&(0, 0)).1 as f64 / 1024.0
+ );
+ let swap_name: String;
+
let mut mem_canvas_vec: Vec<Dataset> = vec![Dataset::default()
- //.name(&mem_name)
+ .name(&mem_name)
.marker(if app_state.use_dot { Marker::Dot } else { Marker::Braille })
.style(Style::default().fg(COLOUR_LIST[0]))
.data(&mem_data)];
@@ -308,9 +336,16 @@ fn draw_memory_graph<B: backend::Backend>(f: &mut Frame<B>, app_state: &app::App
if !(&swap_data).is_empty() {
if let Some(last_canvas_result) = (&swap_data).last() {
if last_canvas_result.1 >= 0.0 {
+ swap_name = "SWP:".to_string()
+ + &format!("{:3}%", (swap_data.last().unwrap_or(&(0_f64, 0_f64)).1.round() as u64))
+ + &format!(
+ " {:.1}GB/{:.1}GB",
+ memory_labels[1].0 as f64 / 1024.0,
+ memory_labels[1].1 as f64 / 1024.0
+ );
mem_canvas_vec.push(
Dataset::default()
- //.name(&swap_name)
+ .name(&swap_name)
.marker(if app_state.use_dot { Marker::Dot } else { Marker::Braille })
.style(Style::default().fg(COLOUR_LIST[1]))
.data(&swap_data),
@@ -322,10 +357,10 @@ fn draw_memory_graph<B: backend::Backend>(f: &mut Frame<B>, app_state: &app::App
Chart::default()
.block(
Block::default()
- .title("Memory Usage")
+ .title("Memory")
.borders(Borders::ALL)
.border_style(match app_state.current_application_position {
- app::ApplicationPosition::MEM => *CANVAS_HIGHLIGHTED_BORDER_STYLE,
+ app::ApplicationPosition::Mem => *CANVAS_HIGHLIGHTED_BORDER_STYLE,
_ => *CANVAS_BORDER_STYLE,
}),
)
@@ -335,10 +370,9 @@ fn draw_memory_graph<B: backend::Backend>(f: &mut Frame<B>, app_state: &app::App
.render(f, draw_loc);
}
-fn draw_memory_legend() {}
-
fn draw_network_graph<B: backend::Backend>(
- f: &mut Frame<B>, app_state: &app::App, network_data_rx: &[(f64, f64)], network_data_tx: &[(f64, f64)], draw_loc: Rect,
+ f: &mut Frame<B>, app_state: &app::App, network_data_rx: &[(f64, f64)], network_data_tx: &[(f64, f64)], rx_display: String, tx_display: String,
+ draw_loc: Rect,
) {
let x_axis: Axis<String> = Axis::default().style(Style::default().fg(GRAPH_COLOUR)).bounds([0.0, 600_000.0]);
let y_axis = Axis::default()
@@ -351,7 +385,7 @@ fn draw_network_graph<B: backend::Backend>(
.title("Network")
.borders(Borders::ALL)
.border_style(match app_state.current_application_position {
- app::ApplicationPosition::NETWORK => *CANVAS_HIGHLIGHTED_BORDER_STYLE,
+ app::ApplicationPosition::Network => *CANVAS_HIGHLIGHTED_BORDER_STYLE,
_ => *CANVAS_BORDER_STYLE,
}),
)
@@ -359,10 +393,12 @@ fn draw_network_graph<B: backend::Backend>(
.y_axis(y_axis)
.datasets(&[
Dataset::default()
+ .name(&(rx_display))
.marker(if app_state.use_dot { Marker::Dot } else { Marker::Braille })
.style(Style::default().fg(COLOUR_LIST[0]))
.data(&network_data_rx),
Dataset::default()
+ .name(&(tx_display))
.marker(if app_state.use_dot { Marker::Dot } else { Marker::Braille })
.style(Style::default().fg(COLOUR_LIST[1]))
.data(&network_data_tx),
@@ -370,7 +406,26 @@ fn draw_network_graph<B: backend::Backend>(
.render(f, draw_loc);
}
-fn draw_network_legend() {}
+fn draw_network_labels<B: backend::Backend>(
+ f: &mut Frame<B>, app_state: &mut app::App, total_rx_display: String, total_tx_display: String, draw_loc: Rect,
+) {
+ // Gross but I need it to work...
+ let total_network = vec![vec![total_rx_display, total_tx_display]];
+ let mapped_network = total_network.iter().map(|val| Row::Data(val.iter()));
+
+ Table::new(["Total RX", "Total TX"].iter(), mapped_network)
+ .block(
+ Block::default()
+ .borders(Borders::ALL)
+ .border_style(match app_state.current_application_position {
+ app::ApplicationPosition::Temp => *CANVAS_HIGHLIGHTED_BORDER_STYLE,
+ _ => *CANVAS_BORDER_STYLE,
+ }),
+ )
+ .header_style(Style::default().fg(Color::LightBlue))
+ .widths(&[Constraint::Percentage(50), Constraint::Percentage(50)])
+ .render(f, draw_loc);
+}
fn draw_temp_table<B: backend::Backend>(f: &mut Frame<B>, app_state: &mut app::App, temp_sensor_data: &[Vec<String>], draw_loc: Rect) {
let num_rows = i64::from(draw_loc.height) - 4;
@@ -406,7 +461,7 @@ fn draw_temp_table<B: backend::Backend>(f: &mut Frame<B>, app_state: &mut app::A
.title("Temperatures")
.borders(Borders::ALL)
.border_style(match app_state.current_application_position {
- app::ApplicationPosition::TEMP => *CANVAS_HIGHLIGHTED_BORDER_STYLE,
+ app::ApplicationPosition::Temp => *CANVAS_HIGHLIGHTED_BORDER_STYLE,
_ => *CANVAS_BORDER_STYLE,
}),
)
@@ -447,10 +502,10 @@ fn draw_disk_table<B: backend::Backend>(f: &mut Frame<B>, app_state: &mut app::A
Table::new(["Disk", "Mount", "Used", "Total", "Free", "R/s", "W/s"].iter(), disk_rows)
.block(
Block::default()
- .title("Disk Usage")
+ .title("Disk")
.borders(Borders::ALL)
.border_style(match app_state.current_application_position {
- app::ApplicationPosition::DISK => *CANVAS_HIGHLIGHTED_BORDER_STYLE,
+ app::ApplicationPosition::Disk => *CANVAS_HIGHLIGHTED_BORDER_STYLE,
_ => *CANVAS_BORDER_STYLE,
}),
)
@@ -528,7 +583,7 @@ fn draw_processes_table<B: backend::Backend>(f: &mut Frame<B>, app_state: &mut a
.title("Processes")
.borders(Borders::ALL)
.border_style(match app_state.current_application_position {
- app::ApplicationPosition::PROCESS => *CANVAS_HIGHLIGHTED_BORDER_STYLE,
+ app::ApplicationPosition::Process => *CANVAS_HIGHLIGHTED_BORDER_STYLE,
_ => *CANVAS_BORDER_STYLE,
}),
)
@@ -558,6 +613,11 @@ fn get_start_position(
}
}
app::ScrollDirection::UP => {
+ if *currently_selected_position == 0 {
+ *previous_position = 0;
+ return *previous_position;
+ }
+
if *currently_selected_position == *previous_position - 1 {
*previous_position = if *previous_position > 0 { *previous_position - 1 } else { 0 };
*previous_position
diff --git a/src/data_conversion.rs b/src/data_conversion.rs
index 456c4dcd..eaf676ca 100644
--- a/src/data_conversion.rs
+++ b/src/data_conversion.rs
@@ -44,8 +44,8 @@ pub fn update_disk_row(app_data: &data_collection::Data) -> Vec<Vec<String>> {
let prev = &prev_io_hashmap[trimmed_mount];
let read_bytes_per_sec = ((ele.read_bytes - prev.read_bytes) as f64 / time_difference) as u64;
let write_bytes_per_sec = ((ele.write_bytes - prev.write_bytes) as f64 / time_difference) as u64;
- let converted_read = get_simple_byte_values(read_bytes_per_sec);
- let converted_write = get_simple_byte_values(write_bytes_per_sec);
+ let converted_read = get_simple_byte_values(read_bytes_per_sec, false);
+ let converted_write = get_simple_byte_values(write_bytes_per_sec, false);
(
format!("{:.*}{}/s", 0, converted_read.0, converted_read.1),
format!("{:.*}{}/s", 0, converted_write.0, converted_write.1),
@@ -63,8 +63,8 @@ pub fn update_disk_row(app_data: &data_collection::Data) -> Vec<Vec<String>> {
("0B/s".to_string(), "0B/s".to_string())
};
- let converted_free_space = get_simple_byte_values(disk.free_space);
- let converted_total_space = get_simple_byte_values(disk.total_space);
+ let converted_free_space = get_simple_byte_values(disk.free_space, false);
+ let converted_total_space = get_simple_byte_values(disk.total_space, false);
disk_vector.push(vec![
disk.name.to_string(),
disk.mount_point.to_string(),
@@ -283,24 +283,24 @@ pub fn convert_network_data_points(network_data: &[data_collection::network::Net
let tx_converted_result: (f64, String);
if let Some(last_num_bytes_entry) = network_data.last() {
- rx_converted_result = get_exact_byte_values(last_num_bytes_entry.rx);
- total_rx_converted_result = get_exact_byte_values(last_num_bytes_entry.total_rx);
+ rx_converted_result = get_exact_byte_values(last_num_bytes_entry.rx, true);
+ total_rx_converted_result = get_exact_byte_values(last_num_bytes_entry.total_rx, truefalse
} else {
- rx_converted_result = get_exact_byte_values(0);
- total_rx_converted_result = get_exact_byte_values(0);
+ rx_converted_result = get_exact_byte_values(0, true);
+ total_rx_converted_result = get_exact_byte_values(0, false);
}
let rx_display = format!("RX: {:5.*}{}", 1, rx_converted_result.0, rx_converted_result.1);
- let total_rx_display = format!("Total RX: {:5.*}{}", 1, total_rx_converted_result.0, total_rx_converted_result.1);
+ let total_rx_display = format!("{:.*}{}", 1, total_rx_converted_result.0, total_rx_converted_result.1);
if let Some(last_num_bytes_entry) = network_data.last() {
- tx_converted_result = get_exact_byte_values(last_num_bytes_entry.tx);
- total_tx_converted_result = get_exact_byte_values(last_num_bytes_entry.total_tx);
+ tx_converted_result = get_exact_byte_values(last_num_bytes_entry.tx, true);
+ total_tx_converted_result = get_exact_byte_values(last_num_bytes_entry.total_tx, false);
} else {
- tx_converted_result = get_exact_byte_values(0);
- total_tx_converted_result = get_exact_byte_values(0);
+ tx_converted_result = get_exact_byte_values(0, true);
+ total_tx_converted_result = get_exact_byte_values(0, false);
}
let tx_display = format!("TX: {:5.*}{}", 1, tx_converted_result.0, tx_converted_result.1);
- let total_tx_display = format!("Total TX: {:5.*}{}", 1, total_tx_converted_result.0, total_tx_converted_result.1);
+ let total_tx_display = format!("{:.*}{}", 1, total_tx_converted_result.0, total_tx_converted_result.1);
ConvertedNetworkData {
rx,
diff --git a/src/utils/gen_util.rs b/src/utils/gen_util.rs
index 30a257bc..0c26286e 100644
--- a/src/utils/gen_util.rs
+++ b/src/utils/gen_util.rs
@@ -24,9 +24,9 @@ pub fn float_max(a: f32, b: f32) -> f32 {
/// Returns a tuple containing the value and the unit. In units of 1024.
/// This only supports up to a tebibyte.
-pub fn get_exact_byte_values(bytes: u64) -> (f64, String) {
+pub fn get_exact_byte_values(bytes: u64, spacing: bool) -> (f64, String) {
match bytes {
- b if b < 1024 => (bytes as f64, "B".to_string()),
+ b if b < 1024 => (bytes as f64, if spacing { " B".to_string() } else { "B".to_string() }),
b if b < 1_048_576 => (bytes as f64 / 1024.0, "KiB".to_string()),
b if b < 1_073_741_824 => (bytes as f64 / 1_048_576.0, "MiB".to_string()),
b if b < 1_099_511_627_776 => (bytes as f64 / 1_073_741_824.0, "GiB".to_string()),
@@ -36,9 +36,9 @@ pub fn get_exact_byte_values(bytes: u64) -> (f64, String) {
/// Returns a tuple containing the value and the unit. In units of 1000.
/// This only supports up to a terabyte. Note the "byte" unit will have a space appended to match the others.
-pub fn get_simple_byte_values(bytes: u64) -> (f64, String) {
+pub fn get_simple_byte_values(bytes: u64, spacing: bool) -> (f64, String) {
match bytes {
- b if b < 1000 => (bytes as f64, "B".to_string()),
+ b if b < 1000 => (bytes as f64, if spacing { " B".to_string() } else { "B".to_string() }),
b if b < 1_000_000 => (bytes as f64 / 1000.0, "KB".to_string()),
b if b < 1_000_000_000 => (bytes as f64 / 1_000_000.0, "MB".to_string()),
b if b < 1_000_000_000_000 => (bytes as f64 / 1_000_000_000.0, "GB".to_string()),