//! 流式健康检查日志 DAO use crate::database::{lock_conn, Database}; use crate::error::AppError; use crate::services::stream_check::{StreamCheckConfig, StreamCheckResult}; impl Database { /// 保存流式检查日志 pub fn save_stream_check_log( &self, provider_id: &str, provider_name: &str, app_type: &str, result: &StreamCheckResult, ) -> Result { let conn = lock_conn!(self.conn); conn.execute( "INSERT INTO stream_check_logs (provider_id, provider_name, app_type, status, success, message, response_time_ms, http_status, model_used, retry_count, tested_at) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11)", rusqlite::params![ provider_id, provider_name, app_type, format!("{:?}", result.status).to_lowercase(), result.success, result.message, result.response_time_ms.map(|t| t as i64), result.http_status.map(|s| s as i64), result.model_used, result.retry_count as i64, result.tested_at, ], ) .map_err(|e| AppError::Database(e.to_string()))?; Ok(conn.last_insert_rowid()) } /// 获取流式检查配置 pub fn get_stream_check_config(&self) -> Result { match self.get_setting("stream_check_config")? { Some(json) => serde_json::from_str(&json) .map_err(|e| AppError::Message(format!("解析配置失败: {e}"))), None => Ok(StreamCheckConfig::default()), } } /// 保存流式检查配置 pub fn save_stream_check_config(&self, config: &StreamCheckConfig) -> Result<(), AppError> { let json = serde_json::to_string(config) .map_err(|e| AppError::Message(format!("序列化配置失败: {e}")))?; self.set_setting("stream_check_config", &json) } }