import html from fastapi import APIRouter, Depends, Request from fastapi.responses import HTMLResponse, RedirectResponse from app.auth import require_user from app.db.audit import log_audit_event from app.db.jobs import create_job from app.db.migration_readiness import PREFLIGHT_SCRIPT, get_latest_preflight_job, summarize_readiness from app.routes.jobs import render_job_status from app.templates.layout import page router = APIRouter() def render_readiness_pill(ready: bool) -> str: if ready: return 'READY' return 'NOT READY' @router.get("/migration-readiness", response_class=HTMLResponse) def migration_readiness_page(request: Request, user=Depends(require_user)): latest_job = get_latest_preflight_job() summary = summarize_readiness(latest_job) job = summary["job"] log_audit_event( user, action="migration_readiness.viewed", target_type="migration_readiness", target_id=PREFLIGHT_SCRIPT, metadata={"job_id": job.get("id") if job else None}, ) job_rows = 'Zatím není uložený žádný výsledek preflight kontroly.' if job: job_id = html.escape(str(job.get("id", ""))) job_rows = f""" Úloha#{job_id} Stav úlohy{render_job_status(job.get("status"))} Vytvořeno{html.escape(job.get("created_at", "") or "")} Spuštěno{html.escape(job.get("started_at", "") or "")} Dokončeno{html.escape(job.get("finished_at", "") or "")} Worker{html.escape(job.get("worker_id", "") or "")} """ raw_output = html.escape(summary.get("raw_output") or "") if not raw_output: raw_output = "Zatím není uložený žádný log výstup." return page( "Migration Readiness", f"""

Migration Readiness

Poslední výsledek maintenance skriptu {html.escape(PREFLIGHT_SCRIPT)} uložený v databázi.

Stav{render_readiness_pill(summary["ready"])}
OK{html.escape(str(summary["ok_count"]))}
WARN{html.escape(str(summary["warn_count"]))}
FAIL{html.escape(str(summary["fail_count"]))}

Poslední úloha

{job_rows}

Raw log výstup

{raw_output}
""", user=user, ) @router.post("/migration-readiness/run") def run_migration_readiness(user=Depends(require_user)): job_id = create_job( job_type="run_script", target_type="maintenance_script", target_id=PREFLIGHT_SCRIPT, payload={"script_name": PREFLIGHT_SCRIPT}, user=user, source="portal_manual", ) return RedirectResponse(url=f"/portal/jobs/{job_id}", status_code=303)