Создание файла с правилами#
В разделе приводится описание параметров для создания файла с правилами, описывающего, каким образом заполнять файл шаблона (возможные значения файла шаблона указаны в разделе «Настройка постобработчика», в описании параметра pattern_file).
rules - параметры#
Название |
Обязательность |
Описание |
Возможные значения |
Значение по умолчанию |
|---|---|---|---|---|
|
Обязательный (если |
Последовательность условий для проверки |
Параметры, описанные в разделе «rules - condition» |
— |
|
Опциональный |
Возвращаемый код состояния http или переменная nginx, которая его содержит |
Текстовое значение |
— |
|
Опциональный |
Приоритет условия. В случае, если совпадают два условия (condition) с одинаковым количеством анализируемых сообщений, то выбирается условие с большим приоритетом. Обязательно требуется указание приоритета для условий с одинаковым количеством анализируемых сообщений |
Текстовое значение |
Условия с наибольшим количеством переменных |
|
Опциональный |
Состояние, которое будет выполняться, если ни одно из условий (condition) не выполнено. Наличие одного дефолтного условия обязательно в конфигурации |
|
— |
|
Обязательный (если |
Шаблон ответа (или файл с шаблоном ответа, если указан путь к файлу «file: //…») |
Текстовое значение |
— |
|
Обязательный (если |
URL перенаправления. Допускается использование переменных Nginx |
Текстовое значение |
— |
|
Опциональный |
Последовательность замен подсказок в шаблоне |
Параметры, описанные в разделе «rules - replacements» |
— |
|
Опциональный |
Последовательность имя/значение, которая будет добавлена к заголовкам ответа |
Параметры, описанные в разделе «rules - headers» |
— |
|
Опциональный |
Флаг, если необходимо «пропустить» правило «по умолчанию» |
|
— |
rules - condition#
Название |
Обязательность |
Описание |
Возможные значения |
Значение по умолчанию |
|---|---|---|---|---|
|
Обязательный |
Анализируемая переменная. Примеры: |
Текстовое значение |
— |
|
Обязательный |
Операнд сравнения. Для строк: равенство, неравенство или регулярное выражение. Для чисел: стандартные операторы сравнения |
|
— |
|
Обязательный |
Ожидаемое значение анализируемой переменной. Для оператора |
Текстовое значение |
— |
rules - replacements#
Название |
Обязательность |
Описание |
Возможные значения |
Значение по умолчанию |
|---|---|---|---|---|
|
Обязательный |
Имя любой подсказки из шаблона |
Текстовое значение |
— |
|
Обязательный |
Значение подсказки |
Текстовое значение |
— |
rules - headers#
Название |
Обязательность |
Описание |
Возможные значения |
Значение по умолчанию |
|---|---|---|---|---|
|
Обязательный |
Имя заголовка |
Текстовое значение |
— |
|
Обязательный |
Значение заголовка (может содержать переменные) |
Текстовое значение |
— |
Пример:
rules:
- condition:
- var: $validation_error_code
operator: "="
val: 1
replacements:
- pattern: errorCode
val: 101
- pattern: errorMessage
val: "Could't load schema from file"
priority: 1
status: 500
- condition:
- var: $validation_error_code
operator: "="
val: 2
- var: $mq_status_code
operator: "in"
val: 2131,2141,2151
replacements:
- pattern: errorCode
val: 102
- pattern: errorMessage
val: "Could't connect to IBMMQ"
priority: 2
status: 500
- default: True
replacements:
- pattern: errorCode
val: 100
- pattern: errorMessage
val: "Unknown error"
status: 503
Пример файла с правилами для версии дистрибутива 2.1 и выше, в котором присутствует поддержка chains:
rules:
- condition:
- var: clj_validation_error_code
operator: ">"
val: 0
- var: clj_processing_phase
operator: "="
val: "REQUEST"
replacements:
- pattern: errorCode_variable
val: "CODE-41"
- pattern: errorText_variable
val: "Ошибка валидации запроса"
status: 500
priority: 49
- condition:
- var: clj_validation_error_code
operator: ">"
val: 0
- var: clj_processing_phase
operator: "="
val: "RESPONSE"
replacements:
- pattern: errorCode_variable
val: "CODE-42"
- pattern: errorText_variable
val: "Ошибка валидации ответа"
priority: 50
status: 500
- condition:
- var: completion_code
operator: ">"
val: 0
replacements:
- pattern: errorCode_variable
val: "CODE-61"
- pattern: errorText_variable
val: "Системная ошибка при работе с менеджером очередей"
- condition:
- var: msc_disruptive
operator: ">"
val: 0
- var: msc_tags
operator: "~"
val: "SQLi"
replacements:
- pattern: errorCode_variable
val: "CODE-90"
- pattern: errorText_variable
val: "Ошибка наличия SQL-Injection"
priority: 51
- condition:
- var: status
operator: "="
val: 404
replacements:
- pattern: errorCode_variable
val: "CODE-101"
- pattern: errorText_variable
val: "Не найден маршрут"
- condition:
- var: upstream_response_state
operator: "~"
val: "(4[0-9]{2}|50[03])"
- var: status
operator: ">="
val: 0
replacements:
- pattern: errorCode_variable
val: "CODE-154"
- pattern: errorText_variable
val: "Некорректный ответ от внешнего сервиса"
status: $upstream_response_state
priority: 154
- condition:
- var: upstream_status
operator: "~"
val: 502
- var: upstream_broken_connection
operator: "="
val: 1
replacements:
- pattern: errorCode_variable
val: "CODE-152"
- pattern: errorText_variable
val: "Обрыв HTTP сессии внешним сервисом до таймаута шлюза"
priority: 152
status: 500
- condition:
- var: upstream_status
operator: "~"
val: 504
replacements:
- pattern: errorCode_variable
val: "CODE-153"
- pattern: errorText_variable
val: "Не получили ответа от внешнего сервиса за указанный таймаут"
status: 500
- condition:
- var: clj_validation_error_code
operator: "="
val: 3
- var: clj_processing_phase
operator: "="
val: "RESPONSE"
replacements:
- pattern: errorCode_variable
val: "CODE-157"
- pattern: errorText_variable
val: "Ответ не является JSON"
priority: 57
status: 500
- condition:
- var: clj_validation_error_code
operator: "="
val: 3
- var: clj_processing_phase
operator: "="
val: "REQUEST"
replacements:
- pattern: errorCode_variable
val: "CODE-158"
- pattern: errorText_variable
val: "Запрос не является JSON"
priority: 58
status: 500
- condition:
- var: clj_validation_error_text
operator: "!="
val: ""
- var: clj_trimmed_body
operator: "!="
val: ""
- var: clj_processing_phase
operator: "="
val: "RESPONSE"
replacements:
- pattern: value
val: $clj_trimmed_body
# С помощью этого правила выставляется тело ответа, из которого были удалены дополнительные атрибуты
responsePattern: "{value}"
priority: 55
status: $upstream_status
- condition:
- var: clj_processing_phase
operator: "!="
val: ""
- var: clj_response_chain_result
operator: "in"
val: "ERROR,DENY"
replacements:
- pattern: errorCode_variable
val: "CODE-100"
- pattern: errorText_variable
val: "Неизвестная run-time ошибка"
priority: 2
status: 500
- condition:
- var: clj_processing_phase
operator: "!="
val: ""
- var: clj_request_chain_result
operator: "in"
val: "ERROR,DENY"
replacements:
- pattern: errorCode_variable
val: "CODE-100"
- pattern: errorText_variable
val: "Неизвестная run-time ошибка"
priority: 1
status: 500
- condition:
- var: status
operator: ">="
val: "400"
replacements:
- pattern: errorCode_variable
val: "CODE-100"
- pattern: errorText_variable
val: "Неизвестная run-time ошибка"
priority: 0
status: 500
# TODO: CODE1000
- default: True
replacements:
- pattern: errorCode_variable
val: "CODE-100"
- pattern: errorText_variable
val: "Неизвестная run-time ошибка"
status: 500
skipOnDefault: True