Help:Statistics: Difference between revisions
(add category) |
M.vinogradov (talk | contribs) No edit summary |
||
| (One intermediate revision by one other user not shown) | |||
| 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/public/projects/{project_id}/statistics/{название типа статистики}</code> | ||
* Для ветки: <code>GET /api/public/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/public/projects/{project_id}/statistics/total-invariants</code> | ||
* Для ветки: <code>GET /api/public/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/public/projects/{project_id}/statistics/activity</code> | ||
* Для ветки: <code>GET /api/public/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 10:08, 18 July 2023
На данной странице приводится описание 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
}
}, ...
]
}
