Initial commit

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Ronaldo Dias 2026-06-05 11:49:57 -03:00
commit 98180a0f6b
5 changed files with 116 additions and 0 deletions

37
README.md Normal file
View file

@ -0,0 +1,37 @@
# Chamado Health
Simple health check script for Healthchecks.io, designed to run every minute using a systemd timer.
## Installation
1. Copy the systemd unit files to `/etc/systemd/system/`:
```bash
sudo cp systemd/chamado-health.service /etc/systemd/system/
sudo cp systemd/chamado-health.timer /etc/systemd/system/
```
2. Update the `HEALTHCHECK_URL` in the service unit or set it in `/etc/default/chamado-health`.
3. Reload systemd and enable the timer:
```bash
sudo systemctl daemon-reload
sudo systemctl enable --now chamado-health.timer
sudo systemctl status chamado-health.timer
```
## Configuration
- `HEALTHCHECK_URL` must be set to your Healthchecks.io ping endpoint.
- You can also pass the URL as a command-line argument to the script:
```bash
./healthcheck.py https://hc-ping.com/<your-uuid>
```
## Script behavior
- Sends an HTTP GET to the configured Healthchecks.io URL.
- Exits with code `0` when the request succeeds with `2xx`.
- Logs diagnostic errors to journal if the request fails.

41
healthcheck.py Executable file
View file

@ -0,0 +1,41 @@
#!/usr/bin/env python3
import os
import sys
import urllib.request
import urllib.error
from datetime import datetime, timezone
def main():
url = sys.argv[1] if len(sys.argv) > 1 else os.environ.get("HEALTHCHECK_URL")
if not url:
print("ERROR: HEALTHCHECK_URL not set", file=sys.stderr)
return 1
timeout = int(os.environ.get("HEALTHCHECK_TIMEOUT", 10))
req = urllib.request.Request(url, method="GET", headers={"User-Agent": "chamado-health/1.0"})
try:
with urllib.request.urlopen(req, timeout=timeout) as response:
status = response.getcode()
if 200 <= status < 300:
print(f"{datetime.now(timezone.utc).isoformat()} status={status} url={url}")
return 0
body = response.read(200).decode("utf-8", errors="replace")
print(f"ERROR: HTTP {status}\n{body}", file=sys.stderr)
return 2
except urllib.error.HTTPError as exc:
print(f"HTTPError {exc.code} {exc.reason} url={url}", file=sys.stderr)
return 3
except urllib.error.URLError as exc:
print(f"URLError {exc.reason} url={url}", file=sys.stderr)
return 4
except Exception as exc:
print(f"ERROR {exc} url={url}", file=sys.stderr)
return 5
if __name__ == "__main__":
sys.exit(main())

14
install_systemd.sh Executable file
View file

@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
mkdir -p "${HOME}/.config/systemd/user"
cp "${SCRIPT_DIR}/systemd/chamado-health.service" "${HOME}/.config/systemd/user/"
cp "${SCRIPT_DIR}/systemd/chamado-health.timer" "${HOME}/.config/systemd/user/"
echo "Copied systemd unit files to ~/.config/systemd/user/."
systemctl --user daemon-reload
systemctl --user enable --now chamado-health.timer
systemctl --user status --no-pager chamado-health.timer

View file

@ -0,0 +1,14 @@
[Unit]
Description=Chamado Health check script
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
EnvironmentFile=-%h/.config/chamado-health
ExecStart=/usr/bin/env python3 %h/src/chamado-health/healthcheck.py
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=default.target

View file

@ -0,0 +1,10 @@
[Unit]
Description=Run Chamado Health check every minute
[Timer]
OnBootSec=1min
OnUnitActiveSec=1min
Persistent=true
[Install]
WantedBy=timers.target