fix: 完成商务迁移复核与接口优化并清理历史资料
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
"""通过新商务原生任务 HTTP 重跑指定日期,要求已有分区备份并保持任务禁用。"""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
from sw_write_verify import Rehearsal
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--runtime", type=Path, required=True)
|
||||
parser.add_argument("--config", type=Path, default=Path("configs/config.yaml"))
|
||||
parser.add_argument("--old-url", default="http://127.0.0.1:18080")
|
||||
parser.add_argument("--new-url", default="http://127.0.0.1:19001")
|
||||
parser.add_argument("--output", type=Path, required=True)
|
||||
parser.add_argument("--date", default="2026-11-03")
|
||||
parser.add_argument("--backup", type=Path, required=True)
|
||||
parser.add_argument("--methods", nargs="+", choices=("swReportDayBackfillTask", "swReportServerDayBackfillTask", "alertTriggerTask"),
|
||||
default=["swReportDayBackfillTask", "swReportServerDayBackfillTask"])
|
||||
args = parser.parse_args()
|
||||
backup = json.loads(args.backup.read_text(encoding="utf-8"))
|
||||
if backup["date"] != args.date:
|
||||
raise ValueError("已有备份的日期与任务不符")
|
||||
run = Rehearsal(args)
|
||||
ids = []
|
||||
try:
|
||||
for method in args.methods:
|
||||
name = "迁移核对-" + method + "-" + str(int(time.time()))
|
||||
run.call("new", "admin", "POST", "/timedTask/createTimedTask", {"name": name, "spec": "@daily", "executorType": "method", "methodName": method,
|
||||
"params": {"startDate": args.date, "endDate": args.date, "_execution": {"timeoutSeconds": 1800}}, "enabled": False})
|
||||
task = run.query("SELECT id,enabled FROM sw9.sys_timed_tasks WHERE name=%s AND deleted_at IS NULL", (name,))[0]
|
||||
ids.append(task["id"])
|
||||
(args.runtime / "report-rehearsal-task-ids.json").write_text(json.dumps(ids), encoding="utf-8")
|
||||
run.check(method + " 创建且保持禁用", task["enabled"] == 0)
|
||||
started = time.monotonic()
|
||||
run.call("new", "admin", "POST", "/timedTask/triggerTimedTask", {"id": task["id"]})
|
||||
while time.monotonic() - started < 1830:
|
||||
value = run.call("new", "admin", "GET", f"/timedTask/getTimedTaskLogList?taskId={task['id']}&page=1&pageSize=1")["data"]
|
||||
logs = value.get("list", [])
|
||||
if logs and logs[0].get("status") not in ("running", "pending"):
|
||||
(args.runtime / (method + "-execution.json")).write_text(json.dumps(logs[0], ensure_ascii=False, indent=2), encoding="utf-8")
|
||||
run.check(method + " 真实执行完成", logs[0]["status"] == "success", status=logs[0]["status"], elapsed_seconds=round(time.monotonic() - started, 2))
|
||||
break
|
||||
time.sleep(2)
|
||||
else:
|
||||
run.check(method + " 等待执行完成", False, reason="timeout")
|
||||
except Exception as error:
|
||||
if all(check["passed"] for check in run.checks):
|
||||
run.check("报表重跑执行异常", False, error_type=type(error).__name__)
|
||||
raise
|
||||
finally:
|
||||
run.db.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user