Описание работы HMED-C
HMED-C (Collector) занимается сбором и парсингом CDR для последующей передачи их на обработку в ядро предбиллинга (HMED-M).
Обработка проходит несколько этапов:
- Получение CDR – производится с помощью коллекторов. Для одного типа коллектора можно задать несколько спецификаций. Каждая спецификация коллектора связана с парсером для передачи ему на разбор полученных CDR;
- Парсинг CDR – проивзодится парсерами. Для одного типа парсера можно задать несколько спецификаций;
- Отправка обработанной CDR в выходную очередь, которая является входной для HMED-M. Имеется возможность задать несколько выходных очередей. В случае, если CDR была разобрана с ошибкой, она отправляется в отдельные выходные очереди.
Основные настройки
Помимо общих настроек доступны следующие параметры:
# настройки точек назначения обработанных CDR destinations: amqp: mediation: # выходная обработанных CDR во входную очередь HMED-M # значение должно совпадать со значением настройки sources.amqp.mediation.consumer в конфигурации HMED-M producer: amqp/mediation error: # выходная очередь CDR, обработанных с ошибкой producer: amqp/error handlers: default: destinations: # список выходных очередей CDR - amqp/mediation error: destinations: # список выходных очередей CDR, обработанных с ошибкой - amqp/error workers: - collector: file/switch # файловый коллектор со спецификацией switch; можно задать несколько разных коллекторов
Настройка сбора CDR из файлов
Предположим, CDR, поступающие с АТС, сохраняются в файлы с именем в формате cdr_12345.log в директории /tmp/cdr.
В таком случае коллектор нужно настроить следующим образом:
collectors: # файловые коллекторы file: # спецификация коллектора switch: # спецификация парсера для разбора прочитанных CDR parser: plain/switch_2 # спецификации путей к файлам CDR paths: - directory: /tmp/cdr/ # путь к файлам с CDR filename_pattern: ^cdr_\d+\.log$ # регулярное выражение, соответствующее формату имени файлов с CDR
Для того, чтобы CDR собирались из нескольких директорий или по разным шаблонам имен файлов, в секции paths задается несколько спецификаций.
Коллектор реагирует на событие create файловой системы, таким образом обработка файла с CDR начинается немедленно после его создания.
Настройка парсинга CDR
Допустим, файл с CDR будет имеет следующий вид:
Каждая CDR начинается с новой строки и содержит поля: транк А, номер А, транк Б, номер Б, дата и время звонка, кол-во секунд и код статуса.
Для разбора файла такого вида используются следующие параметры конфигурации:
parsers: plain: # спецификация парсера switch_2: # разделитель между CDR в файле (символ новой строки) cdr_delimiter: "\n" preprocessors: # предобработчики строки перед разбором - type: substring begin: 1 end: -1 records: - matcher: # регулярное выражение для разбора CDR на поля # 1 2 3 4 5 6 7 # trk_a station_a trk_b station_b day month year hour minute second dur status pattern: ^(\w+) (\d+|-)[^\s]* (\w+) (\d+)[^\s]* (\d{2}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (\d+) (\d+)$ fields: map: # соответствие полей CDR и строки, разобранной регулярным выражением # первое поле $g1, второе $g2 и т.д. trunk_a: $g1 station_a: $g2 trunk_b: $g3 station_b: $g4 call_datetime: $g5 duration_sec: int($g6) # приведение к целому числу termination_code: $g7
Таким образом на выходе коллектора получатся разобранные CDR в формате JSON вида:
Предобработчики
В секции preprocessors доступны следующие предобработчики:
- substring – взятие подстроки
Параметры:- begin – начальная позиция;
- end – конечная позиция (-1 – до конца строки);
- trim – обрезание пробельных символов с краев строки
Параметры:- direction – край строки (left – левый, right – правый).