feat: polish generate run logs
This commit is contained in:
+107
-1
@@ -2375,9 +2375,10 @@ class GuiTests(TempDirMixin, unittest.TestCase):
|
||||
self.assertEqual(summary["run_id"], run_log.id)
|
||||
joined_logs = "\n".join(logs)
|
||||
self.assertIn("[开始] 本轮生成 1 条", joined_logs)
|
||||
self.assertRegex(joined_logs, r"开始时间 \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}")
|
||||
self.assertIn("[图片] 1/1 商品 51100639510", joined_logs)
|
||||
self.assertIn("准备重试 1/2", joined_logs)
|
||||
self.assertIn("cmhub 已返回 image_url,耗时 91.2秒", joined_logs)
|
||||
self.assertIn("cmhub 已返回图片,耗时 91.2秒", 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)
|
||||
@@ -2385,6 +2386,7 @@ class GuiTests(TempDirMixin, unittest.TestCase):
|
||||
self.assertIn("token=***", joined_logs)
|
||||
self.assertNotIn("SECRET-TOKEN", joined_logs)
|
||||
self.assertIn("[完成] AI 生成完成:标题1/1,图片1/1,失败0", joined_logs)
|
||||
self.assertRegex(joined_logs, r"完成时间 \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},总用时 \d+秒")
|
||||
events = db.list_run_log_events(summary["run_id"], path=cfg["db_path"])
|
||||
event_messages = "\n".join(event.message for event in events)
|
||||
self.assertIn("[图片] 1/1 商品 51100639510", event_messages)
|
||||
@@ -2395,6 +2397,110 @@ class GuiTests(TempDirMixin, unittest.TestCase):
|
||||
|
||||
self.assert_removed(temp_dir)
|
||||
|
||||
def test_generate_worker_user_log_hides_cmhub_request_urls(self):
|
||||
with self.make_temp_dir() as temp_dir:
|
||||
cfg = self.make_config(temp_dir)
|
||||
cfg["ai"] = appconfig.ai_config(cfg)
|
||||
cfg["ai"]["backend"] = "cmhub"
|
||||
accounts.create_account("主店", "alias-a", debug_port=9222, config=cfg)
|
||||
batch_id = db.create_batch(["input.xlsx"], path=cfg["db_path"])
|
||||
db.insert_tasks(
|
||||
batch_id,
|
||||
[
|
||||
{
|
||||
"source_file_abs": os.path.join(temp_dir, "input.xlsx"),
|
||||
"source_sheet": "商品",
|
||||
"source_row": 2,
|
||||
"account_name": "Excel主店",
|
||||
"alias": "alias-a",
|
||||
"item_id": "51100639510",
|
||||
}
|
||||
],
|
||||
path=cfg["db_path"],
|
||||
)
|
||||
task = db.list_tasks(batch_id=batch_id, path=cfg["db_path"])[0]
|
||||
db.set_collected(task.id, "旧标题", "old.jpg", path=cfg["db_path"])
|
||||
tasks = db.list_tasks(batch_id=batch_id, path=cfg["db_path"])
|
||||
logs = []
|
||||
|
||||
def fake_generate_batch(tasks_arg, prompt_values, ai_cfg=None, on_progress=None, should_stop=None):
|
||||
ai_cfg["on_event"](
|
||||
{
|
||||
"task": tasks_arg[0],
|
||||
"phase": "title",
|
||||
"step": "title_request",
|
||||
"result": "retry",
|
||||
"attempt": 1,
|
||||
"attempts": 3,
|
||||
"detail": (
|
||||
"cmhub upstream_error: POST "
|
||||
"https://cmhub.example.com/api/v1/generate/title "
|
||||
"failed image_url=http://43.128.3.240:8080/generated/images/a.png?token=SECRET-TOKEN"
|
||||
),
|
||||
"level": "warning",
|
||||
}
|
||||
)
|
||||
ai_cfg["on_event"](
|
||||
{
|
||||
"task": tasks_arg[0],
|
||||
"phase": "title",
|
||||
"step": "title_request",
|
||||
"result": "failed",
|
||||
"detail": (
|
||||
"cmhub not_found: cmhub 接口不存在,请检查 Base URL "
|
||||
"或该实例是否已部署 /api/v1/models "
|
||||
"https://cmhub.example.com/api/v1/models"
|
||||
),
|
||||
"level": "error",
|
||||
}
|
||||
)
|
||||
return {
|
||||
"ok": False,
|
||||
"total": 1,
|
||||
"title_total": 1,
|
||||
"title_done": 0,
|
||||
"cover_done": 0,
|
||||
"cover_total": 0,
|
||||
"generated_done": 0,
|
||||
"failed": 1,
|
||||
"generate_cover": False,
|
||||
"error": (
|
||||
"cmhub not_found: GET "
|
||||
"https://cmhub.example.com/api/v1/models?token=SECRET-TOKEN"
|
||||
),
|
||||
}
|
||||
|
||||
worker = GenerateWorker(
|
||||
tasks,
|
||||
{"title": "标题提示", "cover": "封面提示"},
|
||||
db_path=cfg["db_path"],
|
||||
config=cfg,
|
||||
)
|
||||
worker.log.connect(logs.append)
|
||||
|
||||
with mock.patch("app.gui.ai.generate_batch", side_effect=fake_generate_batch):
|
||||
summary = worker.execute()
|
||||
|
||||
self.assertFalse(summary["ok"])
|
||||
joined_logs = "\n".join(logs)
|
||||
self.assertIn("cmhub 上游生成失败,请稍后重试", joined_logs)
|
||||
self.assertIn("cmhub 网关接口不可用,请检查⑤设置中的 Base URL", joined_logs)
|
||||
self.assertRegex(joined_logs, r"失败时间 \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},总用时 \d+秒")
|
||||
events = db.list_run_log_events(summary["run_id"], path=cfg["db_path"])
|
||||
event_messages = "\n".join(event.message for event in events)
|
||||
combined = joined_logs + "\n" + event_messages
|
||||
for forbidden in [
|
||||
"https://",
|
||||
"http://",
|
||||
"/api/v1/",
|
||||
"/generated/images/",
|
||||
"image_url",
|
||||
"SECRET-TOKEN",
|
||||
]:
|
||||
self.assertNotIn(forbidden, combined)
|
||||
|
||||
self.assert_removed(temp_dir)
|
||||
|
||||
def test_generate_worker_records_cmhub_billing_metadata(self):
|
||||
with self.make_temp_dir() as temp_dir:
|
||||
cfg = self.make_config(temp_dir)
|
||||
|
||||
Reference in New Issue
Block a user