Структура правил

Правила формирования данных предоставляют пользователю три типа действий:

Правила формирования данных работают с двумя массивами данных:

  • current - указатель на текущие отображаемые данные в таблице;

  • new - указатель на вновь пришедшие данные.

Структура записи правил

Каждое правило состоит из условий (conditions), при выполнении которых к данным применяются действия (actions).

Поле actions является обязательным и должно содержать хотя бы одно действие.

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

Структура записи одного правила:

[
  {
    "conditions": [...],
    "actions": [...]
  }
]

Структура записи нескольких правил:

[
  {
    "conditions": [...],
    "actions": [...]
  },
  {
    "conditions": [...],
    "actions": [...]
  },
...
]

Структура записи условий

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

    "conditions": [{
      "_field": {
        "name": "...",
        "value": {...}
      }
    }],

где

  • _field - заголовок отдельного условия,

  • name - имя метрики из таблицы данных, значение которой необходимо протестировать.

    Обязательно использовать с именем указатель, позволяющий определить какое значение должно быть протестировано:

    • current (присвоенное метрике ранее),

    • new (только что полученное).

  • value - значение метрики, с которым сравнивается текущее значение, и оператор сравнения.

Формат записи поля value:

"Оператор": "Значение"

Возможные операторы:

Оператор

Расшифровка

_eq

Равно

_neq

Не равно

_lt

Меньше

_lte

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

_gt

Больше

_gte

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

_ct

Содержит

_nct

Не содержит

_m

Совпадает

Пример условия (если текущее значение метрики packetLossPercentile меньше десяти):

    "conditions": [
      {
        "_field": {
          "name": "current.packetLossPercentile",
          "value": {
            "_lt": "10"
          }
        }
      }
    ],

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

    "conditions": [
      {
        "_field": {
          "name": "...",
          "value": {...}
        }
      },
      {
        "_field": {
          "name": "...",
          "value": {...}
        }
      }
    ],
 "actions": [...
]

Структура записи действий

В поле actions перечисляются типы действий (type) и дополнительные поля, которые характерны для того или иного типа.

Структура записи правила с одним действием:

[
  {
    "conditions": [...],
    "actions": [
      {
        "type": "extend"
      }
    ]
  }
]

Действия можно комбинировать. В таком случае они выполняются в порядке следования:

[
  {
    "conditions": [...],
    "actions": [
      {
        "type": "extend"
      },
      {
        "type": "drop"
      }
    ]
  }
]

При отсутствии условий действия можно комбинировать двумя равнозначными способами:

[
  {
    "actions": [
      {
        "type": "extend"
      },
      {
        "type": "drop"
      }
    ]
  }
]
[
  {
    "actions": [
      {
        "type": "extend"
      }
    ]
  },
  {
    "actions": [
      {
        "type": "drop"
      }
    ]
  }
]

Типы действий

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

При использовании правил SET и DROP рекомендуется расширять таблицу всеми метриками первым действием, иначе метрики, не указанные в правилах, не будут обновляться в таблице данных:

[
  {
    "actions": [
      {
        "type": "extend"
      }
    ]
  }
...
]

SET - создание новой или переопределение существующей метрики

Данное действие имеет два обязательных поля:

  • Field - имя метрики, куда необходимо записать значение (при отсутствии метрики с таким именем она будет добавлена в таблицу данных);

  • Value - значение, которое необходимо записать в метрику.

В качестве значения (value) можно использовать:

  • числовые значения, например, 10;

  • текстовые данные, например, "text";* значения других метрик из таблицы данных с указателями current и new, например, "{{new.temperature}}";

  • формулы с применением метрик из таблицы данных с указателями current и new, например, "{{current.temperature}}-{{new.temperature}}".

Структура записи правила SET:

[
  {
    "actions": [
      {
        "type": "extend"
      },
      {
        "type": "set",
        "field": "metric_name",
        "value": "metric_value"
      }
    ]
  }
]

EXTEND - расширение таблицы новыми метриками

Это действие дополняет таблицу данных новыми метриками. Метрики, которые уже присутствуют в таблице, удалены не будут.

Действие EXTEND имеет два необязательных взаимоисключающих поля:

  • Include - имена метрик, которые необходимо добавить к существующим;

  • Exclude - имена метрик, которые необходимо игнорировать при добавлении.

Пример 1. Расширение таблицы данных всеми новыми метриками.

[
  {
    "actions": [
      {
        "type": "extend"
      }
    ]
  }
]

Пример 2. Расширение таблицы данных только указанными новыми метриками.

[
  {
    "actions": [
      {
        "type": "extend",
        "include": ["metric_name_1", "metric_name_2", ...]
      }
    ]
  }
]

Пример 3. Расширение таблицы данных всеми новыми метриками, кроме указанных.

[
  {
    "actions": [
      {
        "type": "extend",
        "exclude": ["metric_name_3", "metric_name_4", ...]
      }
    ]
  }
]

DROP - удаление метрик

Это действие удаляет метрики из таблицы данных.

Действие DROP имеет два необязательных взаимоисключающих поля:

  • Include - имена метрик, которые необходимо удалить;

  • Exclude - имена метрик, которые необходимо оставить.

Пример 1. Удаление всех метрик.

[
  {
    "actions": [
      {
        "type": "drop"
      }
    ]
  }
]

Пример 2. Удаление указанных метрик.

[
  {
    "actions": [
      {
        "type": "extend"
      },
      {
        "type": "drop",
        "include": ["metric_name_1", "metric_name_2", ...]
      }
    ]
  }
]

Пример 3. Удаление всех метрик, кроме указанных.

[
  {
    "actions": [
      {
        "type": "extend"
      },
      {
        "type": "drop",
        "exclude": ["metric_name_3", "metric_name_4", ...]
      }
    ]
  }
]