pub mod cpu; pub mod network; pub mod ram; use serde::{Deserialize, Serialize}; #[derive(Debug, Serialize, Deserialize, Clone)] pub struct ContainerCpuInfo { pub container_id: Option, pub cpu_usage_percent: Option, pub system_cpu_usage: Option, pub container_cpu_usage: Option, pub online_cpus: Option, } #[derive(Debug, Serialize, Deserialize, Clone)] pub struct ContainerNetworkInfo { pub container_id: Option, pub rx_bytes: Option, pub tx_bytes: Option, pub rx_packets: Option, pub tx_packets: Option, pub rx_errors: Option, pub tx_errors: Option, } #[derive(Debug, Serialize, Deserialize, Clone)] pub struct ContainerMemoryInfo { pub container_id: Option, pub memory_usage: Option, pub memory_limit: Option, pub memory_usage_percent: Option, } use bollard::Docker; use std::error::Error; /// Get container statistics for all containers using an existing Docker client pub async fn get_container_stats( docker: &Docker, ) -> Result< ( Vec, Vec, Vec, ), Box, > { let cpu_infos = cpu::get_all_containers_cpu_stats(docker).await?; let net_infos = network::get_all_containers_network_stats(docker).await?; let mem_infos = ram::get_all_containers_memory_stats(docker).await?; Ok((cpu_infos, net_infos, mem_infos)) } /// Get container statistics for a specific container pub async fn get_single_container_stats( docker: &Docker, container_id: &str, ) -> Result< ( Option, Option, Option, ), Box, > { let cpu_info = cpu::get_single_container_cpu_stats(docker, container_id).await?; let net_info = network::get_single_container_network_stats(docker, container_id).await?; let mem_info = ram::get_single_container_memory_stats(docker, container_id).await?; Ok((cpu_info, net_info, mem_info)) } /// Get total network statistics across all containers pub async fn get_total_network_stats( docker: &Docker, ) -> Result<(u64, u64), Box> { network::get_total_network_stats(docker).await } /// Get average CPU usage across all containers pub async fn get_average_cpu_usage(docker: &Docker) -> Result> { cpu::get_average_cpu_usage(docker).await } /// Get total memory usage across all containers pub async fn get_total_memory_usage(docker: &Docker) -> Result> { ram::get_total_memory_usage(docker).await }