This repository has been archived on 2026-07-22. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
mission-control/routers/jobs.py
T
Hitonabi 2cde6ba5a5 feat: Live-Download-Fortschritt + Jobs abbrechen
Job-Engine:
- Ausgabe wird binaer + byteweise gelesen und CRLF-bewusst verarbeitet:
  einzelnes \r (tqdm/hf-Fortschritt) ueberschreibt die letzte Logzeile statt
  sie zu fluten; \r\n bzw. \n = echte neue Zeile. So kommt der Download-
  Fortschritt live an. (Text-Modus wuerde \r zu \n uebersetzen -> daher binaer.)
- cancel_job(): laufenden Prozess terminieren, Status "canceled", _PROCS-Registry
- POST /api/jobs/{id}/cancel

Frontend:
- Aktivitaet: Fortschrittsbalken + %-Anzeige aus der letzten Logzeile,
  "Abbrechen"-Button je laufendem Job, Status "abgebrochen"
- Server/Aktueller Vorgang: Fortschrittsbalken + Abbrechen (mit Rueckfrage),
  "abgebrochen"-Behandlung

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 18:21:21 +02:00

32 lines
824 B
Python

"""
Jobs-Router: Status einzelner Hintergrund-Jobs + Liste der letzten Jobs.
Liefert die Daten fuer das Aktivitaets-Panel mit Live-Log.
"""
from fastapi import APIRouter, Depends, HTTPException
from auth import auth
from jobengine import JOBS, cancel_job
router = APIRouter(prefix="/api", dependencies=[Depends(auth)])
@router.get("/jobs/{job_id}")
def job_status(job_id: str):
job = JOBS.get(job_id)
if not job:
raise HTTPException(404, "Job nicht gefunden.")
return job
@router.post("/jobs/{job_id}/cancel")
def job_cancel(job_id: str):
if not cancel_job(job_id):
raise HTTPException(409, "Job laeuft nicht (mehr) oder ist unbekannt.")
return {"ok": True}
@router.get("/jobs")
def jobs_list():
return sorted(JOBS.values(), key=lambda j: j["started_at"], reverse=True)[:20]