Files
Nexus/server/api/execution_records.py
T
Nexus Agent 08a0157c95 feat: 调度表单重构、登录门控、批量任务与页面缓存对齐
调度页执行周期可视化/单次执行/分类选机/推送源对齐;登录 IP 门控与无缝导航;
服务器批量后台任务、执行记录、凭据合并、各页激活刷新与错误提示修复。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-08 11:17:21 +08:00

60 lines
2.2 KiB
Python

"""Unified execution records API (scripts + server batch jobs)."""
from typing import Optional
from fastapi import APIRouter, Depends, HTTPException, Query
from server.api.auth_jwt import get_current_admin
from server.api.dependencies import get_script_service
from server.application.services.execution_record_service import (
get_execution_record_detail,
list_execution_records,
)
from server.application.services.script_service import ScriptService
from server.domain.models import Admin
router = APIRouter(prefix="/api/execution-records", tags=["execution-records"])
@router.get("", response_model=dict)
async def list_records(
limit: int = Query(50, ge=1, le=200),
offset: int = Query(0, ge=0),
status: Optional[str] = Query(None, description="running/completed/failed/partial/cancelled"),
kind: Optional[str] = Query(None, description="script | server_batch"),
admin: Admin = Depends(get_current_admin),
script_service: ScriptService = Depends(get_script_service),
):
"""List script executions and server batch jobs merged, newest first."""
if kind and kind not in ("script", "server_batch"):
raise HTTPException(status_code=400, detail="kind 须为 script 或 server_batch")
return await list_execution_records(
script_service=script_service,
limit=limit,
offset=offset,
status=status,
kind=kind,
)
@router.get("/{record_id}", response_model=dict)
async def get_record_detail(
record_id: int,
kind: str = Query(..., description="script | server_batch"),
fetch_logs: bool = Query(False),
admin: Admin = Depends(get_current_admin),
script_service: ScriptService = Depends(get_script_service),
):
"""Execution detail for script run or server batch job."""
if kind not in ("script", "server_batch"):
raise HTTPException(status_code=400, detail="kind 须为 script 或 server_batch")
detail = await get_execution_record_detail(
script_service=script_service,
record_id=record_id,
kind=kind,
fetch_logs=fetch_logs,
)
if not detail:
raise HTTPException(status_code=404, detail="执行记录不存在")
return detail