added status in docker metric collect
All checks were successful
Rust Cross-Platform Build / Detect Rust Project (push) Successful in 4s
Rust Cross-Platform Build / Run Tests (push) Successful in 1m9s
Rust Cross-Platform Build / Build (x86_64-unknown-linux-gnu) (push) Successful in 3m10s
Rust Cross-Platform Build / Build (x86_64-pc-windows-gnu) (push) Successful in 4m0s
Rust Cross-Platform Build / Set Tag Name (push) Successful in 4s
Rust Cross-Platform Build / Build and Push Docker Image (push) Successful in 2m12s
Rust Cross-Platform Build / Workflow Summary (push) Successful in 2s
Rust Cross-Platform Build / Create Tag (push) Successful in 4s

This commit is contained in:
2025-10-29 22:23:58 +01:00
parent c36b17fa05
commit 2a4cc4b2d5
5 changed files with 208 additions and 71 deletions

View File

@@ -1,9 +1,19 @@
pub mod cpu;
pub mod network;
pub mod ram;
pub mod status;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ContainerStatusInfo {
pub container_id: Option<String>,
pub status: Option<String>, // "running", "stopped", "paused", "exited", etc.
pub state: Option<String>, // More detailed state information
pub started_at: Option<String>,
pub finished_at: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ContainerCpuInfo {
pub container_id: Option<String>,
@@ -43,33 +53,34 @@ pub async fn get_container_stats(
Vec<ContainerCpuInfo>,
Vec<ContainerNetworkInfo>,
Vec<ContainerMemoryInfo>,
Vec<ContainerStatusInfo>,
),
Box<dyn Error + Send + Sync>,
> {
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?;
let status_infos = status::get_all_containers_status(docker).await?;
Ok((cpu_infos, net_infos, mem_infos))
Ok((cpu_infos, net_infos, mem_infos, status_infos))
}
/// Get container statistics for a specific container
pub async fn get_single_container_stats(
docker: &Docker,
container_id: &str,
) -> Result<
(
Option<ContainerCpuInfo>,
Option<ContainerNetworkInfo>,
Option<ContainerMemoryInfo>,
),
Box<dyn Error + Send + Sync>,
> {
) -> Result<(
Option<ContainerCpuInfo>,
Option<ContainerNetworkInfo>,
Option<ContainerMemoryInfo>,
Option<ContainerStatusInfo>,
), Box<dyn Error + Send + Sync>> {
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?;
let status_info = status::get_single_container_status(docker, container_id).await?;
Ok((cpu_info, net_info, mem_info))
Ok((cpu_info, net_info, mem_info, status_info))
}
/// Get total network statistics across all containers