summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClement Tsang <34804052+ClementTsang@users.noreply.github.com>2019-12-29 21:40:22 -0500
committerClement Tsang <34804052+ClementTsang@users.noreply.github.com>2019-12-29 21:40:22 -0500
commit98ccc70743e2991ff0fc0e6c7562749ecc087127 (patch)
treef37c08e65bf85dddcdca6f6ef8e07e2619f765d9
parentff43c467e491b00c2428ecc66480a4e2064fd0fc (diff)
Fix processes in windows
-rw-r--r--src/app.rs8
-rw-r--r--src/app/data_collection/processes.rs25
-rw-r--r--src/app/process_killer.rs2
-rw-r--r--src/data_conversion.rs52
4 files changed, 51 insertions, 36 deletions
diff --git a/src/app.rs b/src/app.rs
index 19c638f8..c74d6ce7 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -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);