Skip to main content

Health-check CLI for DHIS2 instances integrated with chap-core; cron-friendly with Slack alerts on status transitions.

Project description

chap-checker

CI PyPI version Python 3.13+ License: AGPL v3 Documentation

A small command-line health-check and alerting tool for DHIS2 instances that integrate with chap-core via a DHIS2 route. Cron-friendly, with optional Slack / generic-webhook alerts on status transitions, a long-running daemon that exposes a browser dashboard (designed for a TV / kiosk) and a JSON state API, and a Textual TUI for the operator-at-a-desk view (locally or pointed at a remote daemon).

Documentation: https://dhis2-chap.github.io/chap-checker

Install

# One-shot run without installing (no PATH pollution):
uvx chap-checker --version
uvx chap-checker verify --url https://dhis2.example.com --token-env DHIS2_TOKEN

# Persistent install into uv's isolated tool environment:
uv tool install chap-checker
chap-checker --version

# Upgrade to the latest release later:
uv tool upgrade chap-checker

# Or, if you're embedding into another uv project:
uv add chap-checker

Quick start

The fastest path is chap-checker init, which drops a working chap-checker.toml (chmod 600) pointed at the public DHIS2 demo so you can verify the tool runs before adding your own instances:

chap-checker init
chap-checker verify           # OK on the play demo

Then edit chap-checker.toml. A typical config:

[instances.prod]
url = "https://dhis2.example.com"
username = "ops"
password_env = "PROD_PASS"
alerts = ["slack", "webhook"]

[alerts.slack]
webhook_url_env = "SLACK_WEBHOOK_URL"

[alerts.webhook]
url_env = "INCIDENT_BUS_URL"
headers = { "Authorization" = "Bearer ..." }

Discover the alert transports and copy-paste their TOML:

chap-checker alerts list                       # registry of available alerters with per-field comments
chap-checker alerts test --kind both           # fire a synthetic OK->FAIL + FAIL->OK pair

Ad-hoc verify against a single instance (no config needed):

# With a DHIS2 Personal Access Token (recommended on modern servers):
export PROD_TOKEN=...
chap-checker verify --url https://dhis2.example.com --token-env PROD_TOKEN

# Or with a password (Basic auth) read from a named env var:
export PROD_PASSWORD=...
chap-checker verify --url https://dhis2.example.com --username admin --password-env PROD_PASSWORD

--password / --token inline still works but is discouraged — the value lands in shell history and ps output. Omit both and you'll be prompted on a TTY. See chap-checker.toml.example for the full config template.

Surfaces

chap-checker tui          # Textual TUI: operator-at-a-desk view, in a terminal
chap-checker serve        # long-running daemon: browser dashboard at / + JSON state at /api/state
chap-checker tui --connect http://daemon-host:8765   # TUI as a thin client of a remote `serve`

Pair them: run chap-checker serve somewhere persistent (a small VM, the TV machine itself, systemd-supervised — see the server guide for the unit file). Pin a kiosk browser at the URL on the TV; operators at desks run chap-checker tui locally or chap-checker tui --connect http://daemon:8765 for the same numbers without spinning up their own check loop. Alerts fire from one place.

Built-in checks

Two namespaces — dhis2_* probes DHIS2 itself, dhis2_chap_* probes chap-core through the DHIS2 route. Each tile in the dashboard, each row in chap-checker checks list, each entry in the JSON output:

  • dhis2_ping/api/me
  • dhis2_system_info/api/system/info
  • dhis2_chap_route/api/routes?filter=code:eq:chap
  • dhis2_chap_ping/api/routes/chap/run/health
  • dhis2_chap_system_info/api/routes/chap/run/system/info
  • dhis2_chap_modeling_app/api/apps (matched by app_hub_id)
  • dhis2_chap_climate_app/api/apps (matched by app_hub_id)

Full reference + endpoint details: Checks.

Development

make install
make lint        # ruff + mypy + pyright
make test
make docs        # serve docs locally

See Development for repo layout and house rules.

Contributing

PRs welcome — start with CONTRIBUTING.md. The development guide on the docs site has the long version: https://dhis2-chap.github.io/chap-checker/guides/development/.

For security issues, see SECURITY.md — please don't open a public issue.

Contributors: github.com/dhis2-chap/chap-checker/graphs/contributors.

License

AGPL-3.0-or-later.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chap_checker-0.8.3.tar.gz (808.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

chap_checker-0.8.3-py3-none-any.whl (830.6 kB view details)

Uploaded Python 3

File details

Details for the file chap_checker-0.8.3.tar.gz.

File metadata

  • Download URL: chap_checker-0.8.3.tar.gz
  • Upload date:
  • Size: 808.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for chap_checker-0.8.3.tar.gz
Algorithm Hash digest
SHA256 2f8780325ed49210d3e5586ec191daa5b3e1cad7a26fc8781f5e830b9f1817f7
MD5 f5aa365f0602a1de4e271a8951046754
BLAKE2b-256 a078a8bb2a19e5a2f0fbb3f7d78a06ccfda0afccb8528e7bd294f93e05e6b8b1

See more details on using hashes here.

Provenance

The following attestation bundles were made for chap_checker-0.8.3.tar.gz:

Publisher: release.yml on dhis2-chap/chap-checker

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chap_checker-0.8.3-py3-none-any.whl.

File metadata

  • Download URL: chap_checker-0.8.3-py3-none-any.whl
  • Upload date:
  • Size: 830.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for chap_checker-0.8.3-py3-none-any.whl
Algorithm Hash digest
SHA256 64ec95e4445555ea0b0906e3dff96169fe577ebbfdf89b9de3b8ad90a150f2ca
MD5 3cf3d6d1b551a17f87b07bece5f9b2fe
BLAKE2b-256 044c468cc7cdadec05138f85f0f475eba870a950ebb689a8c54d15e9fe7d1484

See more details on using hashes here.

Provenance

The following attestation bundles were made for chap_checker-0.8.3-py3-none-any.whl:

Publisher: release.yml on dhis2-chap/chap-checker

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page