summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorClementTsang <clementjhtsang@gmail.com>2019-10-05 21:55:35 -0400
committerClementTsang <clementjhtsang@gmail.com>2019-10-05 21:55:35 -0400
commit7bd49be49a47924ed6a3e91bcf68bba9c8030967 (patch)
tree6084dbb4d5ffc606a52e5b9304347a4f7da0d6ad /src
parent042a55fcd5e31e2840a074155607f22aca64bbfd (diff)
Removed unsafe unwraps
Diffstat (limited to 'src')
-rw-r--r--src/app/data_collection/processes.rs22
-rw-r--r--src/canvas.rs34
-rw-r--r--src/convert_data.rs110
3 files changed, 92 insertions, 74 deletions
diff --git a/src/app/data_collection/processes.rs b/src/app/data_collection/processes.rs
index 02eb3bb7..6de81df2 100644
--- a/src/app/data_collection/processes.rs
+++ b/src/app/data_collection/processes.rs
@@ -67,7 +67,12 @@ fn vangelis_cpu_usage_calculation(prev_idle : &mut f64, prev_non_idle : &mut f64
*prev_idle = idle;
*prev_non_idle = non_idle;
- let result = if total_delta - idle_delta != 0_f64 { total_delta - idle_delta } else { 1_f64 };
+ let result = if total_delta - idle_delta != 0_f64 {
+ total_delta - idle_delta
+ }
+ else {
+ 1_f64
+ };
Ok(result) // This works, REALLY damn well. The percentage check is within like 2% of the sysinfo one.
}
@@ -169,13 +174,14 @@ pub async fn get_sorted_processes_list(
let ps_result = Command::new("ps").args(&["-axo", "pid:10,comm:50,%mem:5", "--noheader"]).output()?;
let ps_stdout = String::from_utf8_lossy(&ps_result.stdout);
let split_string = ps_stdout.split('\n');
- let cpu_usage = vangelis_cpu_usage_calculation(prev_idle, prev_non_idle).unwrap(); // TODO: FIX THIS ERROR CHECKING
- let process_stream = split_string.collect::<Vec<&str>>();
-
- for process in process_stream {
- if let Ok(process_object) = convert_ps(process, cpu_usage, prev_pid_stats) {
- if !process_object.command.is_empty() {
- process_vector.push(process_object);
+ if let Ok(cpu_usage) = vangelis_cpu_usage_calculation(prev_idle, prev_non_idle) {
+ let process_stream = split_string.collect::<Vec<&str>>();
+
+ for process in process_stream {
+ if let Ok(process_object) = convert_ps(process, cpu_usage, prev_pid_stats) {
+ if !process_object.command.is_empty() {
+ process_vector.push(process_object);
+ }
}
}
}
diff --git a/src/canvas.rs b/src/canvas.rs
index c15782ae..f1e29463 100644
--- a/src/canvas.rs
+++ b/src/canvas.rs
@@ -147,21 +147,25 @@ pub fn draw_data<B : backend::Backend>(terminal : &mut Terminal<B>, app_state :
.style(Style::default().fg(Color::LightBlue))
.data(&canvas_data.mem_data)];
- if !(&canvas_data.swap_data).is_empty() && (&canvas_data.swap_data).last().unwrap().1 >= 0.0 {
- swap_name = "SWP:".to_string()
- + &format!("{:3}%", (canvas_data.swap_data.last().unwrap_or(&(0_f64, 0_f64)).1.round() as u64))
- + &format!(
- " {:.1}GB/{:.1}GB",
- canvas_data.mem_values[1].0 as f64 / 1024.0,
- canvas_data.mem_values[1].1 as f64 / 1024.0
- );
- mem_canvas_vec.push(
- Dataset::default()
- .name(&swap_name)
- .marker(if app_state.use_dot { Marker::Dot } else { Marker::Braille })
- .style(Style::default().fg(Color::LightYellow))
- .data(&canvas_data.swap_data),
- );
+ if !(&canvas_data.swap_data).is_empty() {
+ if let Some(last_canvas_result) = (&canvas_data.swap_data).last() {
+ if last_canvas_result.1 >= 0.0 {
+ swap_name = "SWP:".to_string()
+ + &format!("{:3}%", (canvas_data.swap_data.last().unwrap_or(&(0_f64, 0_f64)).1.round() as u64))
+ + &format!(
+ " {:.1}GB/{:.1}GB",
+ canvas_data.mem_values[1].0 as f64 / 1024.0,
+ canvas_data.mem_values[1].1 as f64 / 1024.0
+ );
+ mem_canvas_vec.push(
+ Dataset::default()
+ .name(&swap_name)
+ .marker(if app_state.use_dot { Marker::Dot } else { Marker::Braille })
+ .style(Style::default().fg(Color::LightYellow))
+ .data(&canvas_data.swap_data),
+ );
+ }
+ }
}
Chart::default()
diff --git a/src/convert_data.rs b/src/convert_data.rs
index 19486828..65b2524d 100644
--- a/src/convert_data.rs
+++ b/src/convert_data.rs
@@ -28,39 +28,47 @@ pub fn update_disk_row(app_data : &data_collection::Data) -> Vec<Vec<String>> {
let mut disk_vector : Vec<Vec<String>> = Vec::new();
for disk in &app_data.list_of_disks {
let io_activity = if app_data.list_of_io.len() > 2 {
- let io_package = &app_data.list_of_io.last().unwrap();
- let prev_io_package = &app_data.list_of_io[app_data.list_of_io.len() - 2];
-
- let io_hashmap = &io_package.io_hash;
- let prev_io_hashmap = &prev_io_package.io_hash;
- let trimmed_mount = &disk.name.to_string().split('/').last().unwrap().to_string();
- let time_difference = io_package.instant.duration_since(prev_io_package.instant).as_secs_f64();
- if io_hashmap.contains_key(trimmed_mount) && prev_io_hashmap.contains_key(trimmed_mount) {
- // Ideally change this...
- let ele = &io_hashmap[trimmed_mount];
- 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;
- (
- if read_bytes_per_sec < 1024 {
- format!("{}B", read_bytes_per_sec)
- }
- else if read_bytes_per_sec < 1024 * 1024 {
- format!("{}KB", read_bytes_per_sec / 1024)
+ if let Some(io_package) = &app_data.list_of_io.last() {
+ if let Some(trimmed_mount) = disk.name.to_string().split('/').last() {
+ let prev_io_package = &app_data.list_of_io[app_data.list_of_io.len() - 2];
+
+ let io_hashmap = &io_package.io_hash;
+ let prev_io_hashmap = &prev_io_package.io_hash;
+ let time_difference = io_package.instant.duration_since(prev_io_package.instant).as_secs_f64();
+ if io_hashmap.contains_key(trimmed_mount) && prev_io_hashmap.contains_key(trimmed_mount) {
+ // Ideally change this...
+ let ele = &io_hashmap[trimmed_mount];
+ 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;
+ (
+ if read_bytes_per_sec < 1024 {
+ format!("{}B", read_bytes_per_sec)
+ }
+ else if read_bytes_per_sec < 1024 * 1024 {
+ format!("{}KB", read_bytes_per_sec / 1024)
+ }
+ else {
+ format!("{}MB", read_bytes_per_sec / 1024 / 1024)
+ },
+ if write_bytes_per_sec < 1024 {
+ format!("{}B", write_bytes_per_sec)
+ }
+ else if write_bytes_per_sec < 1024 * 1024 {
+ format!("{}KB", write_bytes_per_sec / 1024)
+ }
+ else {
+ format!("{}MB", write_bytes_per_sec / 1024 / 1024)
+ },
+ )
}
else {
- format!("{}MB", read_bytes_per_sec / 1024 / 1024)
- },
- if write_bytes_per_sec < 1024 {
- format!("{}B", write_bytes_per_sec)
- }
- else if write_bytes_per_sec < 1024 * 1024 {
- format!("{}KB", write_bytes_per_sec / 1024)
+ ("0B".to_string(), "0B".to_string())
}
- else {
- format!("{}MB", write_bytes_per_sec / 1024 / 1024)
- },
- )
+ }
+ else {
+ ("0B".to_string(), "0B".to_string())
+ }
}
else {
("0B".to_string(), "0B".to_string())
@@ -161,15 +169,17 @@ pub fn update_cpu_data_points(show_avg_cpu : bool, app_data : &data_collection::
// Finally, add it all onto the end
for (i, data) in cpu_collection.iter().enumerate() {
- cpu_data_vector.push((
- // + 1 to skip total CPU if show_avg_cpu is false
- 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(),
- ))
+ if !app_data.list_of_cpu_packages.is_empty() {
+ cpu_data_vector.push((
+ // + 1 to skip total CPU if show_avg_cpu is false
+ 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(),
+ ))
+ }
}
}
@@ -287,16 +297,10 @@ pub fn convert_network_data_points(network_data : &[data_collection::network::Ne
rx.push(rx_data);
tx.push(tx_data);
-
- //debug!("Pushed rx: ({}, {})", rx.last().unwrap().0, rx.last().unwrap().1);
- //debug!("Pushed tx: ({}, {})", tx.last().unwrap().0, tx.last().unwrap().1);
}
- let rx_display = if network_data.is_empty() {
- "0B".to_string()
- }
- else {
- let num_bytes = network_data.last().unwrap().rx;
+ let rx_display = if let Some(last_num_bytes_entry) = network_data.last() {
+ let num_bytes = last_num_bytes_entry.rx;
if num_bytes < 1024 {
format!("RX: {:4} B", num_bytes).to_string()
}
@@ -309,12 +313,13 @@ pub fn convert_network_data_points(network_data : &[data_collection::network::Ne
else {
format!("RX: {:4}GB", num_bytes / 1024 / 1024 / 1024).to_string()
}
- };
- let tx_display = if network_data.is_empty() {
- "0B".to_string()
}
else {
- let num_bytes = network_data.last().unwrap().tx;
+ "0B".to_string()
+ };
+
+ let tx_display = if let Some(last_num_bytes_entry) = network_data.last() {
+ let num_bytes = last_num_bytes_entry.tx;
if num_bytes < 1024 {
format!("TX: {:4} B", num_bytes).to_string()
}
@@ -327,6 +332,9 @@ pub fn convert_network_data_points(network_data : &[data_collection::network::Ne
else {
format!("TX: {:4}GB", num_bytes / 1024 / 1024 / 1024).to_string()
}
+ }
+ else {
+ "0B".to_string()
};
ConvertedNetworkData {