use crate::components::{
kernel, memory,
network::{self, get_all_ip_devices, parse_ip_devices_output},
Collector,
};
use anyhow::Result;
use rayon::prelude::*;
use serde_json::{Map, Value};
use std::sync::Arc;
pub fn run() -> Result<()> {
let debug = true;
let components: Vec<Arc<dyn Collector>> = vec![
Arc::new(kernel::KernelComponent::new()),
Arc::new(memory::MemoryComponent::new()),
];
let pairs: Vec<(String, Value)> = components
.par_iter()
.filter_map(|c| {
let name = c.name().to_string();
match c.collect() {
Ok(v) => Some((name, v)),
Err(e) => {
if debug {
eprintln!("[{}] {:#}", name, e);
}
None
}
}
})
.collect();
let facts: Map<String, Value> = pairs.into_iter().collect();
let _j = serde_json::to_string(&Value::Object(facts))?;
println!("{}", _j);
Ok(())
}