Fix processes in windows

This commit is contained in:
Clement Tsang 2019-12-29 21:40:22 -05:00
parent ff43c467e4
commit 98ccc70743
4 changed files with 50 additions and 35 deletions

View File

@ -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(())
}

View File

@ -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()),

View File

@ -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()?;

View File

@ -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_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);
(
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_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);