Jira Reports

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

Purpose

The module keeps a local reporting copy of Jira data for one project or explicit JQL query:

  • raw issue payloads in data/raw/issues/*.jsonl
  • raw issue changelog payloads in data/raw/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 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 raw Jira JSONL files. 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 completed *.jsonl files only, so it can run while a Jira sync is writing new .tmp files.

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_BASE_URL
  • JIRA_EMAIL
  • JIRA_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 real Jira credentials are configured.

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.