Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/nicolas344/Sentinel-SoftServe/llms.txt

Use this file to discover all available pages before exploring further.

Sentinel exposes two health endpoints: a lightweight liveness probe at GET /health (root level) and a full integration health check at GET /api/health. The integration check pings all six external service dependencies with a 3-second timeout and returns an aggregate status that reflects the overall health of the system. Both endpoints require no authentication, making them suitable for use with uptime monitors, container health checks, and load balancer probes.

GET /health

Simple liveness probe. Returns immediately with a static healthy response. Use this endpoint for container HEALTHCHECK directives and load balancer health probes. Auth required: No
curl https://sentinel-softserve.onrender.com/health
{"status": "healthy"}
Always returns200 OK
Response body{"status": "healthy"}

GET /api/health

Full integration health check. Pings all six service dependencies sequentially, measures latency, and returns an aggregate status. Use this endpoint for dashboards, alerting, and diagnosing connectivity issues. Auth required: No

Services Checked

Service keyEnvironment variableDefault URL
prometheusPROMETHEUS_URLhttp://localhost:9090
lokiLOKI_URLhttp://localhost:3100
chromadbCHROMA_HOSThttp://localhost:8001
alertmanagerALERTMANAGER_URLhttp://localhost:9093
langfuseLANGFUSE_HOSThttp://localhost:3001
supabaseSUPABASE_URL (via client)Tested with SELECT id FROM incidents LIMIT 1
HTTP services are considered reachable if any response is received — even 401 Unauthorized or 404 Not Found. Only connection errors and timeouts are treated as failures. The Supabase check uses the Supabase PostgREST client directly rather than an HTTP ping.

Aggregate Status Logic

The top-level status field in the response is derived from the number of failed service checks:
Error countAggregate status
0healthy
1–2degraded
3 or morecritical

Response Schema

status
string
Aggregate health status: healthy, degraded, or critical.
services
object
Map of service names to their individual health results.
services.[name].status
string
ok if reachable, error if the connection failed or timed out.
services.[name].url
string
The URL that was pinged. Omitted for supabase.
services.[name].latency_ms
integer
Round-trip latency in milliseconds. Present only when status is ok. Omitted for supabase.
services.[name].error
string
Error description. Present only when status is error. One of "Connection refused", "Timeout (3s)", or a generic exception message.

Example Responses

{
  "status": "healthy",
  "services": {
    "prometheus": {
      "status": "ok",
      "url": "http://localhost:9090",
      "latency_ms": 12
    },
    "loki": {
      "status": "ok",
      "url": "http://localhost:3100",
      "latency_ms": 8
    },
    "chromadb": {
      "status": "ok",
      "url": "http://localhost:8001",
      "latency_ms": 15
    },
    "alertmanager": {
      "status": "ok",
      "url": "http://localhost:9093",
      "latency_ms": 6
    },
    "langfuse": {
      "status": "ok",
      "url": "http://localhost:3001",
      "latency_ms": 23
    },
    "supabase": {
      "status": "ok"
    }
  }
}

Usage Examples

curl https://sentinel-softserve.onrender.com/api/health | jq .status
For production uptime monitoring, poll GET /health (liveness) every 30 seconds and GET /api/health (integration) every 60 seconds. Alert on critical status; notify (but do not page) on degraded.

Configuring Service URLs

Override the default service URLs via environment variables on the backend container:
PROMETHEUS_URL=http://prometheus:9090
LOKI_URL=http://loki:3100
CHROMA_HOST=http://chromadb:8001
ALERTMANAGER_URL=http://alertmanager:9093
LANGFUSE_HOST=http://langfuse:3001
In Docker Compose deployments, use the service names as hostnames (e.g. http://prometheus:9090) rather than localhost.

Build docs developers (and LLMs) love