Skip to content

Health and operations ​

Go Feather Route separates process health from provider readiness.

Endpoints ​

  • GET /health/live and GET /health/liveliness are unauthenticated liveness aliases. They return 200 when the HTTP process can answer.
  • GET /ready is unauthenticated and returns 200 when at least one configured model route has provider credentials. It returns 503 with a degraded status when no provider is ready.
  • GET /status is unauthenticated and returns gateway counters and configured model count.
  • GET /status/models lists configured model aliases. GET /status/models/{model} reports the route and whether its provider credentials are present.
  • GET /metrics is unauthenticated and returns a small Prometheus-compatible text response.

The metrics include total requests, errors, authentication failures, active requests, active streams, completed and aborted streams, retry count, request duration, upstream duration, first-byte latency, configured model count, and response bytes.

Health endpoints do not make paid provider calls. Readiness confirms local configuration only; provider availability should be monitored with a bounded synthetic request or provider-specific monitoring policy.

Optional runtime diagnostics ​

Runtime profiling is disabled by default. For local debugging, set GOFEATHERROUTE_PPROF_ADDR=127.0.0.1:6060 before starting the gateway. Only loopback addresses are accepted. This starts a separate diagnostics listener at /debug/pprof/; it does not add profiling routes to the gateway listener on port 4000.

The Go 1.27 goroutineleak profile is available at /debug/pprof/goroutineleak?debug=1, alongside the standard goroutine, heap, allocation, block, mutex, and thread profiles. Keep this listener on loopback and disabled in production. Profiles can contain stack traces and must be handled as operational data.

Container healthcheck ​

The image healthcheck calls:

bash
go-feather-route healthcheck

It probes http://127.0.0.1:4000/health/liveliness and is intentionally independent of provider credentials so container orchestration can distinguish an alive process from a provider-ready gateway.