"""Unraid servers status router.""" from __future__ import annotations import logging from typing import Any, Dict, List from fastapi import APIRouter from server.cache import cache from server.config import settings from server.services.unraid_service import ServerConfig, fetch_all_servers logger = logging.getLogger(__name__) router = APIRouter(prefix="/api", tags=["servers"]) CACHE_KEY = "servers" @router.get("/servers") async def get_servers() -> Dict[str, Any]: """Return status information for all configured Unraid servers. Response shape:: { "servers": [ ... server dicts ... ] } """ # --- cache hit? ----------------------------------------------------------- cached = await cache.get(CACHE_KEY) if cached is not None: return cached # --- cache miss ----------------------------------------------------------- server_configs: List[ServerConfig] = [ ServerConfig( name=srv.name, host=srv.host, api_key=srv.api_key, port=srv.port, ) for srv in settings.unraid_servers ] servers_data: List[Dict[str, Any]] = [] try: servers_data = await fetch_all_servers(server_configs) except Exception as exc: logger.exception("Failed to fetch Unraid server data") return { "servers": [], "error": True, "message": str(exc), } payload: Dict[str, Any] = { "servers": servers_data, } await cache.set(CACHE_KEY, payload, settings.unraid_cache_ttl) return payload