Jira Reports

reply-pilot-jira-reports/ is a standalone long-running module for Jira reporting snapshots and generated wallboard artifacts.

Purpose

The module asks reply-pilot-be to execute one project or explicit JQL query and keeps a local reporting copy of the returned Jira data:

  • current raw issue payloads in data/raw/current/issues.jsonl
  • current raw issue changelog payloads in data/raw/current/changelogs.jsonl
  • derived CSV statistics in data/csv/
  • generated static report pages in data/public/

Raw JSONL is the source for local reporting. CSV and HTML files are generated outputs.

Runtime

  • Docker image name: reply-pilot-jira-reports
  • Container name: reply-pilot-jira-reports
  • Generated report pages are served from data/public/ on http://127.0.0.1:9096/ by default.
  • Public report URL: https://reply-pilot-jira-reports.mathbox.90.cz/
  • Public supplier onboarding wallboard: https://reply-pilot-jira-reports.mathbox.90.cz/supplier-onboarding-wallboard.html
  • Public Zaveden supplier onboarding count wallboard: https://reply-pilot-jira-reports.mathbox.90.cz/supplier-onboarding-zaveden-done-count-wallboard.html
  • Public Zaveden supplier onboarding delta wallboard: https://reply-pilot-jira-reports.mathbox.90.cz/supplier-onboarding-zaveden-done-delta-wallboard.html
  • Public Rollout + Implementation supplier onboarding count wallboard: https://reply-pilot-jira-reports.mathbox.90.cz/supplier-onboarding-rollout-implementation-count-wallboard.html
  • Public Rollout + Implementation supplier onboarding delta wallboard: https://reply-pilot-jira-reports.mathbox.90.cz/supplier-onboarding-rollout-implementation-delta-wallboard.html
  • Public new supplier onboarding count wallboard: https://reply-pilot-jira-reports.mathbox.90.cz/supplier-onboarding-new-count-wallboard.html
  • Public Supplier Alignment supplier onboarding count wallboard: https://reply-pilot-jira-reports.mathbox.90.cz/supplier-onboarding-supplier-alignment-count-wallboard.html
  • Logs: stdout only; inspect locally with docker compose logs
  • Heartbeat: reply-pilot-jira-reports/data/state/jira-reports-heartbeat.json
  • Healthcheck: python -m reply_pilot_jira_reports healthcheck, which checks the scheduler heartbeat, the last successful publication age, and local HTTP GET /healthz

The service follows the standard module runtime contract:

  • /app/data, /app/conf
  • /app/conf read-only
  • HOST_UID and HOST_GID passed through Compose
  • restart: unless-stopped

Commands

Project-root commands:

./script/jira-reports.sh sync-jira
./script/jira-reports.sh generate
./script/jira-reports.sh publish
./script/jira-reports.sh healthcheck

sync-jira refreshes one canonical issue/changelog snapshot. Full syncs replace it and incremental syncs merge changed issues into it. generate rebuilds CSV, SVG, and staged HTML outputs from already downloaded Jira raw data. publish copies the staged HTML and SVG files to reply-pilot-jira-reports/data/public/, where the HTTP service serves them.

generate reads the completed current snapshot only, so it can run while a Jira sync is writing staging files. Legacy timestamped snapshots are ignored after the first successful current snapshot is written.

Local module commands:

cd reply-pilot-jira-reports
python -m reply_pilot_jira_reports sync-jira --full --limit 20
python -m reply_pilot_jira_reports generate
python -m reply_pilot_jira_reports publish

Long-running scheduler:

python -m reply_pilot_jira_reports scheduler

Static report server only:

python -m reply_pilot_jira_reports serve

Module scripts:

./reply-pilot-jira-reports/scripts/jira-reports-start.sh
./reply-pilot-jira-reports/scripts/jira-reports-stop.sh
./reply-pilot-jira-reports/scripts/jira-reports-deploy.sh

Configuration

Committed env template:

  • reply-pilot-jira-reports/.env.example

Encrypted source of truth:

  • secrets/local/reply-pilot-jira-reports.env
  • secrets/prod/reply-pilot-jira-reports.env

Important keys:

  • JIRA_REPORTS_ENABLED
  • HOST_HTTP_BIND
  • HOST_HTTP_PORT
  • JIRA_REPORTS_HTTP_ENABLED
  • JIRA_REPORTS_HTTP_HOST
  • JIRA_REPORTS_HTTP_PORT
  • JIRA_REPORTS_BACKEND_BASE_URL
  • JIRA_REPORTS_BACKEND_API_TOKEN (must match backend JIRA_REPORTS_API_TOKEN)
  • JIRA_PROJECT_KEY
  • JIRA_JQL
  • JIRA_FIELDS
  • JIRA_DOWNLOAD_CHANGELOGS
  • JIRA_REPORTS_SYNC_INTERVAL_SECONDS

JIRA_REPORTS_ENABLED defaults to false in the committed template so the module can be deployed before its backend bearer token is configured. Jira site, email, API token, and optional Cloud ID remain backend-only settings.

Current Limitation

The first implementation generates current status and assignee/status summaries from the latest raw issue payload per issue. It downloads changelogs, but it does not yet calculate historical daily/monthly time-in-status or transition graphs.