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.