import { useEffect, useState } from "react"; import { GATEWAY } from "./api"; export interface Health { gateway: boolean; persisted: boolean; // Postgres 是否在线(billing.persisted) } // useHealth 轮询 Gateway 健康(billing 端点同时回报持久化是否就绪)。 // NATS/Milvus/Neo4j 暂未由网关透出,UI 以"未知"呈现(规划:加 /health 聚合)。 export function useHealth(intervalMs = 4000): Health { const [h, setH] = useState({ gateway: false, persisted: false }); useEffect(() => { let alive = true; const ping = async () => { try { const res = await fetch(`${GATEWAY}/api/v1/billing`); const data = (await res.json()) as { persisted?: boolean }; if (alive) setH({ gateway: res.ok, persisted: Boolean(data.persisted) }); } catch { if (alive) setH({ gateway: false, persisted: false }); } }; ping(); const id = setInterval(ping, intervalMs); return () => { alive = false; clearInterval(id); }; }, [intervalMs]); return h; }