diff options
author | Clement Tsang <34804052+ClementTsang@users.noreply.github.com> | 2019-12-29 21:40:22 -0500 |
---|---|---|
committer | Clement Tsang <34804052+ClementTsang@users.noreply.github.com> | 2019-12-29 21:40:22 -0500 |
commit | 98ccc70743e2991ff0fc0e6c7562749ecc087127 (patch) | |
tree | f37c08e65bf85dddcdca6f6ef8e07e2619f765d9 | |
parent | ff43c467e491b00c2428ecc66480a4e2064fd0fc (diff) |
Fix processes in windows
-rw-r--r-- | src/app.rs | 8 | ||||
-rw-r--r-- | src/app/data_collection/processes.rs | 25 | ||||
-rw-r--r-- | src/app/process_killer.rs | 2 | ||||
-rw-r--r-- | src/data_conversion.rs | 52 |
4 files changed, 51 insertions, 36 deletions
@@ -112,8 +112,8 @@ impl App { if self.awaiting_second_char && self.second_char == 'd' { self.awaiting_second_char = false; self.second_char = ' '; - // TODO: Redo this in DD rewrite! - //self.kill_highlighted_process().unwrap_or(()); + // TODO: Redo this in DD rewrite! + self.kill_highlighted_process().unwrap_or(()); } else { self.awaiting_second_char = true; self.second_char = 'd'; @@ -188,9 +188,9 @@ impl App { } } - fn _kill_highlighted_process(&self) -> crate::utils::error::Result<()> { + fn kill_highlighted_process(&self) -> crate::utils::error::Result<()> { let current_pid = u64::from(self.data.list_of_processes[self.currently_selected_process_position as usize].pid); - process_killer::_kill_process_given_pid(current_pid)?; + process_killer::kill_process_given_pid(current_pid)?; Ok(()) } diff --git a/src/app/data_collection/processes.rs b/src/app/data_collection/processes.rs index 361e7a26..8e2a42b5 100644 --- a/src/app/data_collection/processes.rs +++ b/src/app/data_collection/processes.rs @@ -192,13 +192,32 @@ pub fn get_sorted_processes_list( } } } else { - // Windows et al. - let process_hashmap = sys.get_process_list(); for process_val in process_hashmap.values() { + let command_name = if process_val.name().is_empty() { + let process_cmd = process_val.cmd(); + if process_cmd.len() > 1 { + process_cmd[0].clone() + } else { + let process_exe = process_val.exe().file_stem(); + if let Some(exe) = process_exe { + let process_exe_opt = exe.to_str(); + if let Some(exe_name) = process_exe_opt { + exe_name.to_string() + } else { + "".to_string() + } + } else { + "".to_string() + } + } + } else { + process_val.name().to_string() + }; + process_vector.push(ProcessData { pid: process_val.pid() as u32, - command: process_val.name().to_string(), + command: command_name, mem_usage_percent: None, mem_usage_kb: Some(process_val.memory()), cpu_usage_percent: f64::from(process_val.cpu_usage()), diff --git a/src/app/process_killer.rs b/src/app/process_killer.rs index cab40729..160139b2 100644 --- a/src/app/process_killer.rs +++ b/src/app/process_killer.rs @@ -33,7 +33,7 @@ impl Process { } /// Kills a process, given a PID. -pub fn _kill_process_given_pid(pid: u64) -> crate::utils::error::Result<()> { +pub fn kill_process_given_pid(pid: u64) -> crate::utils::error::Result<()> { if cfg!(target_os = "linux") { // Linux Command::new("kill").arg(pid.to_string()).output()?; diff --git a/src/data_conversion.rs b/src/data_conversion.rs index 98d6f096..1b2850f0 100644 --- a/src/data_conversion.rs +++ b/src/data_conversion.rs @@ -30,37 +30,33 @@ pub fn update_temp_row(app_data: &data_collection::Data, temp_type: &data_collec 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 { - 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; - 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), - ) - } else { - ("0B/s".to_string(), "0B/s".to_string()) + let io_activity = { + let mut final_result = ("0B/s".to_string(), "0B/s".to_string()); + if app_data.list_of_io.len() > 2 { + 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; + let converted_read = get_simple_byte_values(read_bytes_per_sec, false); + let converted_write = get_simple_byte_values(write_bytes_per_sec, false); + final_result = ( + format!("{:.*}{}/s", 0, converted_read.0, converted_read.1), + format!("{:.*}{}/s", 0, converted_write.0, converted_write.1), + ); + } } - } else { - ("0B/s".to_string(), "0B/s".to_string()) } - } else { - ("0B/s".to_string(), "0B/s".to_string()) } - } else { - ("0B/s".to_string(), "0B/s".to_string()) + final_result }; let converted_free_space = get_simple_byte_values(disk.free_space, false); |