Условия

Некоторые запросы и элементы системы поддерживают условные операторы. Например, в запросе Условия перехода состояний нужно указать условие по которому сработает смена состояния с помощью условных операторов.

В системе Центральный Пульт есть несколько способов задания условий.

Простое условие

Простое условие – это одна логическая операция. В поле operator описывается операция, которая применяется к значению в поле constant.

"operation": "constant"

Простые условия могут быть включены в JSON-объект:

"metric_name":{
  "operator": "constant"
}

Поддерживаемые операторы

Поле Описание

_ct

Содержит

_eq

Равно

_gt

Больше чем

_gte

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

_lt

Меньше чем

_lte

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

_m

Совпадает. Может использоваться с регулярным выражением.

_nct

Не содержит

_neq

Не равен

_exists

Существует

Пример

Этот пример показывает простое условие от ответе от запроса Получить условия перехода состояний связи. Если значение поля roundTripAverage больше чем 16, состояние связи изменится на Working (Работает).

[
  {
    "condition": {
        "roundTripAverage": {
            "_gt": "16"
        }
    },
    "state": 3,
    "description": ""
  }
]

Сложное условие

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

Ключи условий

Ключ Описание

_duration

Насколько долго значение должно соответствовать условию, чтобы условие вернуло true.

_ratio

Вычисляет соотношение значений, указанных в полях num и denom (числитель и знаменатель соответственно).

_field

Вычисляет значение поля простым выражением.

_formula

Вычисляет значение поля указанной формулой. Синтакс формулы описан в Пользовательской документации системы Центральный Пульт.

_and

Объединяет несколько выражений логическим И.

_splash

Условие определения аналитических всплесков. Подробная информация доступна в Пользовательской документации системы Центральный Пульт.

_predict

Условие определения аналитического прогноза. Подробная информация доступна в Пользовательской документации системы Центральный Пульт.

_period

Условие временного периода.

Примеры

Соотношение значений:

_ratio:{
    num: "averageCpuLoad.oneMinuteAverageLoad",
    denom: "cpuInformation.totalCores",
    value: ">0.8"    // Это условие вернёт true, если oneMinuteAverageLoad/totalCores > 0.8
}

Условие поля:

_field: {
  name: 'trapOid',
  value: {
    _eq: '.1.3.6.1.2.1.1.2.48324.3'
  }
}

Логическое И (and):

_and: [
    expression1,
    expression2,
    ...,
    expressionN
]

Формула:

_formula: {
    definition: '{{x}} / {{y}}',
    value: {
        _lte: 0
    }
}

Период:

_period: {
    tz: "Europe/Berlin",
    startDay: -1,
    startTime: 57600, // 17:00 Berlin time
    stopDay: -1,
    stopTime: 64800 // 19:00 Berlin time
}

Аналитика:

Модуль аналитики, который используется для определения всплесков и прогнозов не включён в стандартную поставку Центральный Пульт. Информацию об установке модуля аналитики можно найти в пользовательской документации Центральный Пульт.

Условие всплеска:

"_splash": {
    "metric": "averageCpuLoad.oneMinuteAverageLoad",
    "value": {
        "_gt": "1"
    },
}

Условие прогноза:

"_predict": {
    "metric": "MEM.bytesAvailable",
    "value": {
        "_lt": "200000000"
    },
    "history": "1d-ago",
    "period": "10"
}

Фильтр аварий

Фильтры аварий имеют особенный формат условий, который определён в виде массива условий.

Incident filter has a special condition format that’s represented as an array. Подробную информацию можно найти в статье Фильтры аварии.

{
    "filter": [
      [
        // filter
      ]
    ],
...
}

В фильтрах аварий также можно использовать операторы $and и $or для объединения фильтров логическими операторами И и ИЛИ соответственно:

body = {
    "filter": [
        [
            "$and",
            [
                [
                    "$or",
                    [
                        [
                            // filter
                        ],
                        [
                            // filter
                        ]
                    ]
                ],
                [
                    // filter
                ],
                [
                    // filter
                ]
            ]
        ]
    ],
...
}

Примеры

Этот пример использует простой фильтр свойства. Под этот фильтр подходят аварии, объекты которых имеют свойство Address равное 192.168.1.1.

body = {
    "filter": [
        [
          "property",
          {
            "value": "192.168.1.1",
            "property": "Address",
            "op": "_eq"
          }
        ]
    ],
...
}

Также, можно использовать логические операторы $and и $or для объединения фильтров. Этот пример показывает фильтр, под который походят аварии с критичностью Alarm или объекты этих аварий имеют класс Info (ID 24) и случились в промежуток времени, указанный в поле timestamp.

body = {
    "filter": [
      [
        "$and",
        [
          [
            "$or",
            [
              [
                "classId",
                "24"
              ],
              [
                "severity",
                [
                  1
                ]
              ]
            ]
          ],
          [
            "timestamp",
            {
              "from": 1590068678404,
              "to": 1590155078405
            }
          ]
        ]
      ]
    ]
...
}