38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, HTTPException, Request
|
|
from starlette.responses import RedirectResponse
|
|
|
|
from app.db import crud
|
|
from app.db.engine import get_session
|
|
from app.tasks.execute import execute_job
|
|
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.post("/admin/joblogs/{log_id}/retry")
|
|
def retry_joblog(request: Request, log_id: int):
|
|
session = get_session()
|
|
try:
|
|
log = crud.get_job_log(session, log_id)
|
|
if not log:
|
|
raise HTTPException(status_code=404, detail="JobLog not found")
|
|
# 关键:用 snapshot_params 重新触发任务(其中 secret_cfg 仍为密文)
|
|
execute_job.delay(snapshot_params=log.snapshot_params)
|
|
finally:
|
|
session.close()
|
|
|
|
referer = request.headers.get("Referer") or "/admin"
|
|
return RedirectResponse(referer, status_code=303)
|
|
|
|
|
|
@router.post("/admin/jobs/{job_id}/run")
|
|
def run_job(request: Request, job_id: str):
|
|
# 触发一次立即执行
|
|
execute_job.delay(job_id=job_id)
|
|
referer = request.headers.get("Referer") or "/admin"
|
|
return RedirectResponse(referer, status_code=303)
|
|
|
|
|