Описание работы HMED-M
Демон HMED-M (Mediation) является ядром предбиллинга. Его задачей является обработка поступающих с коллектора разобранных CDR по заданным правилам.
Обработка происходит в процессоре по цепочке фильтров. После завершения обработки результат проверяется валидаторами.
Основные настройки
Помимо общих настроек доступны следующие параметры:
conf/local/mediation/default.yml
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
Настройка фильтров
Настройка процессоров
conf/local/mediation/default.yml
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'"
Настройка валидации
conf/local/mediation/default.yml
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 # проверка значения (только для строк) ...