"""系统监控接口。""" from __future__ import annotations from fastapi import APIRouter, Request from fastapi.responses import HTMLResponse, JSONResponse, Response from ..schemas.system import SystemStatus from ..services.system_service import SystemService from ..views.system_status_html import render as render_status_html router = APIRouter(prefix="/api/system", tags=["system"]) def _wants_html(request: Request, fmt: str | None) -> bool: if fmt == "json": return False if fmt == "html": return True accept = request.headers.get("accept", "").lower() return "text/html" in accept and "application/json" not in accept @router.get( "/status", summary="主机资源状态(HTML 或 JSON)", description=( "返回 CPU、内存、磁盘的实时使用情况(数据来源 psutil)。\n\n" "**内容协商**:浏览器(`Accept: text/html`)返回 HTML 页面,API 客户端返回 JSON。" "可用 `?format=html` / `?format=json` 强制指定。" ), response_model=SystemStatus, responses={200: {"content": {"application/json": {}, "text/html": {"schema": {"type": "string"}}}}}, ) def get_status(request: Request, format: str | None = None) -> Response: status = SystemService().get_status() if _wants_html(request, format): return HTMLResponse(render_status_html(status)) return JSONResponse(status.model_dump(mode="json"))