Correlator dispose protocol
На настоящий момент времени коррелятор обрабатывает очередь dispose, из которой приходят события, которые могут как открывать аварии, так и закрывать. Таким образом коррелятор может создавать и закрывать аварии только на основе событий. В связи с этим, в случае необходимости создавать аварии напрямую, приходится манипулировать ими в обход коррелятора. Для унификации механизма обработки и корреляции аварий необходимо все открываемые и закрываемые аварии пропускать через коррелятор.
Предлагаемое решение
Сделать протокол dispose расширяемым, с возможностью задавать новые форматы сообщений. Сообщения остаются в формате JSON, но добавляется дополнительное поле:
{
"$op": "<operation>"
}
Поле $op
задает тип сообщения и его формат. Для обратной совместимости, если поле $op
не задано, оно считается равным event
.
Типы сообщений
event
Классическое сообщение dispose
, имеет поля:
-
$op
- имеет значениеevent
-
event
- структура данных события
Передает событие, которое может как открыть аварию, так и закрыть ее
raise
Принудительное создание аварии.
-
$op
- имеет значениеraise
-
class
- строчное название Alarm Class -
managed_object
- объект -
reference
- опциональный ключ, по которому может быть адресована авария -
groups
- список групп, в которые необходимо добавить аварию-
reference
- уникальное имя группы -
name
- имя группы для оператотра
-
-
vars
- список значений, состоит из объектов вида:-
key
- название параметра -
value
- значениие
-
-
remote_system
- опционально - код внешней системы, откуда импортирована авария -
remote_id
- опционально - код аварии во внешней системе
Если авария уже существует, ее группы и значения обновляются.
clear
Принудительная очистка аварии.
-
$op
- имеет значениеclear
-
reference
- опциональный код, по которому создавалась авария -
remote_system
- опционально - код внешней системы -
remote_id
- опционально - код аварии во внешней системе
Для закрытия аварии можно использовать либо reference
, либо пару remote_system
и remote_id
.
В случае указание обеих параметров приоритет имеет поле reference
.
ensure_group
Оставить только актуальные аварии в группе, закрыть все неактуальные.
-
$op
- имеет значениеensure_group
-
reference
- уникальный код группы -
name
- имя группы -
alarms
- список открытых аварий- Структура совпадает с сообщением
raise
без поля$op
- Структура совпадает с сообщением
Как и в сообщении clear
для идентификации аварии может использовать как reference
, так и пара remote_system
и remote_id
.
Метод ensure_group
обновляет в группе перечисленные аварии, создает новые, все остальные аварии группы закрываются.
Вызов метода ensure_group
с пустым списком аварий эквивалентен закрытию группы.