Функции цикла

Функции foreach (таблица 92) используются в агрегированных вычислениях, чтобы вернуть одно агрегированное значение для каждого из элементов данных, выбранных используемым фильтром элементов данных; возвращают массив значений.

Например, функция avg_foreach вернет массив значений, в котором каждое значение является средним значением истории выбранного элемента данных за указанный интервал времени.

Фильтр элементов данных является частью синтаксиса, используемого функциями foreach. В фильтре элементов данных поддерживаются подстановочные символы, поэтому нужные элементы данных могут быть выбраны достаточно гибко.

Функции foreach поддерживают два общих параметра: фильтр_элементов_данных и период_времени:

функция_foreach(фильтр_элементов_данных,период_времени)

Например:

avg_foreach(/*/mysql.qps?[group="MySQL Servers"],5m)

вернет среднее за пять минут значение для каждого из элементов данных mysql.qps в группе "MySQL server".

Следует обратить внимание, что некоторые функции поддерживают дополнительные параметры.

Фильтр элементов данных состоит из четырех частей:

/узел_сети/ключ[параметры]?[условия]

где:

  • узел_сети – имя узла сети;
  • ключ – ключ элемента данных (без параметров);
  • параметры – параметры ключа элемента данных;
  • условия – условия на основе группы узлов сети и/или тега элемента данных (как выражение).

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

Использование подстановочных символов:

  • Подстановочный символ может быть использован для замены имени узла сети, ключа элемента данных или отдельного параметра ключа элемента данных.
  • Либо узел сети, либо ключ элемента данных должны быть указаны без подстановочного символа. Так, /узел_сети/* и /*/ключявляются корректными фильтрами, но /*/* некорректен.
  • Подстановочный символ не может быть использован как часть имени узла сети, ключа элемента данных, параметра ключа элемента данных.
  • Подстановочный символ соответствует не более чем одному параметру ключа элемента данных. Поэтому подстановочный символ должен быть указан для каждого параметра отдельно (т.е. ключ[abc,*,*]).

Выражение условий поддерживает:

  • операнды:
  • group – группа узлов сети;
  • tag – тег элемента данных;
  • "<текст>" – строковая константа, с использованием символа обратной косой черты \ для экранирования символов (") и (\);
  • операторы сравнения, чувствительного к регистру: =, <, >;
  • логические операторы: and, or, not;
  • группировка при помощи круглых скобок: ( ).

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

При указании в фильтре тегов (т.е. tag="имя_тега:значение"), двоеточие (":") используется как разделитель. Все после него рассматривается как значение тега. Поэтому в данный момент не поддерживается указание тегов, содержащих двоеточие (":") внутри имени.

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

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

Упоминание родительской группы узлов сети включает родительскую и все вложенные группы узлов сети с их элементами данных.

Второй параметр позволяет указать период времени для агрегирования. Период времени может быть указан только как время; количество значений (с префиксом #) не поддерживается.

Для удобства в этом параметре могут использоваться поддерживаемые символы единиц времени, например: "5m" (пять минут) вместо "300s" (300 секунд) или "1d" (одни сутки) вместо "86400" (86400 секунд).

Период времени игнорируется Сервером, если передан для функции last_foreach, и может быть опущен:

last_foreach(/*/ключ?[group="группа узлов сети"])

Период времени не поддерживается для функции exists_foreach.

Третий необязательный параметр поддерживается функцией bucket_rate_foreach:

bucket_rate_foreach(фильтр_элементов_данных,период_времени,<номер_параметра>)

где <номер_параметра> – это положение значения разряд в ключе элемента данных. Например, если в myItemaaa,0.2 значением разряд является "0.2", то его положение – это 2.

Значением по умолчанию для "<номера параметра>" является "1".

Таблица 93 иллюстрирует, как каждая функция ведет себя в случае ограниченной доступности узла сети/элемента данных и данных истории.

Если для элемента данных указано "игнорировать", к агрегированию ничего не добавляется.