use crate::agents::AgentAdapter;
use crate::batch::status::{BatchOperationResult, ToolOperationResult};
use rayon::prelude::*;
use std::time::Instant;
fn validate_agent_config(adapter: &Box<dyn AgentAdapter>) -> anyhow::Result<()> {
let config_path = adapter.config_path()?;
if config_path.exists() {
Ok(())
} else {
anyhow::bail!("配置文件不存在")
}
}
pub fn batch_validate_agents(adapters: Vec<Box<dyn AgentAdapter>>) -> BatchOperationResult {
let start = Instant::now();
let total = adapters.len();
let results: Vec<ToolOperationResult> = adapters
.par_iter()
.map(|adapter| {
let agent_name = adapter.name().to_string();
let result = validate_agent_config(adapter);
match result {
Ok(()) => ToolOperationResult {
agent_name,
success: true,
error_message: None,
backup_path: None,
},
Err(e) => ToolOperationResult {
agent_name,
success: false,
error_message: Some(e.to_string()),
backup_path: None,
},
}
})
.collect();
let succeeded = results.iter().filter(|r| r.success).count();
let failed = total - succeeded;
let duration_ms = start.elapsed().as_millis();
BatchOperationResult {
total,
succeeded,
failed,
results,
duration_ms,
}
}
pub fn batch_validate_selected_agents(
adapters: Vec<Box<dyn AgentAdapter>>,
selected_agents: Vec<String>,
) -> BatchOperationResult {
let filtered_adapters: Vec<_> = adapters
.into_iter()
.filter(|a| selected_agents.contains(&a.name().to_string()))
.collect();
batch_validate_agents(filtered_adapters)
}