Refactor Docker integration: update BollardAdapter to use async Mutex, implement version retrieval, and clean up unused service methods.
All checks were successful
ci/woodpecker/push/test/1 Pipeline was successful
ci/woodpecker/push/test/2 Pipeline was successful

This commit is contained in:
2025-11-13 21:43:26 +00:00
parent f3a107b2a6
commit 5ba96e86d9
3 changed files with 19 additions and 15 deletions

View File

@@ -1,5 +1,6 @@
use bollard::Docker;
use std::sync::{Arc, Mutex};
use std::sync::Arc;
use tokio::sync::Mutex;
pub struct BollardAdapter {
client: Arc<Mutex<Option<Docker>>>,
@@ -22,22 +23,22 @@ impl crate::docker::DockerAdapter for BollardAdapter {
docker.ping().await?;
let mut client = self.client.lock().unwrap();
let mut client = self.client.lock().await;
*client = Some(docker);
Ok(())
}
async fn list_service_with_label(&self, label: &str) -> anyhow::Result<Vec<String>> {
Ok(vec![])
}
async fn version(&self) -> anyhow::Result<String> {
let client = self.client.lock().await;
if let Some(docker) = &*client {
let version_info = docker.version().await?;
let version = version_info.version;
async fn shutdown_service(&self, service_name: &str) -> anyhow::Result<()> {
Ok(())
version.ok_or_else(|| anyhow::anyhow!("Version not available"))
} else {
Err(anyhow::anyhow!("Docker client is not connected"))
}
async fn start_service(&self, service_name: &str) -> anyhow::Result<()> {
Ok(())
}
}

View File

@@ -14,11 +14,13 @@ impl<T: DockerAdapter> Docker<T> {
pub async fn connect_docker(&self, docker_host: Option<String>) -> anyhow::Result<()> {
self.adapter.connect_docker(docker_host).await
}
pub async fn version(&self) -> anyhow::Result<String> {
self.adapter.version().await
}
}
pub trait DockerAdapter {
async fn connect_docker(&self, docker_host: Option<String>) -> anyhow::Result<()>;
async fn list_service_with_label(&self, label: &str) -> anyhow::Result<Vec<String>>;
async fn shutdown_service(&self, service_name: &str) -> anyhow::Result<()>;
async fn start_service(&self, service_name: &str) -> anyhow::Result<()>;
async fn version(&self) -> anyhow::Result<String>;
}

View File

@@ -12,9 +12,10 @@ async fn main() -> anyhow::Result<()> {
let envs = load_envs()?;
let backup_root_path = std::path::Path::new(&envs.backup_folder);
let folders = list_folders(backup_root_path).await?;
let _folders = list_folders(backup_root_path).await?;
let docker_conn = connect_docker(envs.docker_host).await?;
println!("Docker version: {}", docker_conn.version().await?);
Ok(())
}