From 96e7f36731c0a6b0c163c454d40c627b12012df3 Mon Sep 17 00:00:00 2001 From: GW_MC <72297530+GWMCwing@users.noreply.github.com> Date: Sun, 28 Dec 2025 18:35:53 +0800 Subject: [PATCH] feat: integrate AgentService into app service and enhance configuration handling --- apps/api/src/routes/api/health/info.rs | 3 +++ apps/api/src/services.rs | 7 +++++++ apps/api/src/services/agent_client.rs | 21 +++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/apps/api/src/routes/api/health/info.rs b/apps/api/src/routes/api/health/info.rs index 239086d..1385c21 100644 --- a/apps/api/src/routes/api/health/info.rs +++ b/apps/api/src/routes/api/health/info.rs @@ -79,6 +79,7 @@ pub async fn get_health_info( #[cfg(test)] mod test { use crate::configs::FromConfig; + use crate::services::agent_client::AgentService; use crate::{ routes::{AppState, api::health::state::HealthState}, services::{ @@ -94,6 +95,7 @@ mod test { }; use super::*; + use agent_client::apis::configuration::Configuration; use axum::body::to_bytes; use axum::{ Router, @@ -124,6 +126,7 @@ mod test { }, user: Arc::new(UserServiceImpl::new(db.clone())), server_state: Arc::new(ServerStateService::new(db.clone())), + agent_client: Arc::new(AgentService::new(Configuration::default())), }), }); diff --git a/apps/api/src/services.rs b/apps/api/src/services.rs index 2b36eaf..8960c58 100644 --- a/apps/api/src/services.rs +++ b/apps/api/src/services.rs @@ -5,6 +5,8 @@ pub mod settings; use std::sync::Arc; +use ::agent_client::apis::configuration::Configuration; + use crate::{ configs::ProgramSettings, routes::{self, AuthState}, @@ -25,6 +27,8 @@ pub struct AppService { pub auth_state: AuthState, pub user: ServiceState, pub server_state: ServiceState, + #[allow(dead_code)] + pub agent_client: ServiceState, } pub fn get_app_service( @@ -43,5 +47,8 @@ pub fn get_app_service( )), }, user: Arc::new(UserServiceImpl::new(db_connection.clone())), + agent_client: Arc::new(agent_client::AgentService::new(Configuration::from( + settings.agent.clone(), + ))), } } diff --git a/apps/api/src/services/agent_client.rs b/apps/api/src/services/agent_client.rs index 74c3d1c..8aa7d95 100644 --- a/apps/api/src/services/agent_client.rs +++ b/apps/api/src/services/agent_client.rs @@ -1,11 +1,32 @@ use std::sync::Arc; use agent_client::apis::{ApiClient, configuration::Configuration}; +use tracing::warn; + +use crate::configs::agent::AgentSettings; pub struct AgentService { client: Arc, } +impl From for Configuration { + fn from(settings: AgentSettings) -> Self { + let mut config = Configuration::default(); + let mut builder = reqwest::Client::builder(); + + let url = settings.socket_path; + if url.starts_with("unix://") { + builder = builder.unix_socket(url.to_string()); + config.client = builder.build().expect("Failed to build reqwest client"); + } else { + warn!("AgentSettings contains a non-unix socket path: {}", url); + config.base_path = url; + } + + config + } +} + impl AgentService { pub fn new(config: impl Into>) -> Self { let client = ApiClient::new(config.into());