summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorClement Tsang <34804052+ClementTsang@users.noreply.github.com>2020-08-21 19:59:49 -0700
committerGitHub <noreply@github.com>2020-08-21 22:59:49 -0400
commitc82f4d40b40649ae53037701fadc2f5c1be9e901 (patch)
treedd7e24db33aea9528c6834732479e92a3c12a0e1 /src
parentff15649be77f2e66444cc98e1b1e87a20767eeef (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.rs9
-rw-r--r--src/app/process_killer.rs16
-rw-r--r--src/app/query.rs25
-rw-r--r--src/constants.rs3
-rw-r--r--src/data_conversion.rs14
-rw-r--r--src/lib.rs4
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,
diff --git a/src/lib.rs b/src/lib.rs
index f199a705..e6b71e9e 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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,
)
});