SysOps: deploy-all — 2026-06-09 10:41 UTC
This commit is contained in:
@@ -1,12 +1,24 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from app.connectors.config_backup import list_backups, prepare_backup_manifest
|
||||
from app.connectors.gitea_repo_sync import list_activity, run_gitea_repo_sync
|
||||
from app.connectors.ops_maintenance import list_notes, run_maintenance_scan
|
||||
from app.connectors.proxmox import get_status_summary, get_topology, poll_and_snapshot
|
||||
|
||||
router = APIRouter(prefix="/ops", tags=["ops"])
|
||||
|
||||
|
||||
class BackupRunBody(BaseModel):
|
||||
approval_request_id: int | None = None
|
||||
|
||||
|
||||
class GiteaSyncBody(BaseModel):
|
||||
reason: str = Field(default="manual", max_length=120)
|
||||
|
||||
|
||||
@router.get("/status")
|
||||
def ops_status() -> dict:
|
||||
try:
|
||||
@@ -29,3 +41,42 @@ def ops_refresh() -> dict:
|
||||
return poll_and_snapshot()
|
||||
except Exception as exc: # noqa: BLE001
|
||||
raise HTTPException(status_code=500, detail=f"ops refresh failed: {exc}") from exc
|
||||
|
||||
|
||||
@router.get("/backups")
|
||||
def ops_backups(limit: int = 10) -> dict:
|
||||
return {"items": list_backups(limit), "manifest": prepare_backup_manifest()}
|
||||
|
||||
|
||||
@router.post("/backup/run")
|
||||
def ops_backup_run(body: BackupRunBody) -> dict:
|
||||
try:
|
||||
return run_gitea_repo_sync(reason="approved_backup", approval_request_id=body.approval_request_id)
|
||||
except Exception as exc: # noqa: BLE001
|
||||
raise HTTPException(status_code=500, detail=str(exc)) from exc
|
||||
|
||||
|
||||
@router.post("/gitea/sync")
|
||||
def ops_gitea_sync(body: GiteaSyncBody) -> dict:
|
||||
try:
|
||||
return run_gitea_repo_sync(reason=body.reason)
|
||||
except Exception as exc: # noqa: BLE001
|
||||
raise HTTPException(status_code=500, detail=str(exc)) from exc
|
||||
|
||||
|
||||
@router.get("/sysops-activity")
|
||||
def ops_sysops_activity(limit: int = 30) -> dict:
|
||||
return {"items": list_activity(limit), "count": len(list_activity(limit))}
|
||||
|
||||
|
||||
@router.get("/maintenance")
|
||||
def ops_maintenance(limit: int = 15) -> dict:
|
||||
return {"items": list_notes(limit, unresolved_only=True)}
|
||||
|
||||
|
||||
@router.post("/maintenance/scan")
|
||||
def ops_maintenance_scan() -> dict:
|
||||
try:
|
||||
return run_maintenance_scan()
|
||||
except Exception as exc: # noqa: BLE001
|
||||
raise HTTPException(status_code=500, detail=str(exc)) from exc
|
||||
|
||||
Reference in New Issue
Block a user