Help:Statistics: Difference between revisions
(add category) |
m (minor layout fixes) |
||
Line 1: | Line 1: | ||
[[Category:Help]] | [[Category:Help]] | ||
На данной странице приводится описание REST API загрузки статистики и доступные типы статистики. | На данной странице приводится описание REST API загрузки статистики и доступные типы статистики. | ||
= Описание элементов REST API для загрузки статистики = | == Описание элементов REST API для загрузки статистики == | ||
Система поддерживает загрузку статистики для проектов и отдельных веток проектов: | Система поддерживает загрузку статистики для проектов и отдельных веток проектов: | ||
Для проекта: <code>GET /api/projects/{project_id}/statistics/{название типа статистики}</code> | * Для проекта: <code>GET /api/projects/{project_id}/statistics/{название типа статистики}</code> | ||
* Для ветки: <code>GET /api/projects/{project_id}/branch/{branch_id}/statistics/{название типа статистики}</code> | |||
'''Внимание!''' Как и для других типов запросов публичного REST API, в хедере запросов статистики необходимо передавать [[Help:Public_API#Получение_токена|токен авторизации]] — <code>Authorization: Bearer <token></code>, полученный с помощью запроса к <code>/api/public/login</code>. | |||
=== Параметры запросов статистики === | |||
== Параметры запросов статистики == | |||
Запросы статистики поддерживают следующие необязательные параметры: | Запросы статистики поддерживают следующие необязательные параметры: | ||
Line 28: | Line 27: | ||
|} | |} | ||
=== Форматы времени поддерживаемые go === | ==== Форматы времени поддерживаемые go ==== | ||
https://pkg.go.dev/time#pkg-constants | https://pkg.go.dev/time#pkg-constants | ||
Line 34: | Line 33: | ||
Наиболее предпочтительным является формат '''RFC 3339''' — <code>2006-01-02T15:04:05Z07:00</code> | Наиболее предпочтительным является формат '''RFC 3339''' — <code>2006-01-02T15:04:05Z07:00</code> | ||
=== Формат строки интервала времени === | ==== Формат строки интервала времени ==== | ||
Строка должна состоять из подстрок, соответствующих регулярному выражению <code>(?P<val>[0-9]+)(?P<unit>[smhdwMy])</code>, где: | Строка должна состоять из подстрок, соответствующих регулярному выражению <code>(?P<val>[0-9]+)(?P<unit>[smhdwMy])</code>, где: | ||
* группа <code>val</code> — положительное целое число — количество временных единиц | * группа <code>val</code> — положительное целое число — количество временных единиц | ||
* группа <code>unit</code> — одна из букв 's'(секунды), 'm'(минуты), 'h'(часы), 'd'(дни), 'w'(недели), 'M'(месяцы), 'y'(годы) — тип временной единицы | * группа <code>unit</code> — одна из букв 's' (секунды), 'm' (минуты), 'h' (часы), 'd' (дни), 'w' (недели), 'M' (месяцы), 'y' (годы) — тип временной единицы | ||
Примеры временных интервалов: | Примеры временных интервалов: | ||
Line 47: | Line 46: | ||
* <code>5d12h30m30s</code> — 5 дней + 12 часов + 30 минут + 30 секунд | * <code>5d12h30m30s</code> — 5 дней + 12 часов + 30 минут + 30 секунд | ||
== Форматы ответов == | === Форматы ответов === | ||
Форматы ответов запросов статистики для проектов (<code>projects/{}/statistics/...</code>) и веток (<code>projects/{}/branch/{}/statistics/...</code>) различаются тем, что для проекта возвращается список статистик веток, входящих в проект. | Форматы ответов запросов статистики для проектов (<code>projects/{}/statistics/...</code>) и веток (<code>projects/{}/branch/{}/statistics/...</code>) различаются тем, что для проекта возвращается список статистик веток, входящих в проект. | ||
Line 69: | Line 68: | ||
Для каждого типа статистики, <code>{объект статистики ветки}</code> состоит из полей: | Для каждого типа статистики, <code>{объект статистики ветки}</code> состоит из полей: | ||
* <code>ContainerInfo</code> — информация о ветке | * <code>ContainerInfo</code> — информация о ветке | ||
** <code>ID</code> — uuid-идентификатор ветки | ** <code>ID</code> — uuid-идентификатор ветки | ||
** <code>Name</code> — название ветки | ** <code>Name</code> — название ветки | ||
Line 96: | Line 95: | ||
} | } | ||
= Логика формирования временных групп (bin) = | == Логика формирования временных групп (bin) == | ||
События, появляющиеся в системе в течение времени, могут быть сгруппированы во временные группы (bin). | События, появляющиеся в системе в течение времени, могут быть сгруппированы во временные группы (bin). | ||
Line 110: | Line 109: | ||
На основе данных из событий, попавших в каждую из временных групп, вычисляется производные значения, являющиеся значениями группы. | На основе данных из событий, попавших в каждую из временных групп, вычисляется производные значения, являющиеся значениями группы. | ||
== Дополнительные временные группы == | === Дополнительные временные группы === | ||
Помимо множества групп, определяемых с помощью <code>bin-base</code> и <code>bin-stride</code>, для некоторых запросов статистики вычисляются значения дополнительных временных групп: <code>BeforeFrom</code> и <code>AfterTo</code>. В заданные группы попадают события, отфильтрованные с помощью параметров запросов <code>from</code> и <code>to</code>: | Помимо множества групп, определяемых с помощью <code>bin-base</code> и <code>bin-stride</code>, для некоторых запросов статистики вычисляются значения дополнительных временных групп: <code>BeforeFrom</code> и <code>AfterTo</code>. В заданные группы попадают события, отфильтрованные с помощью параметров запросов <code>from</code> и <code>to</code>: | ||
* в <code>BeforeFrom</code> попадают события произошедшие ДО момента времени, указанного в <code>from</code> | * в <code>BeforeFrom</code> попадают события произошедшие ДО момента времени, указанного в <code>from</code> | ||
* в <code>AfterTo</code> попадаю события произошедшие ПОСЛЕ момента времени, указанного в <code>to</code> | * в <code>AfterTo</code> попадаю события произошедшие ПОСЛЕ момента времени, указанного в <code>to</code> | ||
[[File:statistics-timing.png]] | [[File:statistics-timing.png]] | ||
Line 122: | Line 121: | ||
На данный момент в системе поддерживаются несколько типов статистики. | На данный момент в системе поддерживаются несколько типов статистики. | ||
== Статистика общего количества предупреждений (total-invariants) == | === Статистика общего количества предупреждений (total-invariants) === | ||
Определяет общее количество предупреждений (инвариантов), присутствующих в ветке при загрузке снимков (снапшотов) в течение определенного отрезка времени, разбитого на интервалы. | Определяет общее количество предупреждений (инвариантов), присутствующих в ветке при загрузке снимков (снапшотов) в течение определенного отрезка времени, разбитого на интервалы. | ||
Для проекта: <code>GET /api/projects/{project_id}/statistics/total-invariants</code> | * Для проекта: <code>GET /api/projects/{project_id}/statistics/total-invariants</code> | ||
* Для ветки: <code>GET /api/projects/{project_id}/branch/{branch_id}/statistics/total-invariants</code> | |||
Для ветки: <code>GET /api/projects/{project_id}/branch/{branch_id}/statistics/total-invariants</code> | |||
Данный тип статистики строится на основе количества предупреждений в снапшотов ветки, загружаемых в течение времени. Соответственно при попадании нескольких снапшотов (учитывается время импорта — <code>import_time</code>) в выбранной группе (например, неделя: <code>1w</code>), будет выдана статистика с учётом нескольких снапшотов. | Данный тип статистики строится на основе количества предупреждений в снапшотов ветки, загружаемых в течение времени. Соответственно при попадании нескольких снапшотов (учитывается время импорта — <code>import_time</code>) в выбранной группе (например, неделя: <code>1w</code>), будет выдана статистика с учётом нескольких снапшотов. | ||
Line 162: | Line 160: | ||
} | } | ||
== Статистики размеченных предупреждений (activity) == | === Статистики размеченных предупреждений (activity) === | ||
Определяет количество предупреждений, для которых была произведена разметка в течение определенного отрезка времени, разбитого на интервалы | Определяет количество предупреждений, для которых была произведена разметка в течение определенного отрезка времени, разбитого на интервалы | ||
Для проекта: <code>GET /api/projects/{project_id}/statistics/activity</code> | * Для проекта: <code>GET /api/projects/{project_id}/statistics/activity</code> | ||
* Для ветки: <code>GET /api/projects/{project_id}/branch/{branch_id}/statistics/activity</code> | |||
Для ветки: <code>GET /api/projects/{project_id}/branch/{branch_id}/statistics/activity</code> | |||
Данный тип статистики строится на основе количества активных (<code>is_active</code>) записей в <code>group_review</code>, имеющих статус НЕ <code>Undecided</code>. При этом подсчитывается количество предупреждений размеченных ДО и ПОСЛЕ выбранного отрезка времени. Также ведётся подсчёт общего количества предупреждений, размеченных в рамках выбранного отрезка времени. | Данный тип статистики строится на основе количества активных (<code>is_active</code>) записей в <code>group_review</code>, имеющих статус НЕ <code>Undecided</code>. При этом подсчитывается количество предупреждений размеченных ДО и ПОСЛЕ выбранного отрезка времени. Также ведётся подсчёт общего количества предупреждений, размеченных в рамках выбранного отрезка времени. | ||
Line 177: | Line 174: | ||
Для данного типа статистики, объект-значение (<code>Value</code>) состоит из полей: | Для данного типа статистики, объект-значение (<code>Value</code>) состоит из полей: | ||
* <code>Relative</code> — количество предупреждений, размеченных в указанной временной группе | * <code>Relative</code> — количество предупреждений, размеченных в указанной временной группе | ||
* <code>Absolute</code> — количество предупреждений, размеченных с начала выбранного отрезка времени (сумма всех предшествующих <code>Relative</code>, включая текущий) | * <code>Absolute</code> — количество предупреждений, размеченных с начала выбранного отрезка времени (сумма всех предшествующих <code>Relative</code>, включая текущий) | ||
Для данного типа статистики, объект с дополнительными данными (<code>Description</code>) отсутствует. | Для данного типа статистики, объект с дополнительными данными (<code>Description</code>) отсутствует. |
Revision as of 17:24, 29 May 2023
На данной странице приводится описание REST API загрузки статистики и доступные типы статистики.
Описание элементов REST API для загрузки статистики
Система поддерживает загрузку статистики для проектов и отдельных веток проектов:
- Для проекта:
GET /api/projects/{project_id}/statistics/{название типа статистики}
- Для ветки:
GET /api/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/projects/{project_id}/statistics/total-invariants
- Для ветки:
GET /api/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/projects/{project_id}/statistics/activity
- Для ветки:
GET /api/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 } }, ... ] }