Описание работы HMED-M

Демон HMED-M (Mediation) является ядром предбиллинга. Его задачей является обработка поступающих с коллектора разобранных CDR по заданным правилам.

Обработка происходит в процессоре по цепочке фильтров. После завершения обработки результат проверяется валидаторами.

Основные настройки

Помимо общих настроек доступны следующие параметры:

sources:
  amqp:
    mediation:
	  # входная очередь разобранных CDR
      # значение должно совпадать с выходной очередью HMED-C
      consumer: amqp/mediation

destinations:
  amqp:
    ocs:
      # выходная очередь обработанных CDR
      # обработанные CDR передаются в тарификатор (HOCS)
      producer: amqp/ocs
    error:
      # выходная очередь CDR, обработанных с ошибкой
      producer: amqp/error

handlers:
  default:
    destinations:
      # список выходных очередей
      - amqp/ocs
  error:
    destinations:
      # список выходных очередей для CDR, обработанных с ошибкой
      - amqp/error
 
constants:
  # константы, доступные для использования в спецификациях фильтров через переменную $consts
  number_length: 11
  routes: # константа может быть хэшем
    C26052: COMSTAR
    C26053: COMSTAR
  skip_trunks_b: # или массивом
    - C30052
    - C30055
    - C30056
 
workers:
  # список воркеров
  - processor: base/switch # воркер реализует процессор base со спецификацией switch

 

Настройка фильтров

 

Настройка процессоров

processors:
  base:
    # спецификация процессора
    switch:
      # валидатор (тип/спецификация)
      validator: base/main
      # цепочка фильтров
      filters:
        - skip/if_duration_is_0 # тип/спецификация
        - set/short_trunk_a_name
        - set/full_trunk_a_name
        - set/route_a_by_trunk_a
        - replace/dash_in_station_a_with_zeros
        - if/station_a_length_is_7
        - prepend/pl_922_station_a_with_7499
        # в скобках передаются аргументы, доступные в фильтре через переменную $args
		# $args[1] - первый аргумент, $args[2] - второй и т.д.
        - prepend/station_a_with('7495')
        - prepend/station_a_with('7')
        - replace/leading_string_in_station_a('8495', '7495')
        - replace/cut_international_prefix_in_station_b
		  ...
      map:
		# поля выходной CDR, формируемой после обработки
		# эти поля проверяются валидатором
        trunk_a: $cdr.trunk_a
        trunk_b: $cdr.trunk_b
        route_a: $cdr.route_a
        route_b: $cdr.route_b
        station_a: $cdr.station_a
        station_b: $cdr.station_b
        duration_sec: $cdr.duration_sec
        termination_code: $cdr.termination_code
        call_begin: $cdr.call_datetime
        service_code: "'M200'"

Настройка валидации

validators:
  base:
	# спецификация валидатора
    main:
      fields:
        call_begin: # проверяемое поле
          type: float # тип значения (integer - целое число, float - десятичная дробь, string - строка)
          required: true # признак обязательности присутствия поля в CDR
        station_a:
          type: string
          required: true
          length: # проверка длины строки
            min: 11
            max: 15
        service_code:
          type: string
          required: true
          value: M200 # проверка значения (только для строк)
        ...