1use sysinfo::{Pid, ProcessRefreshKind, RefreshKind, System};
7
8#[derive(Debug, Clone)]
10pub struct ResourceStats {
11 pub process_memory_bytes: u64,
13
14 pub virtual_memory_bytes: u64,
16
17 pub pid: u32,
19}
20
21pub fn get_resource_stats() -> Option<ResourceStats> {
23 let pid = std::process::id();
24 let mut system = System::new_with_specifics(
25 RefreshKind::new().with_processes(ProcessRefreshKind::new().with_memory()),
26 );
27
28 system.refresh_processes_specifics(ProcessRefreshKind::new().with_memory());
29
30 let sysinfo_pid = Pid::from_u32(pid);
31 let process = system.process(sysinfo_pid)?;
32
33 Some(ResourceStats {
34 process_memory_bytes: process.memory(),
35 virtual_memory_bytes: process.virtual_memory(),
36 pid,
37 })
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43
44 #[test]
45 fn test_get_resource_stats() {
46 let stats = get_resource_stats();
48 if let Some(stats) = stats {
49 assert!(stats.pid > 0);
50 assert!(stats.process_memory_bytes > 0 || stats.virtual_memory_bytes > 0);
52 }
53 }
54}