Health-check CLI for DHIS2 instances integrated with chap-core; cron-friendly with Slack alerts on status transitions.
Project description
chap-checker
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 alerts on status transitions and a Textual TUI dashboard for the
at-a-glance "leave it on a TV" view.
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
Ad-hoc against a single instance (credentials resolved safely):
# 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
# 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
# Omit --password / --token entirely and you'll be prompted on the
# terminal (hidden input). DHIS2_TOKEN / DHIS2_PASSWORD env vars
# work as defaults too. Passing --password / --token inline still
# works but is discouraged - the value lands in shell history and
# `ps` output. Token and password flags are mutually exclusive.
Multiple instances in ./chap-checker.toml:
[instances.prod]
url = "https://dhis2.example.com"
username = "ops"
password_env = "PROD_PASS"
alerts = ["slack"]
[alerts.slack]
webhook_url_env = "SLACK_WEBHOOK_URL"
Then chap-checker verify runs every configured instance and pages Slack on
status transitions. See chap-checker.toml.example
for the full template.
The TUI:
chap-checker tui
Or run the server (browser dashboard + JSON state API for remote tui --connect clients):
chap-checker serve
Run chap-checker serve somewhere persistent (a TV machine, a small VM,
systemd-supervised) and point laptops at it with
chap-checker tui --connect http://host:8765 so every viewer sees the
same numbers. Pass --no-ui for a headless API-only daemon.
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/medhis2_system_info—/api/system/infodhis2_chap_route—/api/routes?filter=code:eq:chapdhis2_chap_ping—/api/routes/chap/run/healthdhis2_chap_system_info—/api/routes/chap/run/system/infodhis2_chap_modeling_app—/api/apps(matched byapp_hub_id)dhis2_chap_climate_app—/api/apps(matched byapp_hub_id)
Full reference + endpoint details: Built-in checks.
Development
make install
make lint # ruff + mypy + pyright
make test
make docs # serve docs locally
See Development for repo layout and house rules.
License
AGPL-3.0-or-later
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file chap_checker-0.5.1.tar.gz.
File metadata
- Download URL: chap_checker-0.5.1.tar.gz
- Upload date:
- Size: 790.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9d6b921a76deaa4d383445e45dae825fa19bbaabf29d64e4b1d1671fd4887c2
|
|
| MD5 |
e28dd3a0190c580a64838bf3672383e3
|
|
| BLAKE2b-256 |
f5861115de4243f60d1552491d371619932fc464bdfb1ff68c886003b3c57b49
|
Provenance
The following attestation bundles were made for chap_checker-0.5.1.tar.gz:
Publisher:
release.yml on dhis2-chap/chap-checker
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chap_checker-0.5.1.tar.gz -
Subject digest:
d9d6b921a76deaa4d383445e45dae825fa19bbaabf29d64e4b1d1671fd4887c2 - Sigstore transparency entry: 1553148227
- Sigstore integration time:
-
Permalink:
dhis2-chap/chap-checker@dc518200c90a33b6c4825fde9faf9fd8a379e264 -
Branch / Tag:
refs/tags/v0.5.1 - Owner: https://github.com/dhis2-chap
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@dc518200c90a33b6c4825fde9faf9fd8a379e264 -
Trigger Event:
push
-
Statement type:
File details
Details for the file chap_checker-0.5.1-py3-none-any.whl.
File metadata
- Download URL: chap_checker-0.5.1-py3-none-any.whl
- Upload date:
- Size: 810.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1907cbe2af63e6c19ef9c8e265702b061ed4e1062e434834707524ccdbac0009
|
|
| MD5 |
b091873277428792c47642a04643a06a
|
|
| BLAKE2b-256 |
9458ce870b86173b57ec428a977ef66013832d6465c0fdb3c386d84e01f61d54
|
Provenance
The following attestation bundles were made for chap_checker-0.5.1-py3-none-any.whl:
Publisher:
release.yml on dhis2-chap/chap-checker
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chap_checker-0.5.1-py3-none-any.whl -
Subject digest:
1907cbe2af63e6c19ef9c8e265702b061ed4e1062e434834707524ccdbac0009 - Sigstore transparency entry: 1553148244
- Sigstore integration time:
-
Permalink:
dhis2-chap/chap-checker@dc518200c90a33b6c4825fde9faf9fd8a379e264 -
Branch / Tag:
refs/tags/v0.5.1 - Owner: https://github.com/dhis2-chap
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@dc518200c90a33b6c4825fde9faf9fd8a379e264 -
Trigger Event:
push
-
Statement type: