summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorClement Tsang <34804052+ClementTsang@users.noreply.github.com>2023-03-05 02:31:45 -0500
committerGitHub <noreply@github.com>2023-03-05 02:31:45 -0500
commit8489c4bc1001073e3eebbe5ec944f175fb4c7b5f (patch)
treef1d642274cee3964ce59b809ab304ab660676909 /src
parent351056363824fcf1b7feb8a7256b871a047a23e1 (diff)
refactor: Clean up memory collection code (#1045)
Diffstat (limited to 'src')
-rw-r--r--src/app/data_harvester/memory/sysinfo.rs95
1 files changed, 44 insertions, 51 deletions
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<MemHarvest> {
#[cfg(feature = "zfs")]
pub(crate) fn get_arc_data() -> Option<MemHarvest> {
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::<u64>() {
- *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::<u64>() {
+ *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<MemHarvest> {
(0, 0)
}
}
- #[cfg(target_os = "macos")]
- {
- (0, 0)
- }
- #[cfg(target_os = "windows")]
- {
- (0, 0)
- }
};
Some(MemHarvest {