run_store.py 1.2 KB

123456789101112131415161718192021222324252627
  1. """每次执行的持久化状态;checkpoint 负责续跑,运行表负责展示状态。"""
  2. from db import db_conn
  3. def start(run_id: str, session_id: str, user_name: str, kind: str) -> None:
  4. db_conn.execute(
  5. "INSERT INTO execution_runs (id, session_id, user_name, kind, status, started_at)"
  6. " VALUES (?, ?, ?, ?, 'running', ?)",
  7. (run_id, session_id, user_name, kind, db_conn.fmt_dt()),
  8. )
  9. def finish(run_id: str, status: str, error: str = "") -> None:
  10. db_conn.execute("UPDATE execution_runs SET status = ?, error = ?, finished_at = ? WHERE id = ?",
  11. (status, error, None if status == "waiting_input" else db_conn.fmt_dt(), run_id))
  12. def list_runs(session_id: str) -> list[dict]:
  13. return db_conn.query("SELECT * FROM execution_runs WHERE session_id = ? ORDER BY started_at DESC LIMIT 50",
  14. (session_id,))
  15. def recover_interrupted() -> None:
  16. db_conn.execute("UPDATE execution_runs SET status = 'interrupted', finished_at = ? WHERE status = 'running'",
  17. (db_conn.fmt_dt(),))
  18. db_conn.execute("UPDATE schedule_runs SET status = 'interrupted', finished_at = ? WHERE status = 'running'",
  19. (db_conn.fmt_dt(),))