re-enable zfs feature (#1044)

This commit is contained in:
Justin Martin 2023-03-04 20:10:24 -05:00 committed by GitHub
parent 994c11e3b3
commit 3510563638
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 58 additions and 10 deletions

View File

@ -63,12 +63,13 @@ strip = false
battery = ["starship-battery"] battery = ["starship-battery"]
gpu = ["nvidia"] gpu = ["nvidia"]
nvidia = ["nvml-wrapper"] nvidia = ["nvml-wrapper"]
zfs = []
# The features we use by default. # The features we use by default.
default = ["fern", "log", "battery", "gpu"] default = ["fern", "log", "battery", "gpu", "zfs"]
# The features we use on deploy. Logging is not included as that is primarily (for now) just for debugging locally. # The features we use on deploy. Logging is not included as that is primarily (for now) just for debugging locally.
deploy = ["battery", "gpu"] deploy = ["battery", "gpu", "zfs"]
[dependencies] [dependencies]
anyhow = "1.0.69" anyhow = "1.0.69"

View File

@ -52,6 +52,45 @@ pub(crate) fn get_swap_data(sys: &System) -> Option<MemHarvest> {
#[cfg(feature = "zfs")] #[cfg(feature = "zfs")]
pub(crate) fn get_arc_data() -> Option<MemHarvest> { pub(crate) fn get_arc_data() -> Option<MemHarvest> {
let (mem_total_in_kib, mem_used_in_kib) = { 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;
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;
}
};
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)
}
}
#[cfg(target_os = "freebsd")] #[cfg(target_os = "freebsd")]
{ {
use sysctl::Sysctl; use sysctl::Sysctl;
@ -70,10 +109,19 @@ pub(crate) fn get_arc_data() -> Option<MemHarvest> {
(0, 0) (0, 0)
} }
} }
#[cfg(target_os = "macos")]
{
(0, 0)
}
#[cfg(target_os = "windows")]
{
(0, 0)
}
}; };
Some(MemHarvest { Some(MemHarvest {
mem_total_in_kib, total_kib: mem_total_in_kib,
mem_used_in_kib, used_kib: mem_used_in_kib,
use_percent: if mem_total_in_kib == 0 { use_percent: if mem_total_in_kib == 0 {
None None
} else { } else {

View File

@ -572,22 +572,21 @@ pub fn convert_arc_labels(
} }
} }
if current_data.arc_harvest.mem_total_in_kib > 0 { if current_data.arc_harvest.total_kib > 0 {
Some(( Some((
format!( format!(
"{:3.0}%", "{:3.0}%",
current_data.arc_harvest.use_percent.unwrap_or(0.0) current_data.arc_harvest.use_percent.unwrap_or(0.0)
), ),
{ {
let (unit, denominator) = return_unit_and_denominator_for_mem_kib( let (unit, denominator) =
current_data.arc_harvest.mem_total_in_kib, return_unit_and_denominator_for_mem_kib(current_data.arc_harvest.total_kib);
);
format!( format!(
" {:.1}{}/{:.1}{}", " {:.1}{}/{:.1}{}",
current_data.arc_harvest.mem_used_in_kib as f64 / denominator, current_data.arc_harvest.used_kib as f64 / denominator,
unit, unit,
(current_data.arc_harvest.mem_total_in_kib as f64 / denominator), (current_data.arc_harvest.total_kib as f64 / denominator),
unit unit
) )
}, },