use crate::metrics::DiskMetrics;
pub fn collect_disk_metrics(disks: &sysinfo::Disks) -> DiskMetrics {
let mut total_read: u64 = 0;
let mut total_write: u64 = 0;
let name = disks
.list()
.iter()
.max_by_key(|d| d.total_space())
.map(|d| d.name().to_string_lossy().to_string())
.filter(|n| !n.is_empty());
for disk in disks.list() {
let usage = disk.usage();
total_read += usage.read_bytes;
total_write += usage.written_bytes;
}
DiskMetrics {
name,
read_bytes_per_sec: total_read,
write_bytes_per_sec: total_write,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn collect_disk_metrics_with_fresh_disks_returns_zero_or_valid() {
let disks = sysinfo::Disks::new_with_refreshed_list();
let metrics = collect_disk_metrics(&disks);
assert!(metrics.read_bytes_per_sec < u64::MAX);
assert!(metrics.write_bytes_per_sec < u64::MAX);
}
}