use bollard::{Docker, errors::Error}; use crate::config::Service; use std::collections::HashMap; use std::default::Default; pub async fn running_containers() -> Result, Error> { let mut names: Vec = 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) -> Result, Error> { let running = running_containers().await?; let mut status: Vec = 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) }