diff --git a/apps/desktop/src-tauri/src/business/services/cache_manager.rs b/apps/desktop/src-tauri/src/business/services/cache_manager.rs index 4abbef2..4b5fe67 100644 --- a/apps/desktop/src-tauri/src/business/services/cache_manager.rs +++ b/apps/desktop/src-tauri/src/business/services/cache_manager.rs @@ -789,7 +789,7 @@ where } /// 检查缓存健康状态 - pub async fn health_check(&self) -> CacheHealthStatus { + pub async fn health_check(&self) -> CacheHealthStatusEnum { let stats = self.get_stats().await; let mut issues = Vec::new(); @@ -810,9 +810,9 @@ where } if issues.is_empty() { - CacheHealthStatus::Healthy + CacheHealthStatusEnum::Healthy } else { - CacheHealthStatus::Warning(issues) + CacheHealthStatusEnum::Warning(issues) } } @@ -830,9 +830,9 @@ where } } -/// 缓存健康状态 +/// 缓存健康状态枚举 #[derive(Debug, Clone)] -pub enum CacheHealthStatus { +pub enum CacheHealthStatusEnum { /// 健康 Healthy, /// 警告 @@ -841,6 +841,18 @@ pub enum CacheHealthStatus { Error(Vec), } +/// 缓存健康状态详情 +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct CacheHealthStatus { + pub status: String, + pub hit_rate: f64, + pub utilization: f64, + pub total_items: usize, + pub expired_items: usize, + pub memory_usage: usize, + pub recommendations: Vec, +} + /// 缓存项信息 #[derive(Debug, Clone)] pub struct CacheItemInfo { diff --git a/apps/desktop/src-tauri/src/business/services/comfyui_v2_service.rs b/apps/desktop/src-tauri/src/business/services/comfyui_v2_service.rs index ea75ded..b04b39d 100644 --- a/apps/desktop/src-tauri/src/business/services/comfyui_v2_service.rs +++ b/apps/desktop/src-tauri/src/business/services/comfyui_v2_service.rs @@ -10,14 +10,14 @@ use tracing::{info, warn, error, debug}; use serde::{Serialize, Deserialize}; use uuid::Uuid; -use comfyui_sdk::{ComfyUIClient, ComfyUIConfig}; +use comfyui_sdk::ComfyUIClient; +use crate::data::models::comfyui::ComfyUIConfig; use comfyui_sdk::types::{PromptRequest, ExecutionOptions, ParameterValues}; use comfyui_sdk::templates::WorkflowInstance; use crate::data::models::comfyui::{ WorkflowModel, TemplateModel, ExecutionModel, ExecutionStatus, - CreateWorkflowRequest, UpdateWorkflowRequest, CreateTemplateRequest, - ExecuteWorkflowRequest, ExecuteTemplateRequest + ExecuteWorkflowRequest }; use crate::data::repositories::comfyui_repository::ComfyUIRepository; use crate::business::services::realtime_monitor_v2::RealtimeMonitorV2; diff --git a/apps/desktop/src-tauri/src/business/services/comfyui_v2_service_manager.rs b/apps/desktop/src-tauri/src/business/services/comfyui_v2_service_manager.rs index 07b8b8a..9eb6f9d 100644 --- a/apps/desktop/src-tauri/src/business/services/comfyui_v2_service_manager.rs +++ b/apps/desktop/src-tauri/src/business/services/comfyui_v2_service_manager.rs @@ -43,14 +43,21 @@ impl ComfyUIV2ServiceManager { // 创建缓存管理器 let cache_manager = Arc::new(CacheManager::new(CacheConfig::default())); + // 创建 ComfyUI 管理器 + let comfyui_manager = Arc::new(ComfyUIManager::new(repository.clone())); + // 创建模板引擎 let template_engine = Arc::new(TemplateEngine::new(repository.clone())); - + // 创建队列管理器 let queue_manager = Arc::new(QueueManager::new(repository.clone(), None)); - + // 创建实时监控服务 - let realtime_monitor = Arc::new(RealtimeMonitorV2::new(repository.clone(), None)); + let realtime_monitor = Arc::new(RealtimeMonitorV2::new( + comfyui_manager.clone(), + repository.clone(), + None + )); // 创建核心 ComfyUI V2 服务 let comfyui_service = Arc::new(ComfyUIV2Service::new( diff --git a/apps/desktop/src-tauri/src/business/services/queue_manager.rs b/apps/desktop/src-tauri/src/business/services/queue_manager.rs index 6e09083..05ce3a7 100644 --- a/apps/desktop/src-tauri/src/business/services/queue_manager.rs +++ b/apps/desktop/src-tauri/src/business/services/queue_manager.rs @@ -12,6 +12,7 @@ use chrono::{DateTime, Utc}; use crate::data::models::comfyui::{ExecutionModel, ExecutionStatus, ParameterValues, WorkflowModel, TemplateModel}; use crate::data::repositories::comfyui_repository::ComfyUIRepository; +use crate::business::services::comfyui_manager::ComfyUIManager; /// 任务优先级 #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] diff --git a/apps/desktop/src-tauri/src/business/services/realtime_monitor_v2.rs b/apps/desktop/src-tauri/src/business/services/realtime_monitor_v2.rs index 434ec70..f087163 100644 --- a/apps/desktop/src-tauri/src/business/services/realtime_monitor_v2.rs +++ b/apps/desktop/src-tauri/src/business/services/realtime_monitor_v2.rs @@ -14,6 +14,8 @@ use uuid::Uuid; use crate::business::services::tauri_event_emitter::TauriEventEmitter; use crate::data::models::comfyui::{ExecutionModel, ExecutionStatus}; use crate::data::repositories::comfyui_repository::ComfyUIRepository; +use crate::business::services::comfyui_manager::ComfyUIManager; +use comfyui_sdk::WebSocketClient; /// 实时事件类型 #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/apps/desktop/src-tauri/src/presentation/commands/comfyui_v2_commands.rs b/apps/desktop/src-tauri/src/presentation/commands/comfyui_v2_commands.rs index 2477945..e29d313 100644 --- a/apps/desktop/src-tauri/src/presentation/commands/comfyui_v2_commands.rs +++ b/apps/desktop/src-tauri/src/presentation/commands/comfyui_v2_commands.rs @@ -21,6 +21,9 @@ use crate::data::models::comfyui::{ WorkflowModel, TemplateModel, ExecutionModel, ExecutionStatus, ComfyUIConfig, ParameterValues, ValidationResult, }; +use comfyui_sdk::types::{ComfyUIWorkflow, ComfyUINode}; +use std::collections::HashMap; +use crate::business::services::comfyui_manager::ComfyUIManager; // ==================== 响应类型定义 ==================== @@ -404,8 +407,17 @@ pub async fn comfyui_v2_create_workflow( let service_manager = get_service_manager(&state).await?; let repository = service_manager.get_repository(); + // 转换工作流数据 + let workflow_data: ComfyUIWorkflow = request.workflow_data.into_iter() + .map(|(k, v)| { + let node = serde_json::from_value(v) + .map_err(|e| format!("解析工作流节点失败: {}", e))?; + Ok((k, node)) + }) + .collect::, String>>()?; + // 创建工作流模型 - let mut workflow = WorkflowModel::new(request.name, request.workflow_data); + let mut workflow = WorkflowModel::new(request.name, workflow_data); // 设置可选字段 workflow.description = request.description; @@ -413,7 +425,7 @@ pub async fn comfyui_v2_create_workflow( workflow.tags = request.tags; // 保存到数据库 - repository.create_workflow(&workflow).await + repository.create_workflow(&workflow) .map_err(|e| format!("创建工作流失败: {}", e))?; Ok(convert_workflow_model(&workflow)) @@ -430,7 +442,7 @@ pub async fn comfyui_v2_list_workflows( let service_manager = get_service_manager(&state).await?; let repository = service_manager.get_repository(); - let workflows = repository.list_workflows(enabled_only.unwrap_or(true)).await + let workflows = repository.list_workflows(enabled_only.unwrap_or(true)) .map_err(|e| format!("获取工作流列表失败: {}", e))?; let responses = workflows.iter().map(convert_workflow_model).collect(); @@ -448,7 +460,7 @@ pub async fn comfyui_v2_get_workflow( let service_manager = get_service_manager(&state).await?; let repository = service_manager.get_repository(); - match repository.get_workflow(&workflow_id).await { + match repository.get_workflow(&workflow_id) { Ok(Some(workflow)) => Ok(convert_workflow_model(&workflow)), Ok(None) => Err("工作流不存在".to_string()), Err(e) => Err(format!("获取工作流失败: {}", e)),