From 879b7b582ced3e886a9bd5931b43017991506986 Mon Sep 17 00:00:00 2001 From: Ruochen <1051989940@qq.com> Date: Tue, 1 Jul 2025 16:02:56 +0800 Subject: [PATCH] =?UTF-8?q?perf:=E6=8F=90=E5=8F=96=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E7=9A=84=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= =?UTF-8?q?,=E4=BC=98=E5=8C=96=E5=BE=AA=E7=8E=AF=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/dashboard/routes/config.py | 45 +++++++++++++++--------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/astrbot/dashboard/routes/config.py b/astrbot/dashboard/routes/config.py index 866509605..791228de0 100644 --- a/astrbot/dashboard/routes/config.py +++ b/astrbot/dashboard/routes/config.py @@ -256,39 +256,38 @@ class ConfigRoute(Route): ) return status_info + def _error_response(self, message: str, status_code: int = 500, log_fn=logger.error): + log_fn(message) + # 记录更详细的traceback信息,但只在是严重错误时 + if status_code == 500: + log_fn(traceback.format_exc()) + return Response().error(message, status_code=status_code).__dict__ + async def check_one_provider_status(self): - """ - API 接口: 检查单个 LLM Provider 的状态 - """ + """API: check a single LLM Provider's status by id""" provider_id = request.args.get("id") if not provider_id: - return Response().error("Missing provider_id parameter", status_code=400).__dict__ - - logger.info(f"API call received: /config/provider/check_one for id: {provider_id}") + return self._error_response("Missing provider_id parameter", 400, logger.warning) + logger.info(f"API call: /config/provider/check_one id={provider_id}") try: - all_providers: typing.List = ( - self.core_lifecycle.star_context.get_all_providers() + all_providers = self.core_lifecycle.star_context.get_all_providers() + # replace manual loop with next(filter(...)) + target = next( + (p for p in all_providers if p.provider_config.get("id") == provider_id), + None ) - - target_provider = None - for p in all_providers: - # provider.provider_config 是 AstrBotConfig 对象,可以直接当字典用 - if p.provider_config.get("id") == provider_id: - target_provider = p - break - - if not target_provider: - logger.warning(f"Provider with id '{provider_id}' not found for status check.") - return Response().error(f"Provider with id '{provider_id}' not found", status_code=404).__dict__ + if not target: + return self._error_response(f"Provider with id '{provider_id}' not found", 404, logger.warning) - result = await self._test_single_provider(target_provider) + result = await self._test_single_provider(target) return Response().ok(result).__dict__ except Exception as e: - logger.error(f"Critical error in check_one_provider_status for id {provider_id}: {str(e)}") - logger.error(traceback.format_exc()) - return Response().error(f"检查 Provider 状态时发生严重错误: {str(e)}", status_code=500).__dict__ + return self._error_response( + f"Critical error checking provider {provider_id}: {e}", + 500 + ) async def get_configs(self): # plugin_name 为空时返回 AstrBot 配置