"""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}