# Jira Ticket Analysis Исполняемый скрипт `jira_analyze.py` анализирует тикеты Jira по проекту `VDEV` на `https://jira.a1.by`. Токен не хранится в файлах проекта. Перед запуском задайте его через переменную окружения: ```bash export JIRA_TOKEN='your-token-here' export JIRA_USER='Serhei_T' ./jira_analyze.py ``` Шаблон переменных окружения есть в `.env.example`. Файл `.env` добавлен в `.gitignore`. Можно также создать локальный `.env`, скрипт загрузит его автоматически: ```bash cp .env.example .env ``` После этого откройте `.env` и замените `JIRA_TOKEN=your-token-here` на реальный токен. Для этой Jira используется Basic Auth, поэтому также должен быть заполнен `JIRA_USER`. Примеры: ```bash ./jira_analyze.py --project VDEV ./jira_analyze.py --project VDEV --stale-days 14 ./jira_analyze.py --jql 'project = VDEV AND statusCategory != Done ORDER BY updated DESC' ./jira_analyze.py --csv-out jira-dev.csv --json-out jira-dev.json ./jira_analyze.py --html-quarter-out dev-q1-q2-2026.html ./jira_analyze.py --html-sprint-quarter-out vdev-sprints-quarters.html ``` Для вашей задачи по завершенным спринтам 2026 используйте готовую команду: ```bash ./vdev_sprint_report_2026.sh ``` Она создаст файл `vdev-sprints-2026.html` и не будет сканировать все тикеты проекта. Что считает скрипт: - общее количество тикетов; - количество resolved и unresolved; - долю закрытых тикетов; - распределение по статусам, типам, приоритетам, исполнителям, компонентам и меткам; - созданные и закрытые тикеты по месяцам; - незакрытые тикеты без обновлений дольше `--stale-days`; - незакрытые тикеты с просроченным `duedate`. HTML-отчет по кварталам: ```bash ./jira_analyze.py --html-quarter-out dev-q1-q2-2026.html --report-year 2026 --quarters 1,2 --closed-status 'Закрыт' ``` Для HTML-отчета без `--jql` скрипт сам использует запрос: ```jql project = VDEV AND status = "Закрыт" AND resolutiondate >= "2026-01-01" AND resolutiondate < "2026-07-01" ORDER BY resolutiondate ASC ``` В HTML попадает: - выполненные задачи по Q1 и Q2 2026; - фактические и плановые часы из Jira time tracking; - отклонение факт-план; - средний цикл выполнения от `created` до `resolutiondate`; - разбивка по командам через `components`, если компонент не заполнен - через `assignee`; - проблемные сигналы: нет часов, нет оценки, закрыто после срока, длинный цикл, высокий приоритет, блокирующие метки, нет компонента; - рекомендации по корректировкам для команд. HTML-отчет по спринтам с января по сегодня: ```bash ./jira_analyze.py --html-sprint-quarter-out vdev-sprints-quarters.html --sprints-from 2026-01-01 --sprints-to 2026-06-15 ``` Скрипт использует Jira Agile API: - находит boards проекта `VDEV`; - выгружает только завершенные `closed` спринты, пересекающиеся с периодом; - выгружает задачи каждого спринта; - оставляет закрытые задачи через `statusCategory = Done`, `resolutiondate` или статус из `--closed-status`; - раскладывает спринты по кварталам по `completeDate`, затем `endDate`, затем `startDate`; - считает закрытые фичи, задачи и баги в каждом квартале; - дедуплицирует задачу внутри квартала, если она встретилась в нескольких спринтах/boards. Категории типов: - `Фичи`: Jira-типы с `Feature`, `Story`, `фич`, `истор`; - `Задачи`: Jira-типы с `Task`, `задач`; - `Баги`: Jira-типы с `Bug`, `Defect`, `дефект`, `ошиб`; - остальное попадает в `Прочее`. Если нужно ограничить отчет конкретной Agile board: ```bash ./jira_analyze.py --html-sprint-quarter-out vdev-sprints-quarters.html --board-id 123 ``` Параметры по умолчанию: - `--base-url https://jira.a1.by`; - `--project VDEV`; - `--page-size 100`; - `--stale-days 30`.