From e081c7560cd61302bef0ec05919577765b52c4e6 Mon Sep 17 00:00:00 2001 From: Jason Date: Mon, 15 Dec 2025 22:52:58 +0800 Subject: [PATCH] fix(proxy): reset health badges when proxy stops Clear all provider_health records when stopping the proxy server, ensuring health badges reset to "healthy" state. This fixes the inconsistency where circuit breakers (in memory) would reset on stop but health badges (in database) would retain stale state. --- src-tauri/src/database/dao/proxy.rs | 11 +++++++++++ src-tauri/src/services/proxy.rs | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/src-tauri/src/database/dao/proxy.rs b/src-tauri/src/database/dao/proxy.rs index 0303481cf..1e6344b61 100644 --- a/src-tauri/src/database/dao/proxy.rs +++ b/src-tauri/src/database/dao/proxy.rs @@ -230,6 +230,17 @@ impl Database { Ok(()) } + /// 清空所有Provider健康状态(代理停止时调用) + pub async fn clear_all_provider_health(&self) -> Result<(), AppError> { + let conn = lock_conn!(self.conn); + + conn.execute("DELETE FROM provider_health", []) + .map_err(|e| AppError::Database(e.to_string()))?; + + log::debug!("Cleared all provider health records"); + Ok(()) + } + // ==================== Circuit Breaker Config ==================== /// 获取熔断器配置 diff --git a/src-tauri/src/services/proxy.rs b/src-tauri/src/services/proxy.rs index bb4fed5be..9c82481f3 100644 --- a/src-tauri/src/services/proxy.rs +++ b/src-tauri/src/services/proxy.rs @@ -306,6 +306,12 @@ impl ProxyService { .await .map_err(|e| format!("删除备份失败: {e}"))?; + // 5. 重置健康状态(让健康徽章恢复为正常) + self.db + .clear_all_provider_health() + .await + .map_err(|e| format!("重置健康状态失败: {e}"))?; + log::info!("代理已停止,Live 配置已恢复"); Ok(()) }