Initial commit

This commit is contained in:
serhei_t
2026-06-16 00:03:34 +03:00
commit 1c3e3f0a28
6 changed files with 1450 additions and 0 deletions
+108
View File
@@ -0,0 +1,108 @@
# 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`.