package api import ( "net/http" ) // handleHealth — GET /api/health — возвращает статус всех зависимостей. func (a *API) handleHealth(w http.ResponseWriter, r *http.Request) { stats := a.engine.GetHealthStats() natsStatus := "disconnected" if a.natsConnected != nil && a.natsConnected() { natsStatus = "connected" } eslInfo := map[string]interface{}{"status": "disabled"} if a.eslClient != nil { eslStats := a.eslClient.GetStats() eslInfo = map[string]interface{}{ "status": eslStats.Status, "host": eslStats.Host, "uptime_seconds": eslStats.UptimeSec, "reconnects": eslStats.Reconnects, "gateway_ops": eslStats.GatewayOps, "events_recv": eslStats.EventsRecv, } } writeJSON(w, http.StatusOK, map[string]interface{}{ "status": "ok", "version": "1.0.0", "connections": map[string]interface{}{ "nats": natsStatus, "esl": eslInfo, }, "stats": stats, }) } // handleLiveness — GET /api/health/live — всегда 200, если процесс жив. func (a *API) handleLiveness(w http.ResponseWriter, r *http.Request) { writeJSON(w, http.StatusOK, map[string]string{"status": "alive"}) } // handleReadiness — GET /api/health/ready — 200 когда NATS подключён, метрики поступают. // ESL опционален — не требуется для готовности. func (a *API) handleReadiness(w http.ResponseWriter, r *http.Request) { if a.natsConnected != nil && !a.natsConnected() { writeJSON(w, http.StatusServiceUnavailable, map[string]string{ "status": "not_ready", "reason": "nats_disconnected", }) return } if !a.engine.HasRecentMetrics(60) { writeJSON(w, http.StatusServiceUnavailable, map[string]string{ "status": "not_ready", "reason": "no_recent_metrics", }) return } writeJSON(w, http.StatusOK, map[string]string{"status": "ready"}) }