Формирование JSON-строки для фильтрации сообщений

<< Click to Display Table of Contents >>

Navigation:  Проект в MasterSCADA 4D > Работа с сообщениями >

Формирование JSON-строки для фильтрации сообщений

Программные имена тревог используются для фильтрации сообщений с помощью JSON в журналах или в ФБ для работы с сообщениями.

Фильтр задается в виде JSON-массива строк, где каждая строка содержит выражение с условиями, в следующем формате:

["Выражение с условиями 1","Выражение с условиями 2",...,"Выражение с условиями N"]

Каждое выражение фильтра объединяется по И (т. е. все условия внутри массива выполняются одновременно).

Внутри одного выражения допускается использование логических операторов.

Для записи условий поддерживаются два режима синтаксиса:

упрощенный синтаксис, основанный на SQL-запросах;

расширенный синтаксис - специализированный DSL MasterSCADA.

Синтаксис, основанный на SQL-запросах

Особенности синтаксиса:

Логические операторы: and, or

Оператор вложенности :>работает только со строками. Он проверяет, является ли значение левого операнда (например, полное имя объекта) подстрокой правого операнда.

Строки: в одинарных '...' или двойных кавычках с экранированием \"...\"

Поиск подстроки: Contains

Ограничения синтаксиса:

не поддерживаются имена полей на кириллице и других UTF-8 символах;

нельзя проверить принадлежность сообщения к подобъекту экземпляра объекта.

Пример фильтра:

[ "Active=TRUE", "Severity <= 100 or Severity >= 900"], где Severity - приоритет, Active - активность. В этом случае будут выбраны только активные сообщения, у которых приоритет меньше или равен 100 или больше или равен 900.

Фильтрация по строковым параметрам

Если параметр сообщения имеет строковый тип, то значение параметра указывается либо в одинарных кавычках ('...'), либо в двойных кавычках с экранированием (\"...\").

Примеры фильтров со строковыми параметрами:

["EventFullObjectName = 'Объекты.Объект 1'"], где EventFullObjectName - полное имя объекта;

["EventSourceName = \"Тревога 1\""], где EventSourceName - источник сообщений.

Поиск подстроки в строковом параметре

Для выполнения запроса поиска подстроки в строке используется оператор Contains.

Пример фильтра с оператором Contains:

["Message Contains 'Вкл'"], где Message - сообщение. При таких настройках фильтра будут отображаться все сообщения, в которых содержится подстрока "Вкл".

Специализированный DSL MasterSCADA 4D

Специализированный DSL MasterSCADA 4D разработан для устранения ограничений упрощенного синтаксиса. Поддерживает строгую типизацию, UTF-8 и иерархические операции.

Поддерживаемые типы данных и литералы:

BOOL

Логическое

true | false

true

LINT

Целое число

[1-9][0-9]* | "0"+

1234567890 ; 0

LREAL

Дробное число

обычный | экспоненциальный

0.0 ; 0. ; 1.5

STRING

Строка

"str abc \" 1234"

"string literal"

DATE_TIME

Дата и время

#2012-01-06T01:23:45.678910

 

TIME_SPAN

Интервал времени

T#tsDay? tsHour? tsMin? tsSec? tsMs?

T#1d2h30m45s500ms ; T#1.5d2.5h

ITEM_ID

ID элемента, путь в проекте

${id:LINT (. s1mple_id )*}

${id:14.param}

ObjectID

ID объекта, путь в проекте

${oid:LINT (. utf8 path )*})

${oid:14.русскиебуквы}

Variable

Переменная

${u8:any utf8} | s1mple_id

variable_name

Легенда:

simple_id

[a-zA-Z_][a-zA-Z_0-9]*

Операторы:

умножение

"*"

деление

"/"

сложение

"+"

вычитание

"-"

деление по модулю

"%"

не

"!" или 'NOT'

побитовое или

"|"

побитовое и

"&"

XOR

"^"

приведение к ObjectId

"::ObjectId"

приведение к ItemId

"::ItemId"

И

"&&" или 'AND'

или

"||" или 'OR'

равно

"==" или "=" или 'Equal'

не равно

"!=" или "<>" или 'NotEqual'

не равно

"!=" или "<>" или 'NotEqual'

больше либо равно

">=" или 'MoreEqual'

меньше либо равно

"<=" или 'LessEqual'

больше

">" или 'More'

меньше

"<" или 'Less'

входит ли

'IN' или ":>"

содержит ли

'CONTAINS'

В данном синтаксисе оператор :> (IN) работает в двух режимах:

Для строк - как в упрощённом синтаксисе: проверяют, является ли левая строка подстрокой правой;

Для ObjectID и ItemID - проверяет, является ли левый элемент дочерним по отношению к правому в иерархии проекта.

Примеры:

Проверка принадлежности тревоги объекту (ObjectID):

["'Объекты.Объект 1.Ресурсы.Сообщения.Тревога 1'::ObjectId in 'Объекты.Объект 1'::ObjectId"]

["${oid:39151.Ресурсы.Сообщения.Тревога 1} in 'Объекты.Объект 1'::ObjectId"]

["'Объекты.Объект 1.Ресурсы.Сообщения.Тревога 1'::ObjectId in ${oid:39151}"]

["${oid:39151.Ресурсы.Сообщения.Тревога 1} in ${oid:39151}"]

Проверка принадлежности тревоги объекту (ItemID):

["'Объекты.Объект 1.Ресурсы.Сообщения.Тревога 1'::ItemId in 'Объекты.Объект 1'::ItemId"]

["${id:39210} in 'Объекты.Объект 1'::ItemId"]

["'Объекты.Объект 1.Ресурсы.Сообщения.Тревога 1'::ItemId in ${oid:39151}"]

["${id:39210} in ${id:39151}"]

Фильтрация по объекту "Экз_Библ_объекта" (не содержит квадратных скобок):

"ItemID in 'Объекты.Экз_Библ_объекта'::ObjectId"

Фильтрация по приоритету и активности:

["Severity More 450 && Active NotEqual True"]

["Severity <= 414 OR Severity > 510"] -

["Severity = 200 || Severity = 201 || Severity = 202"]

Фильтрация с поиском подстроки в полном имени объекта:

["Message CONTAINS \"Тревога\" AND EventFullObjectName CONTAINS 'фон 2'"]

Фильтрация по типу события, названия источника и приоритету:

["UpdateType == 1 AND EventSourceName Equal \"Тревога 1\" && Severity > 300"]

 

Смотрите также: