Help:Statistics: Difference between revisions
M.vinogradov (talk | contribs) (Created page with "На данной странице приводится описание REST API загрузки статистики и доступные типы статистики. = Описание элементов REST API для загрузки статистики = Система поддерживает загрузку статистики для проектов и отдельных веток проектов: Для проекта: <code>GET /api/projects/{proj...") |
m (minor fixes) |
||
Line 9: | Line 9: | ||
Для ветки: <code>GET /api/projects/{project_id}/branch/{branch_id}/statistics/{название типа статистики}</code> | Для ветки: <code>GET /api/projects/{project_id}/branch/{branch_id}/statistics/{название типа статистики}</code> | ||
'''Внимание!''' Как и для других типов запросов публичного REST API, в хедере запросов статистики необходимо передавать токен авторизации | '''Внимание!''' Как и для других типов запросов публичного REST API, в хедере запросов статистики необходимо передавать токен авторизации — <code>Authorization: Bearer <token></code> — полученный с помощью запроса к <code>/api/public/login</code> (см. [[Help:ServerClient#%D0%9F%D1%83%D0%B1%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D0%B5_REST_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B|Публичные REST запросы]]). | ||
== Параметры запросов статистики == | == Параметры запросов статистики == | ||
Line 16: | Line 16: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Параметр !! Формат !! Значение по умолчанию !! Описание | ! Параметр !! Формат !! Значение по умолчанию !! Описание | ||
|- | |- | ||
| from || время в одном из форматов поддерживаемых go || | | from || время в одном из форматов поддерживаемых go || — || начало интересующего отрезка времени | ||
|- | |- | ||
| to || время в одном из форматов поддерживаемых go || | | to || время в одном из форматов поддерживаемых go || — || конец интересующего отрезка времени | ||
|- | |- | ||
| bin-base || время в одном из форматов поддерживаемых go || <code>1970-01-01T00:00:00Z</code> || базовый момент времени, от которого отсчитываются временные группы | | bin-base || время в одном из форматов поддерживаемых go || <code>1970-01-01T00:00:00Z</code> || базовый момент времени, от которого отсчитываются временные группы | ||
Line 33: | Line 32: | ||
https://pkg.go.dev/time#pkg-constants | https://pkg.go.dev/time#pkg-constants | ||
Наиболее предпочтительным является формат '''RFC 3339''' | Наиболее предпочтительным является формат '''RFC 3339''' — <code>2006-01-02T15:04:05Z07:00</code> | ||
=== Формат строки интервала времени === | === Формат строки интервала времени === | ||
Line 39: | Line 38: | ||
Строка должна состоять из подстрок, соответствующих регулярному выражению <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> | * группа <code>unit</code> — одна из букв 's'(секунды), 'm'(минуты), 'h'(часы), 'd'(дни), 'w'(недели), 'M'(месяцы), 'y'(годы) — тип временной единицы. | ||
Примеры временных интервалов: | Примеры временных интервалов: | ||
* <code>24h</code> | * <code>24h</code> — 24 часа | ||
* <code>1m1m1m1m1m</code> | * <code>1m1m1m1m1m</code> — 5 минут | ||
* <code>5d12h30m30s</code> | * <code>5d12h30m30s</code> — 5 дней + 12 часов + 30 минут + 30 секунд | ||
== Форматы ответов == | == Форматы ответов == | ||
Line 70: | Line 69: | ||
Для каждого типа статистики, <code>{объект статистики ветки}</code> состоит из полей: | Для каждого типа статистики, <code>{объект статистики ветки}</code> состоит из полей: | ||
* <code>ContainerInfo</code> | * <code>ContainerInfo</code> — информация о ветке; | ||
** <code>ID</code> | ** <code>ID</code> — uuid-идентификатор ветки | ||
** <code>Name</code> | ** <code>Name</code> — название ветки | ||
** <code>Type</code> | ** <code>Type</code> — int-идентификатор типа контейнера: для ветки всегда равен двум (2) | ||
* <code>TimeSerie</code> | * <code>TimeSerie</code> — временной ряд, содержащий список временных групп, для которых были найдены события | ||
** <code>Items</code> | ** <code>Items</code> — список элементов временного ряда | ||
*** <code>Time</code> | *** <code>Time</code> — время начала временной группы (bin) в формате ISO 8601 | ||
*** <code>Value</code> | *** <code>Value</code> — объект-значение с данными соответствующими типу статистики | ||
*** <code>Description</code> (может отсутствовать) | *** <code>Description</code> (может отсутствовать) — дополнительные данные, относящиеся к переданному объекту-значению | ||
{ | { | ||
Line 103: | Line 102: | ||
Временные группы задаются путём установки базового времени <code>bin-base</code> и размера группы (шага) <code>bin-stride</code>. | Временные группы задаются путём установки базового времени <code>bin-base</code> и размера группы (шага) <code>bin-stride</code>. | ||
Каждая временная группа представляет собой отрезок времени и идентифицируется временем начала (time) этого отрезка, определяемого по формуле <code>{time} = {bin-base} + {bin-stride} * i</code>, где i | Каждая временная группа представляет собой отрезок времени и идентифицируется временем начала (time) этого отрезка, определяемого по формуле <code>{time} = {bin-base} + {bin-stride} * i</code>, где i — индекс временной группы. | ||
Время начала "нулевой" группы (i=0) совпадает с <code>bin-base</code>. Индексы следующих (time > bin-base) и предыдущих (time < bin-base) временных групп соответственно увеличиваются или уменьшаются на единицу. | Время начала "нулевой" группы (i=0) совпадает с <code>bin-base</code>. Индексы следующих (time > bin-base) и предыдущих (time < bin-base) временных групп соответственно увеличиваются или уменьшаются на единицу. | ||
Line 125: | Line 124: | ||
== Статистика общего количества предупреждений (total-invariants) == | == Статистика общего количества предупреждений (total-invariants) == | ||
Определяет общее количество предупреждений (инвариантов), присутствующих в ветке при загрузке снимков ( | Определяет общее количество предупреждений (инвариантов), присутствующих в ветке при загрузке снимков (снапшотов) в течение определенного отрезка времени, разбитого на интервалы. | ||
Для проекта: <code>GET /api/projects/{project_id}/statistics/total-invariants</code> | Для проекта: <code>GET /api/projects/{project_id}/statistics/total-invariants</code> | ||
Line 131: | Line 130: | ||
Для ветки: <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>Value</code>) состоит из полей: | Для данного типа статистики, объект-значение (<code>Value</code>) состоит из полей: | ||
* <code>Min</code> | * <code>Min</code> — минимальное количество предупреждений, среди всех снапшотов, попавших в интервал | ||
* <code>Max</code> | * <code>Max</code> — максимальное количество предупреждений | ||
* <code>Avg</code> | * <code>Avg</code> — среднее арифметическое количество предупреждений | ||
* <code>Sum</code> | * <code>Sum</code> — сумма предупреждений, находящихся во всех снапшотов, попавших во временную группу (<code>Sum / Avg</code> = количество снапшотов в группе) | ||
Для данного типа статистики, объект с дополнительными данными (<code>Description</code>) состоит из полей: | Для данного типа статистики, объект с дополнительными данными (<code>Description</code>) состоит из полей: | ||
* <code>SnapshotNames</code> | * <code>SnapshotNames</code> — список строк с названиями снапшотов, попавших в описываемую временную группу | ||
Line 172: | Line 171: | ||
Данный тип статистики строится на основе количества активных (<code>is_active</code>) записей в <code>group_review</code>, имеющих статус НЕ <code>Undecided</code>. При этом подсчитывается количество предупреждений размеченных ДО и ПОСЛЕ выбранного отрезка времени. Также ведётся подсчёт общего количества предупреждений, размеченных в рамках выбранного отрезка времени. | Данный тип статистики строится на основе количества активных (<code>is_active</code>) записей в <code>group_review</code>, имеющих статус НЕ <code>Undecided</code>. При этом подсчитывается количество предупреждений размеченных ДО и ПОСЛЕ выбранного отрезка времени. Также ведётся подсчёт общего количества предупреждений, размеченных в рамках выбранного отрезка времени. | ||
Для данного типа статистики {объект статистики ветки} содержит дополнительные поля: | Для данного типа статистики <code>{объект статистики ветки}</code> содержит дополнительные поля: | ||
* <code>BeforeFrom</code> | * <code>BeforeFrom</code> — количество предупреждений, размеченных ДО начала выбранного отрезка времени | ||
* <code>AfterTo</code> | * <code>AfterTo</code> — количество предупреждений, размеченных ПОСЛЕ начала выбранного отрезка времени | ||
Для данного типа статистики, объект-значение (<code>Value</code>) состоит из полей: | Для данного типа статистики, объект-значение (<code>Value</code>) состоит из полей: | ||
* <code>Relative</code> | * <code>Relative</code> — количество предупреждений, размеченных в указанной временной группе | ||
* <code>Absolute</code> | * <code>Absolute</code> — количество предупреждений, размеченных с начала выбранного отрезка времени (сумма всех предшествующих <code>Relative</code>, включая текущий). | ||
Для данного типа статистики, объект с дополнительными данными (<code>Description</code>) отсутствует. | Для данного типа статистики, объект с дополнительными данными (<code>Description</code>) отсутствует. |
Revision as of 17:06, 17 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
(см. Публичные REST запросы).
Параметры запросов статистики
Запросы статистики поддерживают следующие необязательные параметры:
Параметр | Формат | Значение по умолчанию | Описание |
---|---|---|---|
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 } }, ... ] }