refactor(api): move system endpoints into app_system router

This commit is contained in:
kodi
2026-02-28 13:00:20 +01:00
parent 1226b0654e
commit df2a577402
2 changed files with 50 additions and 39 deletions
+49 -2
View File
@@ -1,8 +1,11 @@
import os
import subprocess
from fastapi import APIRouter
from common import _podman_get_json as _common_podman_get_json
from fastapi import APIRouter, HTTPException
from common import (
_podman_get_json as _common_podman_get_json,
_systemctl as _common_systemctl,
)
def init_system_router(session, podman_api_base: str, workloads_dir: str) -> APIRouter:
@@ -65,4 +68,48 @@ def init_system_router(session, podman_api_base: str, workloads_dir: str) -> API
"api_raw_sample": api_containers[0] if isinstance(api_containers, list) and api_containers else api_containers,
}
def run(cmd):
try:
result = subprocess.run(cmd, capture_output=True, text=True, check=False)
output = (result.stdout or "") + (result.stderr or "")
return result.returncode, output.strip()
except Exception as e:
return 1, str(e)
def _systemctl(cmd):
return _common_systemctl(cmd, run)
def _run_systemctl_action(action: str, unit: str):
cmd = ["systemctl", "--user", action, unit]
return _systemctl(cmd)
@router.post("/daemon-reload")
def api_daemon_reload():
try:
code, out = _systemctl(["systemctl", "--user", "daemon-reload"])
return {
"cmd": "systemctl --user daemon-reload",
"exit": code,
"output": out,
}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@router.post("/api/<action>/<unit>")
def legacy_api_action(action: str, unit: str):
# legacy flask-like path; keep behavior (even if not used by index.html)
if action not in ("status", "start", "stop", "restart"):
return {"error": "Invalid action"}, 400
cmd = ["systemctl", "--user", action, unit]
code, out = _run_systemctl_action(action, unit)
return {"cmd": " ".join(cmd), "exit": code, "output": out}
@router.post("/{action}/{unit}")
def api_action(action: str, unit: str):
if action not in ("status", "start", "stop", "restart"):
raise HTTPException(status_code=400, detail="Invalid action")
cmd = ["systemctl", "--user", action, unit]
code, out = _run_systemctl_action(action, unit)
return {"cmd": " ".join(cmd), "exit": code, "output": out}
return router