From 8489c4bc1001073e3eebbe5ec944f175fb4c7b5f Mon Sep 17 00:00:00 2001 From: Clement Tsang <34804052+ClementTsang@users.noreply.github.com> Date: Sun, 5 Mar 2023 02:31:45 -0500 Subject: refactor: Clean up memory collection code (#1045) --- src/app/data_harvester/memory/sysinfo.rs | 95 +++++++++++++++----------------- 1 file changed, 44 insertions(+), 51 deletions(-) (limited to 'src') diff --git a/src/app/data_harvester/memory/sysinfo.rs b/src/app/data_harvester/memory/sysinfo.rs index 521ba6d2..7c04ab80 100644 --- a/src/app/data_harvester/memory/sysinfo.rs +++ b/src/app/data_harvester/memory/sysinfo.rs @@ -52,56 +52,57 @@ pub(crate) fn get_swap_data(sys: &System) -> Option { #[cfg(feature = "zfs")] pub(crate) fn get_arc_data() -> Option { let (mem_total_in_kib, mem_used_in_kib) = { - #[cfg(target_os = "linux")] - { - // TODO: [OPT] is this efficient? - use std::fs::read_to_string; - if let Ok(arcinfo) = read_to_string("/proc/spl/kstat/zfs/arcstats") { - let mut mem_arc = 0; - let mut mem_total = 0; - let mut zfs_keys_read: u8 = 0; - const ZFS_KEYS_NEEDED: u8 = 2; + cfg_if::cfg_if! { + if #[cfg(target_os = "linux")] + { + // TODO: [OPT] is this efficient? + use std::fs::read_to_string; + if let Ok(arc_stats) = read_to_string("/proc/spl/kstat/zfs/arcstats") { + let mut mem_arc = 0; + let mut mem_total = 0; + let mut zfs_keys_read: u8 = 0; + const ZFS_KEYS_NEEDED: u8 = 2; - for line in arcinfo.lines() { - if let Some((label, value)) = line.split_once(' ') { - let to_write = match label { - "size" => &mut mem_arc, - "memory_all_bytes" => &mut mem_total, - _ => { - continue; - } - }; + for line in arc_stats.lines() { + if let Some((label, value)) = line.split_once(' ') { + let to_write = match label { + "size" => &mut mem_arc, + "memory_all_bytes" => &mut mem_total, + _ => { + continue; + } + }; - if let Some((_type, number)) = value.trim_start().rsplit_once(' ') { - // Parse the value, remember it's in bytes! - if let Ok(number) = number.parse::() { - *to_write = number; - // We only need a few keys, so we can bail early. - zfs_keys_read += 1; - if zfs_keys_read == ZFS_KEYS_NEEDED { - break; + if let Some((_type, number)) = value.trim_start().rsplit_once(' ') { + // Parse the value, remember it's in bytes! + if let Ok(number) = number.parse::() { + *to_write = number; + // We only need a few keys, so we can bail early. + zfs_keys_read += 1; + if zfs_keys_read == ZFS_KEYS_NEEDED { + break; + } } } } } + (mem_total / 1024, mem_arc / 1024) + } else { + (0, 0) } - (mem_total / 1024, mem_arc / 1024) - } else { - (0, 0) - } - } - - #[cfg(target_os = "freebsd")] - { - use sysctl::Sysctl; - if let (Ok(mem_arc_value), Ok(mem_sys_value)) = ( - sysctl::Ctl::new("kstat.zfs.misc.arcstats.size"), - sysctl::Ctl::new("hw.physmem"), - ) { - if let (Ok(sysctl::CtlValue::U64(arc)), Ok(sysctl::CtlValue::Ulong(mem))) = - (mem_arc_value.value(), mem_sys_value.value()) - { - (mem / 1024, arc / 1024) + } else if #[cfg(target_os = "freebsd")] { + use sysctl::Sysctl; + if let (Ok(mem_arc_value), Ok(mem_sys_value)) = ( + sysctl::Ctl::new("kstat.zfs.misc.arcstats.size"), + sysctl::Ctl::new("hw.physmem"), + ) { + if let (Ok(sysctl::CtlValue::U64(arc)), Ok(sysctl::CtlValue::Ulong(mem))) = + (mem_arc_value.value(), mem_sys_value.value()) + { + (mem / 1024, arc / 1024) + } else { + (0, 0) + } } else { (0, 0) } @@ -109,14 +110,6 @@ pub(crate) fn get_arc_data() -> Option { (0, 0) } } - #[cfg(target_os = "macos")] - { - (0, 0) - } - #[cfg(target_os = "windows")] - { - (0, 0) - } }; Some(MemHarvest { -- cgit v1.2.3