add services status
This commit is contained in:
47
src/docker.rs
Normal file
47
src/docker.rs
Normal 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)
|
||||
}
|
||||
Reference in New Issue
Block a user