feat(2.0): W8 — Wartung (OS/Engine/Modell-Updates, Restart, Reboot, Logs)
services/maintenance.py + routers/maintenance.py: updates-Badge (apt/Engine- Release/dyn. Modell-Upgrades via discover), os-update + engine-update als jobengine-Jobs, system-/user-aware Restart (llama-swap via sudo -n NOPASSWD), reboot, logs (journalctl). Frontend: Wartungs-Block in SystemView mit Badge, Buttons + Modell-Upgrade-Vorschlaegen. Passwortfrei (sudo -n). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
"""Wartungs-Endpoints: Update-Badge, OS-/Engine-Update, Reboot, Restart, Logs."""
|
||||
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
|
||||
from services import maintenance
|
||||
|
||||
router = APIRouter(prefix="/api")
|
||||
|
||||
|
||||
@router.get("/maintenance/updates")
|
||||
def updates() -> dict:
|
||||
return maintenance.updates()
|
||||
|
||||
|
||||
@router.post("/maintenance/os-update")
|
||||
def os_update() -> dict:
|
||||
return {"job_id": maintenance.os_update_job()}
|
||||
|
||||
|
||||
@router.post("/maintenance/engine-update")
|
||||
def engine_update() -> dict:
|
||||
job = maintenance.engine_update_job()
|
||||
if not job:
|
||||
raise HTTPException(400, "Kein Engine-Update-Befehl gesetzt (MC_ENGINE_UPDATE_CMD).")
|
||||
return {"job_id": job}
|
||||
|
||||
|
||||
@router.post("/maintenance/reboot")
|
||||
def reboot() -> dict:
|
||||
return maintenance.reboot()
|
||||
|
||||
|
||||
class RestartReq(BaseModel):
|
||||
service: str
|
||||
|
||||
|
||||
@router.post("/maintenance/restart")
|
||||
def restart(body: RestartReq) -> dict:
|
||||
return maintenance.restart_service(body.service)
|
||||
|
||||
|
||||
@router.get("/maintenance/logs")
|
||||
def logs(service: str, lines: int = 200) -> dict:
|
||||
return maintenance.logs(service, lines)
|
||||
Reference in New Issue
Block a user