|
| 1 | +use std::collections::HashMap; |
| 2 | +use bollard::container::ListContainersOptions; |
| 3 | +use bollard::Docker; |
| 4 | +use serde_json; |
| 5 | + |
1 | 6 | use crate::{ |
2 | | - error::ServiceError, |
3 | | - config::db::Pool, |
| 7 | + error::ServiceError |
4 | 8 | }; |
5 | 9 | use actix_web::{ |
6 | | - // http::{ |
7 | | - // StatusCode, |
8 | | - // header::HeaderValue, |
9 | | - // }, |
10 | | - web, |
| 10 | + http::{ |
| 11 | + StatusCode, |
| 12 | + } |
11 | 13 | }; |
12 | 14 |
|
13 | | -pub fn find_all(pool: &web::Data<Pool>) -> Result<String, ServiceError> { |
14 | | - // docker |
15 | | - // Here we need to discuss how to connect docker api |
16 | | - // let docker = // docker api client; |
17 | | - // match docker::find_all(&pool.get().unwrap()) { |
18 | | - // Ok(message) => Ok(message), |
19 | | - // Err(message) => Err(ServiceError::new(StatusCode::BAD_REQUEST, message)) |
| 15 | +pub async fn find_all() -> Result<String, ServiceError> { |
| 16 | + let docker = Docker::connect_with_local_defaults().unwrap(); |
| 17 | + let mut list_container_filters = HashMap::new(); |
| 18 | + list_container_filters.insert("status", vec!["running"]); |
| 19 | + |
| 20 | + let containers = &docker |
| 21 | + .list_containers(Some(ListContainersOptions { |
| 22 | + all: true, |
| 23 | + filters: list_container_filters, |
| 24 | + ..Default::default() |
| 25 | + })) |
| 26 | + .await; |
| 27 | + // let c = containers.iter().collect::<String>(); |
| 28 | + // let mut names = Vec::new(); |
| 29 | + // for container in containers { |
| 30 | + // names.push(container.); |
20 | 31 | // } |
21 | | - unimplemented!() |
| 32 | + match containers { |
| 33 | + Err(_)=> Err(ServiceError::new(StatusCode::NO_CONTENT, |
| 34 | + "No containers found".to_string())), |
| 35 | + Ok(cs) => Ok(serde_json::to_string(cs).unwrap()), |
| 36 | + } |
22 | 37 | } |
0 commit comments