Отчёт «Аналитика продуктивности» показывает, сколько времени слитые запросы на слияние группы шли до слияния, на какие этапы их жизни ушло это время и насколько велики изменения. Страница содержит гистограмму запросов на слияние по выбранной метрике, точечный график тех же запросов по дням слияния со скользящей медианой и таблицу слитых запросов на слияние периода. Отчёт доступен для группы.
Доступность отчёта
Отчёт доступен участникам группы с ролью «Наблюдатель» и выше, в том числе тем, кто получил роль в родительской группе, и пользователям с типом «Аудитор». Участники с ролью «Гость» или «Планировщик» и посетители публичной группы не видят пункт меню, а адрес отвечает им 404.
В отчёт входят только проекты, запросы на слияние которых читатель может видеть: проект, к которому у читателя нет доступа, или проект, где запросы на слияние скрыты от него, в расчёт не попадает.
Просмотр отчёта
Чтобы просмотреть отчёт:
- В верхней панели нажмите «Искать или перейти к…» и выберите группу.
- В меню группы перейдите в «Аналитика» → «Аналитика продуктивности».
Также отчёт можно открыть по прямому адресу:
| Отчёт | Адрес |
|---|---|
| Группа | https://<HOST>/groups/<GROUP>/-/analytics/productivity_analytics |
Что попадает в отчёт
Отчёт учитывает слитые запросы на слияние проектов группы и проектов её подгрупп, включая архивные проекты, дата слияния которых входит в период отчёта. Открытые запросы на слияние и запросы, закрытые без слияния, в отчёте отсутствуют.
Дата слияния берётся по UTC, и дни на графиках — это дни по UTC.
Метрики времени отсчитываются от открытия запроса на слияние: запрос, открытый до периода и слитый внутри него, учитывается полностью. Запрос, у которого момент слияния совпадает с моментом открытия или предшествует ему, в отчёт не попадает.
Даты первого и последнего коммита, число коммитов, число изменённых строк и число изменённых файлов записываются из изменений запроса на слияние при его открытии и после каждой отправки изменений в его исходную ветку. У запроса на слияние, изменения которого были отправлены до того, как инстанс начал записывать эти колонки, они пусты, пока администратор не заполнит их так, как описано в разделе Заполнение колонок для существующих запросов на слияние.
Метрики
Список «Метрика» задаёт метрику гистограммы и вертикальной оси точечного графика. Список открывается на «Дней от открытия до слияния».
| Метрика | Содержимое | Столбцы гистограммы |
|---|---|---|
| «Дней от открытия до слияния» | Полных дней от открытия запроса на слияние до его слияния | По столбцу на каждое число дней, в котором есть запросы на слияние; общего столбца для хвоста нет, поэтому запрос, слитый через год, — отдельный столбец на 365 |
| «От открытия до первого комментария» | Время от открытия запроса на слияние до первого комментария | <1h, 1-3h, 3-6h, 6-12h, 12-24h, 24-48h, 48h+ |
| «От первого комментария до последнего коммита» | Время от первого комментария до последнего коммита | Те же интервалы в часах |
| «От последнего коммита до слияния» | Время от последнего коммита до слияния | Те же интервалы в часах |
| «Коммитов в запросе на слияние» | Число коммитов | От 0 до 19, затем 20+ |
| «Изменённых строк на коммит» | Изменённые строки, делённые на число коммитов | <10, 10-25, 25-50, 50-100, 100-250, 250-500, 500+ |
| «Изменённых файлов» | Число изменённых файлов | От 0 до 19, затем 20+ |
Запрос на слияние, о котором метрика ничего не говорит, в гистограмму и на точечный график не попадает: ни разу не прокомментированный — для «От открытия до первого комментария» и «От первого комментария до последнего коммита»; тот, у которого последний коммит предшествует первому комментарию, — для «От первого комментария до последнего коммита»; тот, у которого колонки коммитов пусты, — для всех метрик, читающих коммиты; без коммитов — для «Изменённых строк на коммит».
Гистограмма
Заголовок гистограммы — выбранная метрика. Каждый столбец содержит запросы на слияние периода, которые в него попали; горизонтальная ось названа единицей метрики («Дни», «Часы», «Коммиты», «Строки» или «Файлы»), вертикальная — «Запросы на слияние».

Выбор столбца ограничивает точечный график, его медиану и таблицу запросами на слияние этого столбца; остальные столбцы отображаются полупрозрачными. Можно выбрать несколько столбцов; повторный выбор столбца снимает его, а кнопка «Снять выбор столбцов» над графиком снимает все. Строка под графиком называет выбор: Ниже — запросы на слияние из 2 выбранных столбцов. Смена метрики снимает выбор.
Если в периоде с учётом фильтров нет слитых запросов на слияние, вместо графика отображается сообщение «За этот период не было слито ни одного запроса на слияние» и подсказка «Расширьте диапазон дат или выберите другие проекты, чтобы увидеть разброс времени слияния.»
Запросы на слияние по времени
График «Запросы на слияние по времени» показывает по точке на каждый слитый запрос на слияние: горизонтальная ось «Слит» содержит все дни периода, включая дни без слияний, а вертикальная — выбранную метрику.

