diff options
author | Clement Tsang <34804052+ClementTsang@users.noreply.github.com> | 2020-08-21 19:59:49 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-21 22:59:49 -0400 |
commit | c82f4d40b40649ae53037701fadc2f5c1be9e901 (patch) | |
tree | dd7e24db33aea9528c6834732479e92a3c12a0e1 /src | |
parent | ff15649be77f2e66444cc98e1b1e87a20767eeef (diff) |
feature: Support memb (mem bytes) searching in processes
Supports searching by the new mem value.
Diffstat (limited to 'src')
-rw-r--r-- | src/app/data_harvester/processes.rs | 9 | ||||
-rw-r--r-- | src/app/process_killer.rs | 16 | ||||
-rw-r--r-- | src/app/query.rs | 25 | ||||
-rw-r--r-- | src/constants.rs | 3 | ||||
-rw-r--r-- | src/data_conversion.rs | 14 | ||||
-rw-r--r-- | src/lib.rs | 4 |
6 files changed, 44 insertions, 27 deletions
diff --git a/src/app/data_harvester/processes.rs b/src/app/data_harvester/processes.rs index 8bf23795..f87b700c 100644 --- a/src/app/data_harvester/processes.rs +++ b/src/app/data_harvester/processes.rs @@ -60,7 +60,7 @@ pub struct ProcessHarvest { pub pid: u32, pub cpu_usage_percent: f64, pub mem_usage_percent: f64, - pub mem_usage_kb: u64, + pub mem_usage_bytes: u64, // pub rss_kb: u64, // pub virt_kb: u64, pub name: String, @@ -282,7 +282,8 @@ fn read_proc<S: core::hash::BuildHasher>( )?; let (_vsize, rss) = get_linux_process_vsize_rss(&stat); let mem_usage_kb = rss * page_file_kb; - let mem_usage_percent = mem_usage_kb as f64 * 100.0 / mem_total_kb as f64; + let mem_usage_percent = mem_usage_kb as f64 / mem_total_kb as f64 * 100.0; + let mem_usage_bytes = mem_usage_kb * 1024; // This can fail if permission is denied! let (total_read_bytes, total_write_bytes, read_bytes_per_sec, write_bytes_per_sec) = @@ -320,7 +321,7 @@ fn read_proc<S: core::hash::BuildHasher>( name, command, mem_usage_percent, - mem_usage_kb, + mem_usage_bytes, cpu_usage_percent, total_read_bytes, total_write_bytes, @@ -429,7 +430,7 @@ pub fn windows_macos_get_processes_list( } else { 0.0 }, - mem_usage_kb: process_val.memory(), + mem_usage_bytes: process_val.memory() * 1024, cpu_usage_percent: process_cpu_usage, read_bytes_per_sec: disk_usage.read_bytes, write_bytes_per_sec: disk_usage.written_bytes, diff --git a/src/app/process_killer.rs b/src/app/process_killer.rs index ac18742d..cb0662bc 100644 --- a/src/app/process_killer.rs +++ b/src/app/process_killer.rs @@ -46,11 +46,17 @@ pub fn kill_process_given_pid(pid: u32) -> crate::utils::error::Result<()> { _ => "Unknown error occurred." }; - return Err(BottomError::GenericError(format!( - "Error code {} - {}", - err_code.unwrap_or(-1), - err, - ))); + return if let Some(err_code) = err_code { + Err(BottomError::GenericError(format!( + "Error code {} - {}", + err_code, err, + ))) + } else { + Err(BottomError::GenericError(format!( + "Error code ??? - {}", + err, + ))) + }; } } } else if cfg!(target_os = "windows") { diff --git a/src/app/query.rs b/src/app/query.rs index 2a6d4cb4..926c5901 100644 --- a/src/app/query.rs +++ b/src/app/query.rs @@ -334,7 +334,8 @@ impl ProcessQuery for ProcWidgetState { let mut value = read_value; match prefix_type { - PrefixType::Rps + PrefixType::MemBytes + | PrefixType::Rps | PrefixType::Wps | PrefixType::TRead | PrefixType::TWrite => { @@ -562,8 +563,9 @@ impl Debug for And { #[derive(Debug)] pub enum PrefixType { Pid, - Cpu, - Mem, + PCpu, + MemBytes, + PMem, Rps, Wps, TRead, @@ -579,9 +581,12 @@ impl std::str::FromStr for PrefixType { use PrefixType::*; let lower_case = s.to_lowercase(); + // Didn't add %cpu, %mem, mem_bytes, total_read, and total_write + // for now as it causes help to be clogged. match lower_case.as_str() { - "cpu" => Ok(Cpu), - "mem" => Ok(Mem), + "cpu" => Ok(PCpu), + "mem" => Ok(PMem), + "memb" => Ok(MemBytes), "read" => Ok(Rps), "write" => Ok(Wps), "tread" => Ok(TRead), @@ -669,17 +674,21 @@ impl Prefix { } } else if let Some((prefix_type, numerical_query)) = &self.compare_prefix { match prefix_type { - PrefixType::Cpu => matches_condition( + PrefixType::PCpu => matches_condition( &numerical_query.condition, process.cpu_percent_usage, numerical_query.value, ), - // FIXME: This doesn't work with mem values! - PrefixType::Mem => matches_condition( + PrefixType::PMem => matches_condition( &numerical_query.condition, process.mem_percent_usage, numerical_query.value, ), + PrefixType::MemBytes => matches_condition( + &numerical_query.condition, + process.mem_usage_bytes as f64, + numerical_query.value, + ), PrefixType::Rps => matches_condition( &numerical_query.condition, process.rps_f64, diff --git a/src/constants.rs b/src/constants.rs index 5710b040..e0338ea7 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -107,7 +107,7 @@ pub const PROCESS_HELP_TEXT: [&str; 12] = [ "% Toggle between values and percentages for memory usage", ]; -pub const SEARCH_HELP_TEXT: [&str; 43] = [ +pub const SEARCH_HELP_TEXT: [&str; 44] = [ "4 - Process search widget\n", "Tab Toggle between searching for PID and name\n", "Esc Close the search widget (retains the filter)\n", @@ -126,6 +126,7 @@ pub const SEARCH_HELP_TEXT: [&str; 43] = [ "pid ex: pid 825\n", "cpu ex: cpu > 4.2\n", "mem ex: mem < 4.2\n", + "memb ex: memb < 100 kb\n", "read ex: read >= 1 b\n", "write ex: write <= 1 tb\n", "tread ex: tread = 1\n", diff --git a/src/data_conversion.rs b/src/data_conversion.rs index d62b723b..4db648e5 100644 --- a/src/data_conversion.rs +++ b/src/data_conversion.rs @@ -36,7 +36,7 @@ pub struct ConvertedProcessData { pub name: String, pub cpu_percent_usage: f64, pub mem_percent_usage: f64, - pub mem_usage_kb: u64, + pub mem_usage_bytes: u64, pub mem_usage_str: (f64, String), pub group_pids: Vec<u32>, pub read_per_sec: String, @@ -55,7 +55,7 @@ pub struct SingleProcessData { pub pid: u32, pub cpu_percent_usage: f64, pub mem_percent_usage: f64, - pub mem_usage_kb: u64, + pub mem_usage_bytes: u64, pub group_pids: Vec<u32>, pub read_per_sec: u64, pub write_per_sec: u64, @@ -402,8 +402,8 @@ pub fn convert_process_data( }, cpu_percent_usage: process.cpu_usage_percent, mem_percent_usage: process.mem_usage_percent, - mem_usage_kb: process.mem_usage_kb, - mem_usage_str: get_exact_byte_values(process.mem_usage_kb * 1024, false), + mem_usage_bytes: process.mem_usage_bytes, + mem_usage_str: get_exact_byte_values(process.mem_usage_bytes, false), group_pids: vec![process.pid], read_per_sec, write_per_sec, @@ -434,7 +434,7 @@ pub fn convert_process_data( (*entry).cpu_percent_usage += process.cpu_usage_percent; (*entry).mem_percent_usage += process.mem_usage_percent; - (*entry).mem_usage_kb += process.mem_usage_kb; + (*entry).mem_usage_bytes += process.mem_usage_bytes; (*entry).group_pids.push(process.pid); (*entry).read_per_sec += process.read_bytes_per_sec; (*entry).write_per_sec += process.write_bytes_per_sec; @@ -465,8 +465,8 @@ pub fn convert_process_data( name: identifier.to_string(), cpu_percent_usage: p.cpu_percent_usage, mem_percent_usage: p.mem_percent_usage, - mem_usage_kb: p.mem_usage_kb, - mem_usage_str: get_exact_byte_values(p.mem_usage_kb * 1024, false), + mem_usage_bytes: p.mem_usage_bytes, + mem_usage_str: get_exact_byte_values(p.mem_usage_bytes, false), group_pids: p.group_pids, read_per_sec, write_per_sec, @@ -524,8 +524,8 @@ pub fn sort_process_data( ProcessSorting::Mem => { to_sort_vec.sort_by(|a, b| { utils::gen_util::get_ordering( - a.mem_usage_kb, - b.mem_usage_kb, + a.mem_usage_bytes, + b.mem_usage_bytes, proc_widget_state.process_sorting_reverse, ) }); |