daily-briefing/server/routers/servers.py

52 lines
1.4 KiB
Python
Raw Permalink Normal View History

"""Unraid servers status router — MQTT-only data source."""
from __future__ import annotations
import logging
from typing import Any, Dict, List
from fastapi import APIRouter
from server.config import get_settings
from server.services.mqtt_service import mqtt_service
from server.services.unraid_service import ServerConfig, fetch_all_servers_mqtt
logger = logging.getLogger(__name__)
router = APIRouter(prefix="/api", tags=["servers"])
@router.get("/servers")
async def get_servers() -> Dict[str, Any]:
"""Return status information for all configured Unraid servers.
All data comes from the MQTT message store no HTTP polling,
no API keys, no cache needed (MQTT data is always fresh).
"""
settings = get_settings()
server_configs: List[ServerConfig] = [
ServerConfig(
name=srv.name,
host=srv.host,
mqtt_prefix=getattr(srv, "mqtt_prefix", "") or srv.name,
)
for srv in settings.unraid_servers
]
if not server_configs:
return {"servers": []}
try:
servers_data = fetch_all_servers_mqtt(server_configs, mqtt_service.store)
except Exception as exc:
logger.exception("Failed to read Unraid server data from MQTT")
return {
"servers": [],
"error": True,
"message": str(exc),
}
return {"servers": servers_data}