Skip to content

Scheduling Reports

docker compose run is a normal one-shot command — wire it into a host cron job or systemd timer to get a report on a recurring schedule (e.g. weekly, for a Monday-morning exec digest):

0 8 * * 1 cd /path/to/eng-metrics-suite && docker compose run --rm eng-reports report.py --period last-week --output /out/weekly-report.pdf

Adjust the cron expression, --period, and output filename to taste — nothing about scheduling is special-cased in eng-reports itself, it's just a script that takes --output and exits.

Emailing team reports to managers

If your --team-map CSV has role/receives_report columns (see Generating Reports), email_team_reports.py — a second script in the same eng-reports image — will generate a fresh report for each team a manager oversees and email it to them directly, on whatever schedule you wire it into:

0 8 * * 1 cd /path/to/eng-metrics-suite && docker compose run --rm eng-reports email_team_reports.py --team-map /var/lib/eng-metrics-suite/teams.csv

Each role=manager,receives_report=true row gets its own email, one per team they manage — a manager who oversees two teams gets two separate emails, never a combined one. Every run regenerates the report fresh (never re-sends a stale PDF from an earlier run).

Requires SMTP credentials (your own relay, never GitUltra's — a manager's email address only ever leaves your own infrastructure):

SMTP_HOST=smtp.yourcompany.com
SMTP_PORT=587
SMTP_USERNAME=...
SMTP_PASSWORD=...
SMTP_FROM_EMAIL=reports@yourcompany.com

Set these as environment variables on the eng-reports service (see .env.example) — same ${VAR:-}-style optional config as every other credential in this bundle. If a specific team's report fails to generate (e.g. no recent activity for that team), that failure doesn't block other teams' emails from going out; the script exits non-zero at the end if anything failed, so a cron failure notification still fires.