//use anyhow::Result; use std::error::Error; pub mod cpu; pub mod disk; pub mod gpu; pub mod memory; pub mod network; pub use cpu::get_cpu_info; pub use disk::get_disk_info; pub use gpu::get_gpu_info; pub use memory::get_memory_info; pub use network::get_network_info; pub use network::NetworkMonitor; /// # Hardware Module /// /// This module aggregates all hardware subsystems for WatcherAgent, providing unified collection and access to CPU, GPU, memory, disk, and network statistics. /// /// ## Responsibilities /// - **Subsystem Aggregation:** Combines all hardware modules into a single struct for easy access. /// - **Unified Collection:** Provides a single async method to collect all hardware metrics at once. /// /// Aggregated hardware statistics for the host system. /// /// # Fields /// - `cpu`: CPU statistics (see [`CpuInfo`]) /// - `gpu`: GPU statistics (see [`GpuInfo`]) /// - `memory`: Memory statistics (see [`MemoryInfo`]) /// - `disk`: Disk statistics (see [`DiskInfo`]) /// - `network`: Network statistics (see [`NetworkInfo`]) /// - `network_monitor`: Rolling monitor for network bandwidth #[derive(Debug)] pub struct HardwareInfo { pub cpu: cpu::CpuInfo, pub gpu: gpu::GpuInfo, pub memory: memory::MemoryInfo, pub disk: disk::DiskInfo, pub network: network::NetworkInfo, pub network_monitor: network::NetworkMonitor, } impl HardwareInfo { /// Collects all hardware statistics asynchronously. /// /// # Returns /// * `Result>` - Aggregated hardware statistics or error if any subsystem fails. pub async fn collect() -> Result> { let mut network_monitor = network::NetworkMonitor::new(); Ok(Self { cpu: get_cpu_info().await?, gpu: get_gpu_info().await?, memory: get_memory_info().await?, disk: get_disk_info().await?, network: match get_network_info(&mut network_monitor).await { Ok(info) => info, Err(e) => { eprintln!("Error collecting network info: {}", e); network::NetworkInfo { interfaces: None, rx_rate: None, tx_rate: None, } } }, network_monitor, }) } }