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 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/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: 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


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.4.1.tar.gz (788.3 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.4.1-py3-none-any.whl (806.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: chap_checker-0.4.1.tar.gz
  • Upload date:
  • Size: 788.3 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.4.1.tar.gz
Algorithm Hash digest
SHA256 1fb5cfbb508f7fe7dc4a25f673e525084a1f5f66f5cce7c2a7d1e16b32011b98
MD5 a195610d5260ddc58b7da7d75473344b
BLAKE2b-256 1063a3255511d8a34bcbb7740b827c64092bfb10a3c51f10b7c3e5256a6a1239

See more details on using hashes here.

Provenance

The following attestation bundles were made for chap_checker-0.4.1.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.4.1-py3-none-any.whl.

File metadata

  • Download URL: chap_checker-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 806.5 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.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a167451a229a5dc0d4c963f12cc0a19b037f78bdf98fe9d20abb1657e8e5b5f9
MD5 0bd8597033b23ec37c1448a94e5184af
BLAKE2b-256 ce8791595e7ae691f9ea1fd969afca2c522b930b231fd16baa3d2792bceee7ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for chap_checker-0.4.1-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