Описание работы 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
 
workers:
  # список воркеров
  - processor: base/switch # воркер реализует процессор base со спецификацией switch

 

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

 

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

processors:
  # тип процессора
  base:
    # спецификация
    switch:
      # валидатор (тип/спецификация)
      validator: base/main
 # цепочка фильтров
      filters:
        - skip/if_duration_is_0 # тип/спецификация
        # routes & trunks
        - set/short_trunk_a_name
        - set/full_trunk_a_name
        - set/route_a_by_trunk_a
		  ...
        # station B
        - 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')
		  ...
        # station A
        - replace/cut_international_prefix_in_station_b
        - prepend/station_b_with('7')
		  ...
      map:
        call_begin: time.mktime(datetime.datetime.strptime($cdr.call_datetime, '%d-%m-%y %H:%M:%S').timetuple())
        service_code: "'M200'"

 

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