"""Проверка живости сервиса и доступности движка контейнеров. Автор: Сергей Антропов Сайт: https://devops.org.ru """ from __future__ import annotations import asyncio import logging import shutil from fastapi import APIRouter from core.cluster_lifecycle import container_engine_ping logger = logging.getLogger("kind_k8s.api.health") router = APIRouter(tags=["health"]) @router.get("/health", summary="Состояние сервиса и среды") async def health() -> dict[str, object]: """ Проверка: процесс отвечает, в PATH есть kind/kubectl, доступен Docker/Podman API (``info``). Без рабочего сокета создание kind-кластеров из UI невозможно. """ kind_ok = shutil.which("kind") is not None kubectl_ok = shutil.which("kubectl") is not None engine_ok, engine_msg, cli = await asyncio.to_thread(container_engine_ping) logger.debug( "health: kind=%s kubectl=%s engine=%s cli=%s", kind_ok, kubectl_ok, engine_ok, cli, ) overall = "ok" if (kind_ok and kubectl_ok and engine_ok) else "degraded" return { "status": overall, "kind_in_path": kind_ok, "kubectl_in_path": kubectl_ok, "container_cli": cli, "container_engine_ok": engine_ok, "container_engine_detail": engine_msg if not engine_ok else None, }