Условия
Некоторые запросы и элементы системы поддерживают условные операторы. Например, в запросе Условия перехода состояний нужно указать условие по которому сработает смена состояния с помощью условных операторов.
В системе Центральный Пульт есть несколько способов задания условий.
Простое условие
Простое условие – это одна логическая операция. В поле 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 |
Насколько долго значение должно соответствовать условию, чтобы условие вернуло |
_ratio |
Вычисляет соотношение значений, указанных в полях |
_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
}
]
]
]
]
...
}