feat: log cmhub download diagnostics in GenerateWorker
GUI 半边配合 ai.py 的 cmhub 下载诊断:格式化「图片下载较慢」warning、 `cover_image_url` 调试行(脱敏 token、debug_only 不写入 SQLite run_log); `_log_run_event` 增加 persist 开关。tests/test_gui.py 覆盖脱敏与不持久化。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
5a09c6662e
commit
979112966e
+21
-3
@@ -159,7 +159,12 @@ class GenerateWorker(BaseWorker):
|
|||||||
message = self._format_generation_event(payload)
|
message = self._format_generation_event(payload)
|
||||||
if not message:
|
if not message:
|
||||||
return
|
return
|
||||||
self._log_run_event(message, task=task, level=payload.get("level") or "info")
|
self._log_run_event(
|
||||||
|
message,
|
||||||
|
task=task,
|
||||||
|
level=payload.get("level") or "info",
|
||||||
|
persist=not bool(payload.get("debug_only")),
|
||||||
|
)
|
||||||
|
|
||||||
def _remember_cmhub_metadata(self, payload):
|
def _remember_cmhub_metadata(self, payload):
|
||||||
metadata = payload.get("metadata")
|
metadata = payload.get("metadata")
|
||||||
@@ -195,10 +200,15 @@ class GenerateWorker(BaseWorker):
|
|||||||
return f"[停止] {self._task_plain_label(task)} 标题生成已取消"
|
return f"[停止] {self._task_plain_label(task)} 标题生成已取消"
|
||||||
return None
|
return None
|
||||||
if phase == "cover":
|
if phase == "cover":
|
||||||
|
if result == "debug" and step == "cover_image_url":
|
||||||
|
debug_detail = self._debug_detail(payload.get("detail"))
|
||||||
|
return f"[调试] {self._task_progress_label(task)} {debug_detail}"
|
||||||
if result == "start" and step == "cover_submit":
|
if result == "start" and step == "cover_submit":
|
||||||
return f"[图片] {self._task_progress_label(task)} 开始生成"
|
return f"[图片] {self._task_progress_label(task)} 开始生成"
|
||||||
if result == "success" and step == "cover_request":
|
if result == "success" and step == "cover_request":
|
||||||
return f"[图片] {self._task_progress_label(task)} {detail or 'cmhub 已返回,耗时未知'}"
|
return f"[图片] {self._task_progress_label(task)} {detail or 'cmhub 已返回,耗时未知'}"
|
||||||
|
if result == "warning" and step == "cover_download":
|
||||||
|
return f"[图片] {self._task_progress_label(task)} {detail or '图片下载较慢'}"
|
||||||
if result == "success" and step == "cover_download":
|
if result == "success" and step == "cover_download":
|
||||||
return f"[图片] {self._task_progress_label(task)} {detail or '图片下载完成,耗时未知'}"
|
return f"[图片] {self._task_progress_label(task)} {detail or '图片下载完成,耗时未知'}"
|
||||||
if result == "success" and step == "cover_save":
|
if result == "success" and step == "cover_save":
|
||||||
@@ -267,6 +277,14 @@ class GenerateWorker(BaseWorker):
|
|||||||
return text[:177] + "..."
|
return text[:177] + "..."
|
||||||
return text
|
return text
|
||||||
|
|
||||||
|
def _debug_detail(self, detail):
|
||||||
|
if detail is None:
|
||||||
|
return ""
|
||||||
|
text = diagnostics.redact_log_text(str(detail)).replace("\r", " ").replace("\n", " ").strip()
|
||||||
|
if len(text) > 2000:
|
||||||
|
return text[:1997] + "..."
|
||||||
|
return text
|
||||||
|
|
||||||
def _format_generate_completion(self, summary):
|
def _format_generate_completion(self, summary):
|
||||||
progress = self._summary_text(summary)
|
progress = self._summary_text(summary)
|
||||||
billing_error = summary.get("billing_error") or {}
|
billing_error = summary.get("billing_error") or {}
|
||||||
@@ -382,10 +400,10 @@ class GenerateWorker(BaseWorker):
|
|||||||
except Exception:
|
except Exception:
|
||||||
return
|
return
|
||||||
|
|
||||||
def _log_run_event(self, message, task=None, level="info"):
|
def _log_run_event(self, message, task=None, level="info", persist=True):
|
||||||
safe_message = diagnostics.redact_log_text(message)
|
safe_message = diagnostics.redact_log_text(message)
|
||||||
self.log.emit(str(safe_message))
|
self.log.emit(str(safe_message))
|
||||||
if self._run_id is None:
|
if self._run_id is None or not persist:
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
db.add_run_log_event(
|
db.add_run_log_event(
|
||||||
|
|||||||
@@ -2008,6 +2008,27 @@ class GuiTests(TempDirMixin, unittest.TestCase):
|
|||||||
"detail": "下载完成,1.3MB,耗时 12.4秒",
|
"detail": "下载完成,1.3MB,耗时 12.4秒",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
ai_cfg["on_event"](
|
||||||
|
{
|
||||||
|
"task": tasks[0],
|
||||||
|
"phase": "cover",
|
||||||
|
"step": "cover_download",
|
||||||
|
"result": "warning",
|
||||||
|
"detail": "图片下载较慢,已用 24.0秒,大小 1.3MB",
|
||||||
|
"level": "warning",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
ai_cfg["on_event"](
|
||||||
|
{
|
||||||
|
"task": tasks[0],
|
||||||
|
"phase": "cover",
|
||||||
|
"step": "cover_image_url",
|
||||||
|
"result": "debug",
|
||||||
|
"detail": "cmhub 图片 URL:https://cdn.example.com/generated.png?token=SECRET-TOKEN",
|
||||||
|
"level": "warning",
|
||||||
|
"debug_only": True,
|
||||||
|
}
|
||||||
|
)
|
||||||
ai_cfg["on_event"](
|
ai_cfg["on_event"](
|
||||||
{
|
{
|
||||||
"task": tasks[0],
|
"task": tasks[0],
|
||||||
@@ -2046,6 +2067,8 @@ class GuiTests(TempDirMixin, unittest.TestCase):
|
|||||||
self.assertIn("准备重试 1/2", joined_logs)
|
self.assertIn("准备重试 1/2", joined_logs)
|
||||||
self.assertIn("cmhub 已返回 image_url,耗时 91.2秒", joined_logs)
|
self.assertIn("cmhub 已返回 image_url,耗时 91.2秒", joined_logs)
|
||||||
self.assertIn("下载完成,1.3MB,耗时 12.4秒", joined_logs)
|
self.assertIn("下载完成,1.3MB,耗时 12.4秒", joined_logs)
|
||||||
|
self.assertIn("图片下载较慢,已用 24.0秒,大小 1.3MB", joined_logs)
|
||||||
|
self.assertIn("cmhub 图片 URL:https://cdn.example.com/generated.png?token=***", joined_logs)
|
||||||
self.assertIn("本地保存完成,JPEG 已保存,耗时 1.1秒,文件 220.0KB", joined_logs)
|
self.assertIn("本地保存完成,JPEG 已保存,耗时 1.1秒,文件 220.0KB", joined_logs)
|
||||||
self.assertIn("token=***", joined_logs)
|
self.assertIn("token=***", joined_logs)
|
||||||
self.assertNotIn("SECRET-TOKEN", joined_logs)
|
self.assertNotIn("SECRET-TOKEN", joined_logs)
|
||||||
@@ -2055,6 +2078,8 @@ class GuiTests(TempDirMixin, unittest.TestCase):
|
|||||||
self.assertIn("[图片] 1/1 商品 51100639510", event_messages)
|
self.assertIn("[图片] 1/1 商品 51100639510", event_messages)
|
||||||
self.assertIn("准备重试 1/2", event_messages)
|
self.assertIn("准备重试 1/2", event_messages)
|
||||||
self.assertIn("下载完成,1.3MB,耗时 12.4秒", event_messages)
|
self.assertIn("下载完成,1.3MB,耗时 12.4秒", event_messages)
|
||||||
|
self.assertIn("图片下载较慢,已用 24.0秒,大小 1.3MB", event_messages)
|
||||||
|
self.assertNotIn("cmhub 图片 URL", event_messages)
|
||||||
|
|
||||||
self.assert_removed(temp_dir)
|
self.assert_removed(temp_dir)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user