Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Info
  • Большинство фильтров могут быть before и аfter.
  • У всех (question) есть condition.
  • У всех (question) можно использовать либо value, либо value_expression.
  • Если ключа нет, он будет добавлен. Если ключ есть, его значение будет заменено новым.

Универсальные фильтры

case_before, case_after

Установка значений в зависимости от выполнения условий.

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_case_filter.py

check_attr_before, check_attr_after

Прерывание обработки запроса.

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_check_attr.py

delete_attrs_before, delete_attrs_after

Удаление ключей.

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_delete_attrs_filter.py

divide_before, divide_after

Массовое деление значений ключей на заданные делители.

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_divide_filter.py

format_before, format_after

Формирование значения на основе шаблона.

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_format_filter.py

map_before, map_after

Применение некоторого преобразования к удовлетворяющим заданному фильтру элементам входного списка и формирование списка результатов (https://ru.wikipedia.org/wiki/Map).

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_map_filter.py

match_before, match_after

Разбор входного значения-строки по шаблону. Шаблон - регулярное выражение с именованными группами. См. также фильтр split.

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_match_filter.py

multiply_before, multiply_after

Массовое умножение значений ключей на заданные множители.

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_multiply_filter.py

reduce_before, reduce_after

Свёртка входного списка значений с предварительной фильтрацией его элементов (https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%91%D1%80%D1%82%D0%BA%D0%B0_%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0).

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_reduce_filter.py

set_tag_before, set_tag_after

Маркировка запроса тегом (добавление тега в список $context.tags).

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_set_tag_filter.py

set_value_before, set_value_after

Установка значения одного ключа.

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_set_value.py

split_before, split_after

Разбор входного значения-строки по разделителю с записью полученных значений в различные ключи. См. также фильтр match.

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_split_filter.py

Специальные фильтры

encode_dhcp_options

...

_after

...

Преобразование DHCP-опций в двоичный формат в соответствии с RFC 2132. Требуется дополнительная настройка hard.pm. Аналог фильтра второй версии агента.

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_encode_dhcp_options.py

render_reply

...

_after

Выбор шаблона и формирование по нему ответа на запрос. Позволяет формировать ответ отложенно, после выполнения некоторых after-фильтров. Пример — конфигурация агента для второй версии портала авторизации (ramtel-rad).

reject_on_error

...

Отправка Access-Reject при возникновении во время обработки запроса ошибки. Должен быть на вершине стека вызова (question)

Спецификации фильтров

В конфигурации любого настроенного фильтра, в секции specs, могут быть описаны его спецификации — примеры входных данных и результатов их обработки фильтром. Агент HARD при запуске тестирует все активные, то есть участвующие хотя бы в одном стэке обработки запросов, фильтры, для которых задана спецификация. На вход фильтра подаются данные, указанные в секции input спецификации, а результат обработки сравнивается с заданным в секции expected. Если обнаруживается несоответствие, генерируется ошибка с указанием наименования проблемной спецификации (ключ name) и отличий вывода фильтра от ожидаемого значения. Запуск агента при возникновении ошибки прекращается.

...

Если в таком фильтре, в ключе condition, заменить оператор != на, к примеру, на ==, то фильтр не изменит входных данные и возникнет входные данные — результат работы фильтра не совпадёт с ожидаемым и будет сгенерирована ошибка:

Code Block
25.11.2016 18:01:17.291 13384/Worker#1   MainThread ERROR    Failed filter spec "fix_duplicate_acct-session-id_attribute" with diff
--- a
+++ b
{
 'RAD_REQUEST': {
 -'Acct-Session-Id': ['5746ECB0-00000027', '5746ECB0-00000027'],
 +'Acct-Session-Id': '5746ECB0-00000027',
 },
}