Web-based uptime monitor with latency breakdown
Find a file
me e970b95086
Some checks failed
Python Tests / run-tests (push) Successful in 1m16s
Python Tests / build (push) Failing after 24s
CI: wipe full workdir before clone to handle leftover files from prior build
2026-04-30 22:22:13 +09:00
.claude initialize beads issue tracking 2026-04-30 13:15:33 +09:00
.forgejo/workflows CI: wipe full workdir before clone to handle leftover files from prior build 2026-04-30 22:22:13 +09:00
static Add SVG favicon to silence 404 log noise 2026-04-30 16:09:40 +09:00
templates Fix pre-publication blockers: auth, XSS, thread safety, gunicorn, scrub URLs 2026-04-30 16:35:10 +09:00
tests Fix pre-publication blockers: auth, XSS, thread safety, gunicorn, scrub URLs 2026-04-30 16:35:10 +09:00
.gitignore Add health monitor web app with CI/CD 2026-04-30 14:55:01 +09:00
app.py Fix pre-publication blockers: auth, XSS, thread safety, gunicorn, scrub URLs 2026-04-30 16:35:10 +09:00
checker.py Fix pre-publication blockers: auth, XSS, thread safety, gunicorn, scrub URLs 2026-04-30 16:35:10 +09:00
CLAUDE.md Fix pre-publication blockers: auth, XSS, thread safety, gunicorn, scrub URLs 2026-04-30 16:35:10 +09:00
compose.yaml Replace all Docker references with Podman 2026-04-30 12:39:31 +00:00
config.yaml Fix pre-publication blockers: auth, XSS, thread safety, gunicorn, scrub URLs 2026-04-30 16:35:10 +09:00
Dockerfile Fix gunicorn HOME and CI build pipeline 2026-04-30 17:07:21 +09:00
LICENSE Fix pre-publication blockers: auth, XSS, thread safety, gunicorn, scrub URLs 2026-04-30 16:35:10 +09:00
README.md Replace all Docker references with Podman 2026-04-30 12:39:31 +00:00
requirements-dev.txt Fix pre-publication blockers: auth, XSS, thread safety, gunicorn, scrub URLs 2026-04-30 16:35:10 +09:00
requirements.txt Fix pre-publication blockers: auth, XSS, thread safety, gunicorn, scrub URLs 2026-04-30 16:35:10 +09:00
storage.py Fix pre-publication blockers: auth, XSS, thread safety, gunicorn, scrub URLs 2026-04-30 16:35:10 +09:00
wsgi.py Fix pre-publication blockers: auth, XSS, thread safety, gunicorn, scrub URLs 2026-04-30 16:35:10 +09:00

Health Monitor

A lightweight HTTP health-check dashboard. Polls configured URLs on a fixed interval and shows uptime, latency breakdowns (connect / TTFB / transfer), P50/P95/P99 percentiles, and a 48-bucket timeline — all in a single self-contained Python + SQLite service.

Features

  • Phase-level latency breakdown (connect, TTFB, transfer)
  • P50 / P95 / P99 percentiles and latency sparkline
  • Time-window selector: 2 h · 24 h · 7 d · 30 d
  • Error type classification: timeout, DNS, TLS, connection refused, HTTP error
  • Host management UI (add / edit / disable hosts at runtime)
  • Optional HTTP Basic Auth
  • Single SQLite file — no external database

Quick start

pip install -r requirements.txt

# edit config.yaml to add your hosts
python app.py        # dev server on :5000

Container

podman build -t healthcheck .
podman run -d -p 5000:5000 \
  -v healthcheck-data:/data \
  -e AUTH_USER=admin -e AUTH_PASS=secret \
  healthcheck

Or with podman-compose:

podman-compose up -d

Configuration

config.yaml

interval_seconds: 60
hosts:
  - name: "My Site"
    url: "https://example.com"

Environment variables

Variable Default Description
CONFIG_PATH config.yaml Path to config file
DB_PATH healthcheck.db SQLite database path
PORT 5000 HTTP port (dev server only)
AUTH_USER (unset) Basic auth username (optional)
AUTH_PASS (unset) Basic auth password (optional)

Auth is disabled when either variable is unset.

Development

pip install -r requirements-dev.txt
pytest tests/

License

MIT