diff options
Diffstat (limited to 'src/app/data_harvester/processes')
-rw-r--r-- | src/app/data_harvester/processes/linux.rs | 26 | ||||
-rw-r--r-- | src/app/data_harvester/processes/unix/process_ext.rs | 6 | ||||
-rw-r--r-- | src/app/data_harvester/processes/windows.rs | 26 |
3 files changed, 57 insertions, 1 deletions
diff --git a/src/app/data_harvester/processes/linux.rs b/src/app/data_harvester/processes/linux.rs index 8f50823b..0a1ed539 100644 --- a/src/app/data_harvester/processes/linux.rs +++ b/src/app/data_harvester/processes/linux.rs @@ -250,6 +250,12 @@ fn read_proc( uid, user, time, + #[cfg(feature = "gpu")] + gpu_mem: 0, + #[cfg(feature = "gpu")] + gpu_mem_percent: 0.0, + #[cfg(feature = "gpu")] + gpu_util: 0, }, new_process_times, )) @@ -326,7 +332,8 @@ pub(crate) fn linux_process_data( let pid = process.pid; let prev_proc_details = pid_mapping.entry(pid).or_default(); - if let Ok((process_harvest, new_process_times)) = read_proc( + #[allow(unused_mut)] + if let Ok((mut process_harvest, new_process_times)) = read_proc( prev_proc_details, process, cpu_usage, @@ -336,6 +343,23 @@ pub(crate) fn linux_process_data( total_memory, user_table, ) { + #[cfg(feature = "gpu")] + if let Some(gpus) = &collector.gpu_pids { + gpus.iter().for_each(|gpu| { + // add mem/util for all gpus to pid + if let Some((mem, util)) = gpu.get(&(pid as u32)) { + process_harvest.gpu_mem += mem; + process_harvest.gpu_util += util; + } + }); + if let Some(gpu_total_mem) = &collector.gpus_total_mem { + process_harvest.gpu_mem_percent = (process_harvest.gpu_mem as f64 + / *gpu_total_mem as f64 + * 100.0) + as f32; + } + } + prev_proc_details.cpu_time = new_process_times; prev_proc_details.total_read_bytes = process_harvest.total_read_bytes; prev_proc_details.total_write_bytes = process_harvest.total_write_bytes; diff --git a/src/app/data_harvester/processes/unix/process_ext.rs b/src/app/data_harvester/processes/unix/process_ext.rs index 999a893f..93ef3a94 100644 --- a/src/app/data_harvester/processes/unix/process_ext.rs +++ b/src/app/data_harvester/processes/unix/process_ext.rs @@ -97,6 +97,12 @@ pub(crate) trait UnixProcessExt { }) .unwrap_or_else(|| "N/A".into()), time: Duration::from_secs(process_val.run_time()), + #[cfg(feature = "gpu")] + gpu_mem: 0, + #[cfg(feature = "gpu")] + gpu_mem_percent: 0.0, + #[cfg(feature = "gpu")] + gpu_util: 0, }); } diff --git a/src/app/data_harvester/processes/windows.rs b/src/app/data_harvester/processes/windows.rs index b0b93b16..11c58cf3 100644 --- a/src/app/data_harvester/processes/windows.rs +++ b/src/app/data_harvester/processes/windows.rs @@ -67,6 +67,26 @@ pub fn sysinfo_process_data( let disk_usage = process_val.disk_usage(); let process_state = (process_val.status().to_string(), 'R'); + + #[cfg(feature = "gpu")] + let (gpu_mem, gpu_util, gpu_mem_percent) = { + let mut gpu_mem = 0; + let mut gpu_util = 0; + let mut gpu_mem_percent = 0.0; + if let Some(gpus) = &collector.gpu_pids { + gpus.iter().for_each(|gpu| { + // add mem/util for all gpus to pid + if let Some((mem, util)) = gpu.get(&process_val.pid().as_u32()) { + gpu_mem += mem; + gpu_util += util; + } + }); + } + if let Some(gpu_total_mem) = &collector.gpus_total_mem { + gpu_mem_percent = (gpu_mem as f64 / *gpu_total_mem as f64 * 100.0) as f32; + } + (gpu_mem, gpu_util, gpu_mem_percent) + }; process_vector.push(ProcessHarvest { pid: process_val.pid().as_u32() as _, parent_pid: process_val.parent().map(|p| p.as_u32() as _), @@ -95,6 +115,12 @@ pub fn sysinfo_process_data( } else { Duration::from_secs(process_val.run_time()) }, + #[cfg(feature = "gpu")] + gpu_mem, + #[cfg(feature = "gpu")] + gpu_util, + #[cfg(feature = "gpu")] + gpu_mem_percent, }); } |