Примеры тревог

В данном разделе приводятся некоторые существенные конфигурации тревоги, чтобы в дальнейшем вы смогли ссылаться на них при создании своих собственных настроек тревог.

Примеры выражения триггера

Далее приведены несколько реальных примеров выражения триггера тревоги:

Выражение

Примечания

select({}, 'ifAdminStatus', 'ifIndex', 1) == 2

Данное выражение будет обращаться к таблице по умолчанию (т.е. к значению переменной в случае триггера переменной), находить запись со значением 1 в поле ifIndex и активировать тревогу, если значение поля ifAdminStatus равно 2 в данной записи.

{connectionStatus} == 0 && {genericProperties$offlineAlert}

Данное выражение используется тревогой "Устройство отключено". Оно активирует тревогу, если поле connectionStatus контролируемой переменной (а именно переменной статус Device ) равно 0 (офлайн), и значение поля offlineAlert переменной genericProperties ( общие свойства) является TRUE (т.е. активирована тревога статуса Офлайн для данного устройства).

{temperature} > 27.00 && dayOfWeek(now()) != 0 && dayOfWeek(now()) != 6 && hour(now()) > 9 && hour(now()) < 18

Данная тревога будет активирована, если температура будет держаться выше 27 градусов с понедельника по пятницу с 9.00 до 18.00.

contains({message}, "FAILED LOGIN") &&  {facility} == 4 && {level} == 5

Данное выражение триггера события активирует тревогу, когда поле message данных события содержит часть строки "Вход в систему не выполнен (FAILED LOGIN)", поле facility равно 4, а поле level равно 5.

select({.:settingsStatus}, 'duration', 'setting', 'mySqlQuery') > 500

Это выражение анализирует последнее время выполнения запроса SQL под названием mySqlQuery, которое периодически выполняется драйвером устройства базы данных. Если время выполнения запроса превышает 500 милисекунд, поднимается тревога.

То же выражение может использоваться для анализа продолжительности ввода/вывода (например, времени чтения/записи) любой переменной устройства.

Тревога предупреждение об ударе

Предположим, что наше аппаратное устройство является контроллером погрузчика, который генерирует событие Удар, когда погрузчик сталкивается с препятствием. Данное событие содержит поле Уровень, которое представляет уровень удара, более высокие уровни сигнализируют о более серьезных ударах.

Тревога Предупреждение об ударе имеет только один триггер события, который активируется при возникновении события Удар в контексте терминала данных, если значение целочисленного поля Уровень в данных события выше 50 (т.е. тревога активируется только при серьезных ударах).

Информация о тревоге

Поле

Значение

Имя тревоги

impact_warning

Описание тревоги

Предупреждение об ударе

Тревога включена

TRUE

Сообщение

Сильный удар транспорта

Триггеры, активируемые событиями

Маска контекста

Событие

Выражение фильтра

users.admin.devices.forklift

impact

{level} > 50

Тревожные уведомления

Поле

Значение

Уведомлять владельца при наличии подключения к серверу

TRUE

Требуется подтверждение

FALSE

Звук уведомления

<Not set>

Отправит e-mail сообщение владельцу

TRUE

Адресаты е-mail сообщений

NONE

Дополнительные адресаты е-mail сообщений


Проблема нескольких устройств

Данный комплексный пример показывает, как взаимодействие двух функций системы, тревог и запросов, может быть полезным для обнаружения ошибок, касающихся сразу нескольких Device.

Допустим, что десять температурных датчиков подключены к SberMobile Server и принадлежат пользователю john. Контекст терминала данных каждого датчика имеет переменную "Температура" (имя переменной: temperature), значение которой обладает целочисленным полем, celsius, показывающим температуру в градусах Цельсия. Предположим, что температура отдельно взятого датчика не критична, но если три или более датчика сообщают о температуре выше 100 градусов, что может привести  к проблеме в дальнейшем, необходима активация тревоги, чтобы позволить операторам выяснить и устранить проблему.

Мы будем использовать запрос, который поможет найти все термометры, сообщающие о температуре выше 100 градусов:

SELECT * FROM users.john.devices.*:temperature WHERE temperature$celsius > 100

Данный запрос вернет таблицу ( таблицу данных ), содержащую одну запись для каждого датчика, сообщающего о высокой температуре.

Выполнить данный запрос можно путем вызова функции executeQuery из корневого контекста и ввода текста запроса в качестве параметра входа. Смысл в том, чтобы установить тревогу с триггером, который будет периодически выполнять данный запрос и проверять количество записей выхода. Если количество больше трех, триггер активируется.

Триггеры переменной могут и не использоваться напрямую для проверки выхода функции, но в данном случае нам необходимо проверить выход функции - executeQuery является функцией. Как было сказано ранее, тревоги могут быть активированы двумя способами - когда возникает событие (так называемые "триггеры события") или согласно значению какой-либо переменной ("триггер переменной"). В нашем примере мы будем использовать триггер переменной, но немного его доработаем. Триггер переменной всегда имеет контекст, переменную и выражение. В данном примере выражения могут вызывать функции.

Итак, мы собираемся создать тревогу с не имеющими значения контекстом, переменной (которая все равно соответствует контексту) и очень важным значением выражения. Данное выражение не будет даже ссылаться на контекст и переменную тревоги. В данном случае для нас важно само выражение, потому что именно оно приведет к выполнению запроса. Все остальные части (контекст и переменная) являются просто шаблонами. В качестве их значений мы возьмем "" (корневой) контекст и доступную только для чтения переменную version, содержащую версию сервера.

Тревога активируется, когда значение оценивается как true.

Чтобы получить доступ к записям, содержащимся в выходе функции executeQuery, мы будем использовать свойство Записи (более подробное описание о процессе разрешения ссылки см. в разделе Ссылки). Итак, итоговая ссылка, которая вернет количество датчиков, зарегестрировавших высокую температуру, выглядит таким образом:

{:executeQuery("SELECT * FROM users.john.devices.*:temperature WHERE temperature$celsius > 100")#records}

Принцип действия:

  • Триггер периодически опрашивает корневой контекст на значение переменной version.

  • Данное значение отвергается, т.к. оно не используется в выражении триггера.

  • Происходит вычисление выражения. Во время оценки, поскольку схема ссылки не указана, ссылка разрешается как стандартная. Функция "Выполнить запрос" корневого контекста выполняется и возвращает количество строк в результате. Это число сравнивается с числовой константой "3". Результирующее выражение возвращает TRUE, если оно больше или равно трем, и FALSE в противном случае.

  • Если выражение возвращает TRUE, триггер активирует тревогу и отправляются все уведомления.

Информация о тревоге

Поле

Значение

Имя тревоги

temperature_warning

Описание тревоги

Предупреждение о температуре

Тревога включена

TRUE

Сообщение

Три и более датчиков показывают высокую температуру

Триггеры переменной

Маска контекста

Переменная

Выражение

Monitor State Changes

Check Period (seconds)

Level

"" (empty string - Root context)

version

{:executeQuery("SELECT * FROM users.john.deviceservers.sensors.devices.*:temperature WHERE temperature$celsius > 100")#records} >= 3

FALSE

10

Error

Тревожные уведомления

Поле

Значение

Уведомлять владельца при наличии подключения к серверу

TRUE

Требуется подтверждение

FALSE

Звук уведомления

<Not set>

Отправить e-mail сообщение владельцу

TRUE

Адресаты е-mail сообщений

NONE

Дополнительные адресаты е-mail сообщений


Дополнительные примеры можно найти в разделе Триггеры.