Коллектор HMED-C занимается сбором и парсингом CDR для последующей передачи их на обработку в ядро предбиллинга.

Настройка сбора CDR из файлов

Предположим, АТС настроена таким образом, что сохраняет CDR в файлах с именем в формате cdr_12345.log в директории /tmp/cdr.

В таком случае коллектор нужно настроить следующим образом:

collectors:
  file:
    switch:
      paths:
        - directory: /tmp/cdr/ # путь к файлам с CDR
          filename_pattern: ^cdr_\d+\.log$ # регулярное выражение, соответствующее формату имени файлов с CDR

Для того, чтобы CDR собирались из нескольких директорий или по разным шаблонам имен файлов, в секции paths задается несколько спецификаций.

Коллектор реагирует на событие create файловой системы, таким образом обработка файла с CDR начинается немедленно после его создания.

Настройка парсинга CDR

parsers:
  plain:
    switch_2:
      cdr_delimiter: "\n" # разделитель между CDR в файле (новая строка)
      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

Доступны следующие предобработчики: