Условия
Некоторые запросы и элементы системы поддерживают условные операторы. Например, в запросе Условия перехода состояний нужно указать условие по которому сработает смена состояния с помощью условных операторов.
В системе SmartDCIM есть несколько способов задания условий.
Простое условие
Простое условие – это одна логическая операция. В поле operator описывается операция, которая применяется к значению в поле constant.
json
"operation": "constant"Простые условия могут быть включены в JSON-объект:
json
"metric_name":{
"operator": "constant"
}Поддерживаемые операторы
| Поле | Описание |
|---|---|
| _ct | Содержит |
| _eq | Равно |
| _gt | Больше чем |
| _gte | Больше или равно |
| _lt | Меньше чем |
| _lte | Меньше или равно |
| _m | Совпадает. Может использоваться с регулярным выражением. |
| _nct | Не содержит |
| _neq | Не равен |
| _exists | Существует |
Пример
Этот пример показывает простое условие от ответе от запроса Получить условия перехода состояний связи. Если значение поля roundTripAverage больше чем 16, состояние связи изменится на Working (Работает).
json
[
{
"condition": {
"roundTripAverage": {
"_gt": "16"
}
},
"state": 3,
"description": ""
}
]Сложное условие
Сложные условия позволяют объединить несколько логических операторов.
Ключи условий
| Ключ | Описание |
|---|---|
| _duration | Насколько долго значение должно соответствовать условию, чтобы условие вернуло true. |
| _ratio | Вычисляет соотношение значений, указанных в полях num и denom (числитель и знаменатель соответственно). |
| _field | Вычисляет значение поля простым выражением. |
| _formula | Вычисляет значение поля указанной формулой. Синтакс формулы описан в Пользовательской документации системы SmartDCIM. |
| _and | Объединяет несколько выражений логическим И. |
| _splash | Условие определения аналитических всплесков. Подробная информация доступна в Пользовательской документации системы SmartDCIM. |
| _predict | Условие определения аналитического прогноза. Подробная информация доступна в Пользовательской документации системы SmartDCIM. |
| _period | Условие временного периода. |
Примеры
Соотношение значений:
json
_ratio:{
num: "averageCpuLoad.oneMinuteAverageLoad",
denom: "cpuInformation.totalCores",
value: ">0.8" // Это условие вернёт true, если oneMinuteAverageLoad/totalCores > 0.8
}Условие поля:
json
_field: {
name: 'trapOid',
value: {
_eq: '.1.3.6.1.2.1.1.2.48324.3'
}
}Логическое И (and):
json
_and: [
expression1,
expression2,
...,
expressionN
]Формула:
json
_formula: {
definition: '{{x}} / {{y}}',
value: {
_lte: 0
}
}Период:
json
_period: {
tz: "Europe/Berlin",
startDay: -1,
startTime: 57600, // 17:00 Berlin time
stopDay: -1,
stopTime: 64800 // 19:00 Berlin time
}Аналитика:
NOTE
Модуль аналитики, который используется для определения всплесков и прогнозов не включён в стандартную поставку системы SmartDCIM. Информацию об установке модуля аналитики можно найти в пользовательской документации SmartDCIM .
Условие всплеска:
json
"_splash": {
"metric": "averageCpuLoad.oneMinuteAverageLoad",
"value": {
"_gt": "1"
},
}Условие прогноза:
json
"_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. Подробную информацию можно найти в статье Фильтры аварии.
json
{
"filter": [
[
// filter
]
],
...
}В фильтрах аварий также можно использовать операторы $and и $or для объединения фильтров логическими операторами И и ИЛИ соответственно:
json
body = {
"filter": [
[
"$and",
[
[
"$or",
[
[
// filter
],
[
// filter
]
]
],
[
// filter
],
[
// filter
]
]
]
],
...
}Примеры
Этот пример использует простой фильтр свойства. Под этот фильтр подходят аварии, объекты которых имеют свойство Address равное 192.168.1.1.
json
body = {
"filter": [
[
"property",
{
"value": "192.168.1.1",
"property": "Address",
"op": "_eq"
}
]
],
...
}Также, можно использовать логические операторы $and и $or для объединения фильтров. Этот пример показывает фильтр, под который походят аварии с критичностью Alarm или объекты этих аварий имеют класс Info (ID 24) и случились в промежуток времени, указанный в поле timestamp.
json
body = {
"filter": [
[
"$and",
[
[
"$or",
[
[
"classId",
"24"
],
[
"severity",
[
1
]
]
]
],
[
"timestamp",
{
"from": 1590068678404,
"to": 1590155078405
}
]
]
]
]
...
}