Help:Statistics
На данной странице приводится описание REST API загрузки статистики и доступные типы статистики.
Описание элементов REST API для загрузки статистики
Система поддерживает загрузку статистики для проектов и отдельных веток проектов:
- Для проекта:
GET /api/public/projects/{project_id}/statistics/{название типа статистики}
- Для ветки:
GET /api/public/projects/{project_id}/branch/{branch_id}/statistics/{название типа статистики}
Внимание! Как и для других типов запросов публичного REST API, в хедере запросов статистики необходимо передавать токен авторизации —Authorization: Bearer <token>
, полученный с помощью запроса к/api/public/login
.
Параметры запросов статистики
Запросы статистики поддерживают следующие необязательные параметры:
Параметр | Формат | Значение по умолчанию | Описание |
---|---|---|---|
from | время в одном из форматов поддерживаемых go | — | начало интересующего отрезка времени |
to | время в одном из форматов поддерживаемых go | — | конец интересующего отрезка времени |
bin-base | время в одном из форматов поддерживаемых go | 1970-01-01T00:00:00Z |
базовый момент времени, от которого отсчитываются временные группы |
bin-stride | интервал времени, заданный с помощью строки вида 1y2M3w4d5h6m7s |
1s |
размер временной группы (bin) |
Форматы времени поддерживаемые go
https://pkg.go.dev/time#pkg-constants
Наиболее предпочтительным является формат RFC 3339 — 2006-01-02T15:04:05Z07:00
Формат строки интервала времени
Строка должна состоять из подстрок, соответствующих регулярному выражению (?P<val>[0-9]+)(?P<unit>[smhdwMy])
, где:
- группа
val
— положительное целое число — количество временных единиц - группа
unit
— одна из букв 's' (секунды), 'm' (минуты), 'h' (часы), 'd' (дни), 'w' (недели), 'M' (месяцы), 'y' (годы) — тип временной единицы
Примеры временных интервалов:
24h
— 24 часа1m1m1m1m1m
— 5 минут5d12h30m30s
— 5 дней + 12 часов + 30 минут + 30 секунд
Форматы ответов
Форматы ответов запросов статистики для проектов (projects/{}/statistics/...
) и веток (projects/{}/branch/{}/statistics/...
) различаются тем, что для проекта возвращается список статистик веток, входящих в проект.
Ответ для запроса статистики проекта
{ "status": "OK", "result": { "Branches": [{объект статистики ветки}, ...] } }
Ответ для запроса статистики ветки
{ "status": "OK", "result": {объект статистики ветки} }
Для каждого типа статистики, {объект статистики ветки}
состоит из полей:
ContainerInfo
— информация о веткеID
— uuid-идентификатор веткиName
— название веткиType
— int-идентификатор типа контейнера: для ветки всегда равен двум (2)
TimeSerie
— временной ряд, содержащий список временных групп, для которых были найдены событияItems
— список элементов временного рядаTime
— время начала временной группы (bin) в формате ISO 8601Value
— объект-значение с данными соответствующими типу статистикиDescription
(может отсутствовать) — дополнительные данные, относящиеся к переданному объекту-значению
{ "ContainerInfo": { "ID": "uuid-идентификатор ветки", "Name": "название ветки", "Type": 2 }, "TimeSerie": { "Items": [ { "Time": "2023-04-03T00:00:00Z", "Value": {объект-значение с данными статистики}, "Description": {дополнительные данные} }, ... ] } }
Логика формирования временных групп (bin)
События, появляющиеся в системе в течение времени, могут быть сгруппированы во временные группы (bin).
Временные группы задаются путём установки базового времени bin-base
и размера группы (шага) bin-stride
.
Каждая временная группа представляет собой отрезок времени и идентифицируется временем начала (time) этого отрезка, определяемого по формуле {time} = {bin-base} + {bin-stride} * i
, где i — индекс временной группы.
Время начала "нулевой" группы (i=0) совпадает с bin-base
. Индексы следующих (time > bin-base) и предыдущих (time < bin-base) временных групп соответственно увеличиваются или уменьшаются на единицу.
Во временную группу попадают события, произошедшие в момент времени (event-time) попадающий во временной отрезок группы: {time} ≤ {event-time} < {time} + {bin-stride}
.
На основе данных из событий, попавших в каждую из временных групп, вычисляется производные значения, являющиеся значениями группы.
Дополнительные временные группы
Помимо множества групп, определяемых с помощью bin-base
и bin-stride
, для некоторых запросов статистики вычисляются значения дополнительных временных групп: BeforeFrom
и AfterTo
. В заданные группы попадают события, отфильтрованные с помощью параметров запросов from
и to
:
- в
BeforeFrom
попадают события произошедшие ДО момента времени, указанного вfrom
- в
AfterTo
попадаю события произошедшие ПОСЛЕ момента времени, указанного вto
Доступные типы статистики
На данный момент в системе поддерживаются несколько типов статистики.
Статистика общего количества предупреждений (total-invariants)
Определяет общее количество предупреждений (инвариантов), присутствующих в ветке при загрузке снимков (снапшотов) в течение определенного отрезка времени, разбитого на интервалы.
- Для проекта:
GET /api/public/projects/{project_id}/statistics/total-invariants
- Для ветки:
GET /api/public/projects/{project_id}/branch/{branch_id}/statistics/total-invariants
Данный тип статистики строится на основе количества предупреждений в снапшотов ветки, загружаемых в течение времени. Соответственно при попадании нескольких снапшотов (учитывается время импорта — import_time
) в выбранной группе (например, неделя: 1w
), будет выдана статистика с учётом нескольких снапшотов.
Для данного типа статистики, объект-значение (Value
) состоит из полей:
Min
— минимальное количество предупреждений, среди всех снапшотов, попавших в интервалMax
— максимальное количество предупрежденийAvg
— среднее арифметическое количество предупрежденийSum
— сумма предупреждений, находящихся во всех снапшотов, попавших во временную группу (Sum / Avg
= количество снапшотов в группе)
Для данного типа статистики, объект с дополнительными данными (Description
) состоит из полей:
SnapshotNames
— список строк с названиями снапшотов, попавших в описываемую временную группу
"TimeSerie": { "Items": [ { "Time": "2023-04-03T00:00:00Z", "Value": { "Sum": 650, "Min": 300, "Max": 350, "Avg": 325 }, "Description": { "SnapshotNames": [ "Snapshot 2023-04-11 17:47:15 +0300", "Snapshot 2023-04-11 17:49:25 +0300" ] } }, ... ] }
Статистики размеченных предупреждений (activity)
Определяет количество предупреждений, для которых была произведена разметка в течение определенного отрезка времени, разбитого на интервалы
- Для проекта:
GET /api/public/projects/{project_id}/statistics/activity
- Для ветки:
GET /api/public/projects/{project_id}/branch/{branch_id}/statistics/activity
Данный тип статистики строится на основе количества активных (is_active
) записей в group_review
, имеющих статус НЕ Undecided
. При этом подсчитывается количество предупреждений размеченных ДО и ПОСЛЕ выбранного отрезка времени. Также ведётся подсчёт общего количества предупреждений, размеченных в рамках выбранного отрезка времени.
Для данного типа статистики {объект статистики ветки}
содержит дополнительные поля:
BeforeFrom
— количество предупреждений, размеченных ДО начала выбранного отрезка времениAfterTo
— количество предупреждений, размеченных ПОСЛЕ начала выбранного отрезка времени
Для данного типа статистики, объект-значение (Value
) состоит из полей:
Relative
— количество предупреждений, размеченных в указанной временной группеAbsolute
— количество предупреждений, размеченных с начала выбранного отрезка времени (сумма всех предшествующихRelative
, включая текущий)
Для данного типа статистики, объект с дополнительными данными (Description
) отсутствует.
"BeforeFrom": 100, "AfterTo": 15, "TimeSerie": { "Items": [ { "Time": "2023-04-01T12:00:00Z", "Value": { "Relative": 2, "Absolute": 2 } }, { "Time": "2023-04-01T13:00:00Z", "Value": { "Relative": 1, "Absolute": 3 } }, ... ] }