Incident Manager API
Point In Time
Для корректной работы пагинации перед запросом инцидентов и результатов агрегаций необходимо запросить Point In Time (PIT). При переключении страниц Incident Manager PIT должен остаться прежним, в ином случае необходимо запросить новый PIT, а старый удалить при помощи запроса к API.
Количество активных PIT в системе ограничено, поэтому если PIT более не актуален, необходимо выполнить запрос на его удаление.
Запрос PIT
Для получения PIT для запроса инцидентов и результатов агрегаций необходимо выполнить следующий запрос:
GET _im/incidents/pit
Для получения PIT для запроса только инцидентов, необходимо добавить в запрос флаг is_show_aggs=false
:
GET _im/incidents/pit?is_show_aggs=false
Удаление PIT
Когда PIT становится неактуальным (например пользователь закрыл Incident Manager, обновил фильтры и т.д.), его необходимо удалить.
DELETE _im/incidents/pit
{
"id": "{pit_id}"
}
Получение инцидентов и результатов агрегаций
Общий вид запроса для получения инцидентов и результатов агрегаций:
GET _im/incidents_full_types
{
"pit": "pit_id",
"from": 0,
"size": 25,
"search_query": "{\"match_all\":{}}",
"additional_fields": [],
"end_time": "now",
"start_time": "now-1d",
"with_total_docs" : true,
"is_show_aggs" : true
}
Название | Синтаксис | Описание |
---|---|---|
pit | <string> | Point In Time, полученный при запросе PIT . |
from | <int> | Начальный индекс для поиска. |
size | <int> | Количество результатов в ответе. |
search_query | <string> | DSL query, сформированный на основе поисковой строки. |
additional_fields | <array> | см. Additional Fields . |
start_time | <string> | Начальная временная метка поиска. |
end_time | <string> | Конечная временная метка поиска. |
with_total_docs | <bool> | При значении true дополнительно возвращает поле total_docs , содержащее общее количество документов. |
is_show_aggs | <bool> | При значении true возвращает инциденты и результаты агрегаций, при значении false только инциденты. |
Если в запросе не указать PIT, в ответе всегда будут возвращаться документы из актуальной версии индекса.
Additional Fields
Параметр additional_fields
используется для передачи пользовательских фильтров. Он представляет собой массив объектов, содержащих поля name
, type
и value
.
Название | Cинтаксис | Описание |
---|---|---|
name | <string> | Название поля для фильтрации. |
type | <string> | Тип поля. Допустимы значения number , text , select , multiselect . |
value | <string> | Значение фильтра. |
При type=multiselect
поле value
должно иметь не строковый тип, а массив строк.
Пример заполнения additional_fields
[
{
"name": "select_field",
"type": "select",
"value": "test"
},
{
"name": "text_field",
"type": "text",
"value": "test*"
},
{
"name": "multiselect_field",
"type": "multiselect",
"value": ["t1", "t2"]
}
]
Получение статистики инцидентов и результатов агрегаций
Общий вид запроса для получения статистики инцидентов и результатов агрегаций:
POST _im/incidents_full_types/stats/severity
{
"search_query": "{\"match_all\":{}}",
"additional_fields": [],
"end_time": "now",
"start_time": "now-1d",
"is_show_aggs" : true
}
Параметры аналогичны запросу инцидентов и результатов агрегаций
Результаты агрегаций
Получение результата агрегации и инцидентов по id результата агрегации
GET _im/aggregations/results?incident_aggregation_result_id={id}
Получение всех результатов агрегации по id агрегации
GET _im/aggregations/results?incident_aggregation_id={id}
Получение всех результатов агрегаций
GET _im/aggregations/results
Обновление результата агрегации
PUT _im/aggregations/results/{incident_aggregation_id}/{incident_aggregation_result_id}?sync={bool}
{
}
В тело запроса необходимо передавать только измененные поля, например:
{
"comment": "тестовый комментарий",
"reviewer": "test"
}
При значении параметра sync=true
при изменении полей status
, workflow_id
, severity
, comment
и reviewer
в результате агрегации, они также изменятся и в инцидентах, содержащихся в агрегации.
Получение MITRE по id инцидента
GET _im/incidents/{incident_id}/mitre
CRUD для инцидентов
Получение инцидента по id
GET _im/incidents/{incident_id}
Получение всех инцидентов
GET _im/incidents/
При запросе всех инцидентов при помощи параметров GET
запроса можно указывать фильтры инцидентов.
Например, для запроса инцидентов за последний час, у которых поле test_field
равно 5
, можно использовать следующий запрос:
GET _im/incidents?start_time=now-1h&end_time=now&test_field=5
Создание инцидента
POST _im/incidents/{incident_id}
Обновление инцидента
PUT _im/incidents/{incident_id}
В тело запроса необходимо передавать только измененные поля и _meta
, например:
{
"_meta": {
"id": "i59eb2be0-1841-11ef-9ffd-ad0f43d0acc5"
},
"comment": "тестовый комментарий",
"reviewer": "test"
}
Удаление инцидента
DELETE _im/incidents/{incident_id}
Bulk обновление инцидентов
POST _im/incidents/bulkUpdate
Формат аналогичен обычному bulk запросу к OpenSearch
. Пример запроса:
POST _im/incidents/bulkUpdate
{"update":{"_index":".smos_incident-2024.21","_id":"i59eb2be0-1841-11ef-9ffd-ad0f43d0acc5"}}
{"doc":{"reviewer":"test","status":"in_work_incident","_meta":{"id":"i59eb2be0-1841-11ef-9ffd-ad0f43d0acc5"}}}
В тело запроса необходимо передавать только измененные поля и _meta
.