add services status

This commit is contained in:
2026-04-11 21:11:38 +02:00
parent 21fe914f18
commit d1f9238b2a
9 changed files with 730 additions and 20 deletions

47
src/docker.rs Normal file
View File

@@ -0,0 +1,47 @@
use bollard::models::ContainerSummary;
use bollard::{Docker, errors::Error};
use crate::config::Service;
use std::collections::HashMap;
use std::default::Default;
pub async fn running_containers() -> Result<Vec<String>, Error> {
let mut names: Vec<String> = Default::default();
let docker = Docker::connect_with_socket_defaults()?;
let mut list_container_filters = HashMap::new();
list_container_filters.insert(String::from("status"), vec![String::from("running")]);
let containers = &docker
.list_containers(Some(
bollard::query_parameters::ListContainersOptionsBuilder::default()
.all(true)
.filters(&list_container_filters)
.build(),
))
.await?;
for c in containers {
if let Some(c_names) = &c.names {
for name in c_names {
names.push(name.clone());
}
}
}
Ok(names)
}
pub async fn running_services(services: &Vec<Service>) -> Result<Vec<bool>, Error> {
let running = running_containers().await?;
let mut status: Vec<bool> = Default::default();
for service in services.iter() {
let service_status: bool = service.containers.iter().all(|name| running.contains(name));
status.push(service_status);
}
Ok(status)
}