diff --git a/README.md b/README.md index d6a9e17..4086d59 100644 --- a/README.md +++ b/README.md @@ -62,8 +62,20 @@ python import_tickets.py --inc-csv 2026-06-15T17-00-00.csv --apply ``` Dry-run is the default (omit `--apply`). `import_tickets.py --from-bucket` shells out to -the `aws` CLI using the `RUSTFS_*` env (no boto3 dependency). Hourly on the instance via -cron `5 * * * *` (a few minutes after each export). +the `aws` CLI using the `RUSTFS_*` env (no boto3 dependency). + +## Schedule (cron) + +On the instance, ingest at **:15 past every hour, 07:00–19:00 EAT** via +[`run_ingest.sh`](run_ingest.sh) (loads `.env`, runs `--from-bucket --apply`): + +```cron +CRON_TZ=Africa/Nairobi +15 7-19 * * * /opt/fleettickets/run_ingest.sh >> /var/log/fleettickets-inc.log 2>&1 +``` + +`CRON_TZ` matters — the export filenames and this schedule are in `Africa/Nairobi`. +Skip-if-unchanged means a run on an already-ingested snapshot is a cheap no-op. ## Notes diff --git a/run_ingest.sh b/run_ingest.sh new file mode 100755 index 0000000..7ba1683 --- /dev/null +++ b/run_ingest.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +# run_ingest.sh — fleettickets · hourly INC ingest wrapper for cron. +# +# Loads env from the local .env (DATABASE_URL + RUSTFS_* + GEOCODER_*) and runs the +# newest-INC-CSV ingest with --apply (skip-if-unchanged + archive are built in). +# +# Install on the instance (ingest at :15, 07:00–19:00 EAT): +# 15 7-19 * * * /opt/fleettickets/run_ingest.sh >> /var/log/fleettickets-inc.log 2>&1 +# Ensure the crontab runs in the Africa/Nairobi timezone (CRON_TZ=Africa/Nairobi or +# the host/container TZ), since the export filenames and the schedule are EAT. +set -euo pipefail + +cd "$(dirname "$0")" + +# Load .env if present (KEY=VALUE lines); never commit the real .env. +if [ -f .env ]; then + set -a + # shellcheck disable=SC1091 + . ./.env + set +a +fi + +# Prefer the project venv if it exists, else the python on PATH (e.g. in-container). +PY="python" +[ -x ".venv/bin/python" ] && PY=".venv/bin/python" + +exec "$PY" import_tickets.py --from-bucket --apply