...
Info |
---|
Если ключа, значение которого формирует фильтр, нет, он будет добавлен. Если ключ уже существует, его значение будет заменено новым. |
Спецификации фильтров
В конфигурации любого настроенного фильтра, в секции specs
, могут быть описаны его спецификации — примеры входных данных и результатов их обработки фильтром. Агент HARD при запуске тестирует все активные, то есть участвующие хотя бы в одном стэке обработки запросов, фильтры, для которых задана спецификация. На вход фильтра подаются данные, указанные в секции input
спецификации, а результат обработки сравнивается с заданным в секции expected
. Если обнаруживается несоответствие, генерируется ошибка с указанием наименования проблемной спецификации (ключ name
) и отличий вывода фильтра от ожидаемого значения. Запуск агента при возникновении ошибки прекращается.
Code Block |
---|
title | Пример спецификации фильтра |
---|
|
plugins:
filters:
set_value_before:
fix_duplicated_acct-session-id_attribute:
condition: ' $context.has_tag?("accounting")
and $request.RAD_REQUEST.try("Acct-Session-Id", "").to_s() != $request.RAD_REQUEST.try("Acct-Session-Id", "")'
destination: $request.RAD_REQUEST.Acct-Session-Id
value_expression: $request.RAD_REQUEST.Acct-Session-Id[0]
specs:
- name: fix_duplicated_acct-session-id_attribute
input:
tags: [accounting]
request:
RAD_REQUEST:
Acct-Session-Id:
- '5746ECB0-00000027'
- '5746ECB0-00000027'
expected:
tags: [accounting]
request:
RAD_REQUEST:
Acct-Session-Id: '5746ECB0-00000027'
- name: pass_through_correct_acct-session-id_attribute
input:
tags: [accounting]
request:
RAD_REQUEST:
Acct-Session-Id: '5746ECB0-00000027'
expected:
tags: [accounting]
request:
RAD_REQUEST:
Acct-Session-Id: '5746ECB0-00000027' |
Если в таком фильтре, в ключе 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',
},
} |
Универсальные фильтры
case_before, case_after
...
Code Block |
---|
title | Пример указания фильтра reject_on_error/main в стэке обработки запроса |
---|
collapse | true |
---|
|
plugins:
base:
dhcp-ip-private:
call_stack:
# Стандартные фильтры
- reject_on_error/main
- set_tag_before/request_type
# Для DHCP-relay D-Link нужны особые параметры - маркируем запрос
- set_tag_before/dlink_dhcp-relay
# Добавление MS-атрибута с маршрутами
- set_value_after/add_dhcp-ms-classless-static-route_attr
# Заполнение атрибута с маршрутами
- reduce_after/fill_dhcp-classless-static-route_attr
# Добавление в ответ порта для D-Link или IP сервера для остальных
- case_after/add_dst-port_for_dlink-relays_or_server-ip_for_others |
Спецификации фильтров
В конфигурации любого настроенного фильтра, в секции specs
, могут быть описаны его спецификации — примеры входных данных и результатов их обработки фильтром. Агент HARD при запуске тестирует все активные, то есть участвующие хотя бы в одном стэке обработки запросов, фильтры, для которых задана спецификация. На вход фильтра подаются данные, указанные в секции input
спецификации, а результат обработки сравнивается с заданным в секции expected
. Если обнаруживается несоответствие, генерируется ошибка с указанием наименования проблемной спецификации (ключ name
) и отличий вывода фильтра от ожидаемого значения. Запуск агента при возникновении ошибки прекращается.
Code Block |
---|
title | Пример спецификации фильтра |
---|
|
plugins:
filters:
set_value_before:
fix_duplicated_acct-session-id_attribute:
condition: ' $context.has_tag?("accounting")
and $request.RAD_REQUEST.try("Acct-Session-Id", "").to_s() != $request.RAD_REQUEST.try("Acct-Session-Id", "")'
destination: $request.RAD_REQUEST.Acct-Session-Id
value_expression: $request.RAD_REQUEST.Acct-Session-Id[0]
specs:
- name: fix_duplicated_acct-session-id_attribute
input:
tags: [accounting]
request:
RAD_REQUEST:
Acct-Session-Id:
- '5746ECB0-00000027'
- '5746ECB0-00000027'
expected:
tags: [accounting]
request:
RAD_REQUEST:
Acct-Session-Id: '5746ECB0-00000027'
- name: pass_through_correct_acct-session-id_attribute
input:
tags: [accounting]
request:
RAD_REQUEST:
Acct-Session-Id: '5746ECB0-00000027'
expected:
tags: [accounting]
request:
RAD_REQUEST:
Acct-Session-Id: '5746ECB0-00000027' |
Если в таком фильтре, в ключе 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',
},
} |