Вертикальная ось метрики времени отсчитывает секунды, какая бы единица ни стояла в названии метрики: запрос, слитый через четыре дня, метрика «Дней от открытия до слияния» помещает около 350k. Гистограмма и таблица той же метрики считают дни.
Линия «<метрика>, медиана за 30 дней» — медиана метрики за 30 дней до каждого дня периода включительно. Она учитывает дни до начала периода, поэтому идёт с его первого дня. Медиана считается по сетке значений: для метрики времени она отличается от точной менее чем на полпроцента, а длительность больше пяти лет считается как пять лет.
На графике не больше 2000 точек, начиная с последних слитых. Если запросов на слияние в периоде больше, строка под графиком принимает вид Показаны последние 2000 из 3125 запросов на слияние.; гистограмма и таблица учитывают все.
Период отчёта
Период открывается на последних 30 днях, включая текущий, и охватывает не больше 90 дней, считая оба конца. Период задаётся в полях «От» и «В»; дата окончания не позже текущего дня, а более широкий диапазон выбрать нельзя. Строка рядом с полями считает дни: 30 дней выбрано.
Период в адресе страницы не сохраняется: ссылка открывается на последних 30 днях.
Фильтры
Список «Проекты» ограничивает отчёт выбранными проектами группы и её подгрупп. Он открывается на «Все проекты», принимает несколько проектов, содержит поиск, а «Очистить всё» возвращает его ко всем проектам. С выбранными проектами список принимает вид Выбрано 3 проекта. Выбранные проекты в адресе страницы не сохраняются.
Панель фильтров над графиками ограничивает гистограмму, точечный график и таблицу одновременно:
- «Автор» — один автор;
- «Метка» — одна или несколько меток; в отчёте остаются запросы на слияние со всеми выбранными метками;
- «Этап» — один этап; «Нет» оставляет запросы на слияние без этапа, «Любой» — запросы с любым этапом.
Фильтры принимают только оператор =.
Метрика, порядок сортировки, выбранные столбцы и фильтры сохраняются в адресе страницы, поэтому настроенный отчёт можно передать ссылкой:
https://<HOST>/groups/<GROUP>/-/analytics/productivity_analytics?metric=TIME_TO_MERGE&sort=DAYS_TO_MERGE_DESC&buckets[]=2Ссылка открывается на последних 30 днях и всех проектах, а значение, которого отчёт не предлагает, приводится к значению по умолчанию.
Таблица слитых запросов на слияние
Таблица «Слитые запросы на слияние» перечисляет слитые запросы на слияние периода, по строке на запрос со всеми метриками, начиная с последнего слитого. Таблица показывает 20 строк; кнопка «Развернуть» под ней добавляет следующие 20.

Выбор заголовка измеряемой колонки сортирует таблицу по ней в любом направлении; колонки «Запрос на слияние» и «Автор» не сортируются. Запрос на слияние, о котором колонка ничего не говорит, имеет пустую ячейку и в любом направлении оказывается в конце.
| Колонка | Содержимое |
|---|---|
| «Запрос на слияние» | Заголовок со ссылкой на запрос на слияние |
| «Автор» | Автор запроса на слияние со ссылкой на профиль |
| «Слит» | Дата слияния |
| «Дней до слияния» | Полных дней от открытия запроса на слияние до его слияния |
| «Коммиты» | Число коммитов |
| «Изменённых строк» | Число изменённых строк |
| «Изменённых файлов» | Число изменённых файлов |
| «Строк на коммит» | Изменённые строки, делённые на число коммитов, с точностью до двух знаков |
| «Коммит → комментарий» | Время от открытия запроса на слияние до первого комментария |
| «Комментарий → коммит» | Время от первого комментария до последнего коммита; пусто, если после первого комментария коммитов не было |
| «Коммит → слияние» | Время от последнего коммита до слияния |
Колонки времени показывают сокращённое значение: 30s, 45min, 2.5h, 3d.
Заполнение колонок для существующих запросов на слияние
Колонки, которые читаются из изменений запроса на слияние, — «Коммиты», «Изменённых строк», «Изменённых файлов», «Строк на коммит», а также даты первого и последнего коммита, стоящие за «Комментарий → коммит» и «Коммит → слияние», — для существующих запросов на слияние заполняет задача, запускаемая из консоли инстанса. Задача берёт каждый запрос на слияние, у которого есть изменения, и читает их последнюю версию; запрос без изменений пропускается. GROUP=<GROUP> ограничивает задачу проектами одной группы и её подгрупп, где <GROUP> — полный путь группы; без GROUP задача берёт все запросы на слияние инстанса. Путь, по которому группы нет, останавливает задачу с сообщением No group at <GROUP>.
- Пакет для ОС Linux
- Omnibus Docker
- Helm-чарт
- Модуль Deckhouse Kubernetes Platform
sudo gitlab-rake fe:analytics:backfill_merge_request_metrics GROUP=<GROUP>docker exec code gitlab-rake fe:analytics:backfill_merge_request_metrics GROUP=<GROUP>d8 k -n code exec deploy/code-toolbox -- gitlab-rake fe:analytics:backfill_merge_request_metrics GROUP=<GROUP>d8 k -n d8-code exec -it -c toolbox deploy/toolbox -- gitlab-rake fe:analytics:backfill_merge_request_metrics GROUP=<GROUP>Команда ставит в очередь фоновую задачу на каждый запрос на слияние и печатает Enqueued a metrics refresh for 1250 merge requests; колонки заполняются по мере выполнения задач. Задача для запроса на слияние, в который за это время была выполнена отправка изменений, ничего не делает: эта отправка сама записала колонки. Повторный запуск перезаписывает колонки по последним изменениям.