use std::io::Write;
use std::path::Path;
use anyhow::{Context, Result};
use crate::nsd::{ByPool, Nsd};
pub const DEFAULT_DEVICE_CACHE: &str = "/run/mmlocal-nmon-cache";
pub fn by_pool_cached<Cache, Output>(
device_cache: Cache,
force: bool,
output: &mut Output,
) -> Result<()>
where
Cache: AsRef<Path>,
Output: Write,
{
let device_cache = device_cache.as_ref();
let pooled = crate::nsd::local_pooled(device_cache, force)
.context("fetching local NSD devices")?;
by_pool(pooled, output)?;
Ok(())
}
pub fn by_pool<Output>(pooled: ByPool, output: &mut Output) -> Result<()>
where
Output: Write,
{
for (id, nsds) in pooled {
let fs = id.fs();
let pool = id.pool();
let devices = nsds
.iter()
.flat_map(Nsd::device_name)
.collect::<Vec<_>>()
.join(" ");
writeln!(output, "{fs}-{pool} {devices}")?;
}
Ok(())
}