Создание файла с правилами#

В разделе приводится описание параметров для создания файла с правилами, описывающего, каким образом заполнять файл шаблона (возможные значения файла шаблона указаны в разделе «Настройка постобработчика», в описании параметра pattern_file).

Обязательные параметры:

  • rules

    Тип параметра: последовательность параметров и их значения.

    По умолчанию: не имеет значения по умолчанию.

    Опциональные параметры:

    • condition

      Обязательно в случае:

      • default is None;

      • default: false.

      Тип параметра: последовательность параметров и их значения.

      По умолчанию: не имеет значения по умолчанию.

      Обязательные параметры:

      • var

        В значении параметра указывается анализируемая переменная.

        - var: $validation_error_code
          ...
        - var: $mq_status_code
          ...
        

        Тип параметра: текстовое значение.

        По умолчанию: не имеет значения по умолчанию.

      • operator

        В значении параметра указывается операнд сравнения.

        Для строк: равенство, неравенство или регулярное выражение.

        Для чисел: стандартные операторы сравнения.

        Существуют простые операторы вхождения:

        • in;

        • not in.

        Тип параметра: текстовое значение:

        • «=» — посимвольное равенство;

        • «!=» — посимвольное неравенство;

        • «<=» — меньше или равно, только для числовых значений;

        • «>=» — больше или равно, только для числовых значений;

        • «>» — больше, только для числовых значений;

        • «<» — меньше, только для числовых значений;

        • «in» — вхождение в перечисление, элементы задаются через запятую, сравнение с элементами посимвольное;

        • «not_in» — отсутствие вхождения в перечисление, элементы задаются через запятую, сравнение с элементами посимвольное;

        • «~» — регулярное выражение с учетом регистра;

        • «~*» — регулярное выражение без учета регистра;

        • «!~» — негативное регулярное выражение с учетом регистра;

        • «!~*» — негативное регулярное выражение без учета регистра.

        По умолчанию: не имеет значения по умолчанию.

      • val

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

        - var: $validation_error_code
          operator: "="
          val:  2
        - var: $mq_status_code
          operator: "in"
          val:  2131,2141,2151
        

        Тип параметра: текстовое значение.

        По умолчанию: не имеет значения по умолчанию.

      • headers

        Задает последовательность имя/значение, которая будет добавлена к заголовкам ответа.

        Тип параметра: последовательность параметров и их значения.

        • name

          Имя заголовка.

          Тип параметра: текстовое значение.

        • value

          Значение заголовка (может содержать переменные).

          Тип параметра: текстовое значение.

      • replacements

      Тип параметра: последовательность параметров и их значения.

      По умолчанию: не имеет значения по умолчанию.

      Обязательные параметры:

      • pattern

        В значении параметра задается имя любой подсказки из шаблона.

        pattern: errorCode
        

        Тип параметра: текстовое значение.

        По умолчанию: не имеет значения по умолчанию.

      • val

        В значении параметра определяется значение подсказки.

        Тип параметра: текстовое значение.

        По умолчанию: не имеет значения по умолчанию.

      Пример:

      replacements:
        - pattern: errorCode
          val: 101  
        - pattern: errorMessage
          val: "Could't load schema from file"
      
    • status

      В значении параметра указывается возвращаемый код состояния http или переменная nginx, которая его содержит.

      status: 500
      

      Тип параметра: текстовое значение.

      По умолчанию: не имеет значения по умолчанию.

    • priority

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

      В случае, если совпадают два условия (condition) с одинаковым количеством анализируемых сообщений, то выбирается условие с большим приоритетом.

      Обязательно требуется указание приоритета для условий с одинаковым количеством анализируемых сообщений (в противном случае, условия будут вызываться случайным образом).

      ...
      priority: 1
      ...
      priority: 2
      ...
      - default: true
        ...
      

      Тип параметра: текстовое значение.

      По умолчанию: по умолчанию приоритет имеют условия (conditions) с наибольшим количеством переменных.

    • default

      В значении параметра указывается состояние, которое будет выполняться, если ни одно из условий (condition) не выполнено.

      Наличие одного дефолтного условия обязательно в конфигурации.

      - default: true
        replacements:
          - pattern: errorCode
            val:     100  
          - pattern: errorMessage
            val:     "Unknown error"
      

      Тип параметра:

      • true;

      • false.

      По умолчанию: не имеет значения по умолчанию.

    • responsePattern

      В значении параметра определяется шаблон ответа (или файл с шаблоном ответа, если указан путь к файлу «file: //…»).

      Обязательно в случае:

      • redirectUrl is None.

      Тип параметра: текстовое значение.

      По умолчанию: не имеет значения по умолчанию.

    • redirectUrl

      В значении параметра указывается url перенаправления.

      Обязательно в случае:

      • responsePattern is None.

      Тип параметра: текстовое значение. Допускается использование переменных Nginx.

      По умолчанию: не имеет значения по умолчанию.

    • headers

      Задает последовательность имя/значение, которая будет добавлена в заголовки ответа.

      • name

        Имя заголовка.

        Тип параметра: текстовое значение.

      • value

      Значение заголовка.

      Тип параметра: текстовое значение.

  • (deprecated)skipOnDefault

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

    Тип параметра: логическое значение:

    • true;

    • false.

    По умолчанию: не имеет значения по умолчанию.

Пример:

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