added docker metrics
All checks were successful
Rust Cross-Platform Build / Detect Rust Project (push) Successful in 4s
Rust Cross-Platform Build / Run Tests (push) Successful in 1m3s
Rust Cross-Platform Build / Build (x86_64-unknown-linux-gnu) (push) Successful in 2m56s
Rust Cross-Platform Build / Build (x86_64-pc-windows-gnu) (push) Successful in 3m37s
Rust Cross-Platform Build / Set Tag Name (push) Successful in 5s
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 5s
All checks were successful
Rust Cross-Platform Build / Detect Rust Project (push) Successful in 4s
Rust Cross-Platform Build / Run Tests (push) Successful in 1m3s
Rust Cross-Platform Build / Build (x86_64-unknown-linux-gnu) (push) Successful in 2m56s
Rust Cross-Platform Build / Build (x86_64-pc-windows-gnu) (push) Successful in 3m37s
Rust Cross-Platform Build / Set Tag Name (push) Successful in 5s
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 5s
This commit is contained in:
@@ -11,7 +11,7 @@ pub mod container;
|
||||
pub mod serverclientcomm;
|
||||
pub mod stats;
|
||||
|
||||
use crate::models::{DockerRegistrationDto, DockerMetricDto, DockerContainer};
|
||||
use crate::models::{DockerRegistrationDto, DockerMetricDto, DockerContainer, DockerContainerInfo};
|
||||
use bollard::{query_parameters::InspectContainerOptions, Docker};
|
||||
use std::error::Error;
|
||||
|
||||
@@ -88,7 +88,7 @@ impl DockerManager {
|
||||
}
|
||||
|
||||
/// Gets all available containers as DTOs for registration
|
||||
pub async fn get_containers_for_registration(
|
||||
pub async fn get_containers(
|
||||
&self,
|
||||
) -> Result<Vec<DockerContainer>, Box<dyn Error + Send + Sync>> {
|
||||
let containers = container::get_available_containers(&self.docker).await;
|
||||
@@ -103,8 +103,6 @@ impl DockerManager {
|
||||
.collect())
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// Gets the number of running containers
|
||||
pub async fn get_container_count(&self) -> Result<usize, Box<dyn Error + Send + Sync>> {
|
||||
let containers = container::get_available_containers(&self.docker).await;
|
||||
@@ -118,6 +116,47 @@ impl DockerManager {
|
||||
) -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
container::restart_container(&self.docker, container_id).await
|
||||
}
|
||||
|
||||
/// Collects Docker metrics for all containers
|
||||
pub async fn collect_metrics(
|
||||
&self,
|
||||
) -> Result<DockerMetricDto, Box<dyn Error + Send + Sync>> {
|
||||
let containers = self.get_containers().await?;
|
||||
let (cpu_stats, net_stats, mem_stats) = stats::get_container_stats(&self.docker).await?;
|
||||
|
||||
let container_infos: Vec<_> = containers
|
||||
.into_iter()
|
||||
.map(|container| {
|
||||
let cpu = cpu_stats
|
||||
.iter()
|
||||
.find(|c| c.container_id == container.id)
|
||||
.cloned();
|
||||
let network = net_stats
|
||||
.iter()
|
||||
.find(|n| n.container_id == container.id)
|
||||
.cloned();
|
||||
let ram = mem_stats
|
||||
.iter()
|
||||
.find(|m| m.container_id == container.id)
|
||||
.cloned();
|
||||
|
||||
DockerContainerInfo {
|
||||
container: Some(container),
|
||||
status: None, // Status can be fetched if needed
|
||||
cpu,
|
||||
network,
|
||||
ram,
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
|
||||
let dto = DockerMetricDto {
|
||||
server_id: 0,
|
||||
containers: serde_json::to_string(&container_infos)?,
|
||||
};
|
||||
|
||||
Ok(dto)
|
||||
}
|
||||
}
|
||||
|
||||
// Keep these as utility functions if needed, but they should use DockerManager internally
|
||||
|
Reference in New Issue
Block a user