Help:Statistics: Difference between revisions

From Svacer Wiki
(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, в хедере запросов статистики необходимо передавать токен авторизации - <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 запросы]]).
  '''Внимание!''' Как и для других типов запросов публичного 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"
|+ Caption text
|-
|-
! Параметр !! Формат !! Значение по умолчанию !! Описание
! Параметр !! Формат !! Значение по умолчанию !! Описание
|-
|-
| 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''' - <code>2006-01-02T15:04:05Z07:00</code>
Наиболее предпочтительным является формат '''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> - одна из букв 's'(секунды), 'm'(минуты), 'h'(часы), 'd'(дни), 'w'(недели), 'M'(месяцы), 'y'(годы) - тип временной единицы.
* группа <code>unit</code> одна из букв 's'(секунды), 'm'(минуты), 'h'(часы), 'd'(дни), 'w'(недели), 'M'(месяцы), 'y'(годы) тип временной единицы.


Примеры временных интервалов:
Примеры временных интервалов:


* <code>24h</code> - 24 часа
* <code>24h</code> 24 часа
* <code>1m1m1m1m1m</code> - 5 минут
* <code>1m1m1m1m1m</code> 5 минут
* <code>5d12h30m30s</code> - 5 дней + 12 часов + 30 минут + 30 секунд
* <code>5d12h30m30s</code> 5 дней + 12 часов + 30 минут + 30 секунд


== Форматы ответов ==
== Форматы ответов ==
Line 70: Line 69:
Для каждого типа статистики, <code>{объект статистики ветки}</code> состоит из полей:
Для каждого типа статистики, <code>{объект статистики ветки}</code> состоит из полей:


* <code>ContainerInfo</code> - информация о ветке;
* <code>ContainerInfo</code> информация о ветке;
** <code>ID</code> - uuid-идентификатор ветки
** <code>ID</code> uuid-идентификатор ветки
** <code>Name</code> - название ветки
** <code>Name</code> название ветки
** <code>Type</code> - int-идентификатор типа контейнера: для ветки всегда равен двум (2)
** <code>Type</code> int-идентификатор типа контейнера: для ветки всегда равен двум (2)
* <code>TimeSerie</code> - временной ряд, содержащий список временных групп, для которых были найдены события
* <code>TimeSerie</code> временной ряд, содержащий список временных групп, для которых были найдены события
** <code>Items</code> - список элементов временного ряда
** <code>Items</code> список элементов временного ряда
*** <code>Time</code> - время начала временной группы (bin) в формате ISO 8601
*** <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>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 / Avg</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>Relative</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 33392006-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 8601
      • Value — объект-значение с данными соответствующими типу статистики
      • 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
            }
        }, ...
    ]
}