dedup disks by size

This commit is contained in:
Robin Appelman 2021-03-24 23:25:33 +01:00
commit 9c4a767c40

View file

@ -6,7 +6,7 @@ use crate::zfs::ZFS;
use color_eyre::{Report, Result}; use color_eyre::{Report, Result};
use futures_util::stream::StreamExt; use futures_util::stream::StreamExt;
use futures_util::{pin_mut, try_join}; use futures_util::{pin_mut, try_join};
use std::collections::HashMap; use std::collections::{HashMap, HashSet};
use std::fmt::Write; use std::fmt::Write;
use warp::reject::Reject; use warp::reject::Reject;
use warp::{Filter, Rejection}; use warp::{Filter, Rejection};
@ -114,21 +114,25 @@ async fn get_metrics(heim: Heim, zfs: ZFS) -> Result<String, ReportRejection> {
.ok(); .ok();
} }
} }
let mut found_sizes = HashSet::new();
while let Some(disk) = disk_usage.next().await { while let Some(disk) = disk_usage.next().await {
let disk: DiskUsage = disk; let disk: DiskUsage = disk;
if disk.size > 0 { if disk.size > 0 {
writeln!( if found_sizes.insert((disk.size, disk.free)) {
&mut result, writeln!(
"disk_size{{host=\"{}\", disk=\"{}\"}} {}", &mut result,
hostname, disk.name, disk.size "disk_size{{host=\"{}\", disk=\"{}\"}} {}",
) hostname, disk.name, disk.size
.ok(); )
writeln!( .ok();
&mut result, writeln!(
"disk_free{{host=\"{}\", disk=\"{}\"}} {}", &mut result,
hostname, disk.name, disk.free "disk_free{{host=\"{}\", disk=\"{}\"}} {}",
) hostname, disk.name, disk.free
.ok(); )
.ok();
}
} }
} }
for (label, temp) in temperatures { for (label, temp) in temperatures {