Гибкая настройка уведомлений

Started by zeratyl, May 21, 2019, 10:28:06 AM

Previous topic - Next topic

zeratyl

Добрый день.

Пытаюсь решить задачу настройки уведомлений по важности события, делаю как на скриншотах, и тут возникает проблема если использовать SYS_THRESHOLD_REARMED как общее для завершения событий, то приходят лишние уведомления, если не использовать то не приходят уведомления о завершении. В противном случае нужно использовать на каждый триггер своё собственное завершающее событие, что совсем не удобно. Есть какое-то простое решение?

Victor Kirhenshtein

Можно помимо генерации аларма делать запись с таким-же ключом в persistent storage, и в правиле отсылки почты по SYS_THRESHOLD_REARMED проверять наличие такого ключа, и только если он есть выполнять отсылку.

zeratyl

Работает, спасибо за идею!

Простой код, может кому-то понадобится при решении похожей задачи:

sub main() {

alarm_status = false;

alarm_ps_status = ReadPersistentStorage("%<dciId>_%i");

if (alarm_ps_status != null) {
alarm_status = true;
}

return alarm_status;

}

Victor Kirhenshtein

А точно работает? ReadPersistentStorage на делает подстановку, т.е. будет искаться ключ %<dciId>_%i, а не скажем 127_313.

zeratyl

Понаблюдал предварительно, в ps записи добавляются и удаляются, в соответствии с настроенными событиями. Видимо работает.

zeratyl

Вы правы, не работает, попробую переделать.

Victor Kirhenshtein

Похоже это следствие ошибки в ReadPersistentStorage - если записи с заданным ключом нет, то возвращается пустая строка, а не NULL. Правильным вариантом кода будет

ReadPersistentStorage($event->dciId . "_0x" . right(d2x($node->id), 8, "0"));

Предварительно можно еще проверить что $event->dciId не NULL.

zeratyl


zeratyl

Теперь работает корректно, спасибо!

Итоговый вариант:

sub main() {

alarm_status = false;

alarm_ps_status = ReadPersistentStorage($event->dciId . "_0x" . right(d2x($node->id), 8, "0"));

if ((alarm_ps_status != null) && (alarm_ps_status == "1")) {
alarm_status = true;
}

return alarm_status;

}