import { Router } from "express";
import type { ServerManager } from "../client/manager.js";
export function createHealthRouter(manager: ServerManager): Router {
const router = Router();
router.get("/health", (_req, res) => {
const statuses = manager.getAllStatuses();
// Servers that have been connected at least once (not idle)
const nonIdleStatuses = statuses.filter((s) => !s.idle);
let status: string;
if (nonIdleStatuses.length === 0) {
// All servers are idle (never connected) — hub is ready
status = "healthy";
} else {
const allConnected = nonIdleStatuses.every((s) => s.connected);
const anyConnected = nonIdleStatuses.some((s) => s.connected);
status = allConnected ? "healthy" : anyConnected ? "degraded" : "unhealthy";
}
res.status(status === "unhealthy" ? 503 : 200).json({
status,
servers: statuses.map((s) => ({
id: s.id,
connected: s.connected,
idle: s.idle,
error: s.error,
lastConnected: s.lastConnected,
tools: s.capabilities?.tools.length ?? 0,
resources: s.capabilities?.resources.length ?? 0,
prompts: s.capabilities?.prompts.length ?? 0,
})),
});
});
return router;
}