Skip to content

Repository files navigation

Apollo — API Health Monitor

Watch your APIs. Catch outages early. Ship with confidence.

Quick start Features CI

Django Vite Redux Postgres Docker License


Why Apollo?

Most “health checks” stop at a green ping.
Apollo is a full monitoring cockpit: scheduled probes, transition alerts, incidents, a public status page, charts, and exports — in one Django + React monolith.

   probe ──► assert ──► threshold ──► incident
                │                        │
                └──► webhook / email / Discord / Slack
                └──► public /status page

Features

🔭 Probes that mean it

HTTP methods, custom headers, bearer/basic auth, request bodies, SSL expiry, latency caps, body / header / JSON-path assertions.

🚨 Alerts without noise

Transition-only notifications, failure thresholds, mute windows, quiet hours. Channels: webhook, email, Discord, Slack.

🩹 Incidents & ownership

Auto open/resolve, acknowledge in UI, multi-user ownership, optional registration, staff sees everything.

📣 Status the world can see

Public /status, branded title/subtitle/support link, tags, and live overall health.

📈 Ops dashboard

Uptime & latency charts, due checks, CSV export, paginated history, check retention.

🧱 Ship-ready stack

Poetry, pnpm, Docker Compose (db + web + worker), GitHub Actions CI, WhiteNoise + Gunicorn.


Quick start

Local (dev)

cp .env.example .env
poetry install && poetry run python manage.py migrate && poetry run python manage.py seed
pnpm --dir frontend install

# terminal 1
poetry run python manage.py runserver

# terminal 2
pnpm --dir frontend dev
Surface URL
App http://localhost:5173
Public status http://localhost:5173/status
Demo login apollo / apollo

Docker (one shot)

cp .env.example .env
docker compose up --build
Surface URL
App + API http://localhost:8000
Status http://localhost:8000/status

Worker runs due checks and prunes old results on an interval.


Architecture

flowchart LR
  U[Operator UI] --> API[Django / DRF]
  S[Public /status] --> API
  API --> DB[(SQLite / Postgres)]
  W[Check worker] --> API
  W --> DB
  API -->|alerts| C[Webhook · Email · Discord · Slack]
Loading

Monolith layout: React (Vite) talks to /api/*; production serves the built frontend via WhiteNoise.


API map

Method Path Auth
GET /api/health/ public
GET /api/status/public/ public
GET/PATCH /api/status/config/ token
POST /api/auth/login/ · /api/auth/register/ public*
GET /api/dashboard/ token
CRUD /api/endpoints/ token
GET /api/incidents/?status=open token
POST /api/incidents/{id}/acknowledge/ token
GET /api/exports/{checks|alerts|incidents}.csv token

* Register only if APOLLO_ALLOW_REGISTER=true.


Commands

poetry run pytest
poetry run python manage.py check_endpoints --due
poetry run python manage.py run_check_worker --once
poetry run python manage.py prune_checks --dry-run
pnpm --dir frontend build
docker compose up --build

Configuration

Copy .env.example → .env. Highlights:

Variable Purpose
DJANGO_SECRET_KEY Required when DJANGO_DEBUG=false
DATABASE_URL Postgres URL (empty → SQLite)
CHECK_INTERVAL_SECONDS Worker loop
CHECK_RETENTION_DAYS Auto-prune old checks
APOLLO_ALLOW_REGISTER Open self-serve signup
EMAIL_* / mailer settings Email alerts

Project pulse

 Apollo
 ├── monitoring/     models · probes · alerts · incidents · status
 ├── config/          Django settings & URLs
 ├── frontend/        React + Redux + Vite UI
 ├── docker/          entrypoint + worker
 └── .github/        CI

Built as a Django + React monolith · Designed to stay out of the way until something breaks

Apollo mark

About

Django + React API Health Monitor — uptime probes, incidents, alerts, and a public status page.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages