NAME

cdr2rad.pl - конвертер CDR.


DESCRIPTION

Конвертирует CDR записи звонков.


SYNOPSIS

Аргументы командной строки:

file
Имя входящего файла с CDR записями.

format
Регулярное выражение для разбора строки CDR.

f
Имена полей описаных в вушеприведенном формате ( `-format` ). Первая скобка == первый элемент -f, вторая == второй и тд...

md5_rpkt_re
Регулярное выражение для сопоставление вопроса\ответа радиус серверу. Используется с free-radius клиентом.

help
Краткая справка.

debug
Режим отладки. & 1 - выводим пропущенные номера из `-skip_num`, & 4 - пишем имена временных файлов и не удаляем их, & 8 - пишем в лог о всех корректировках времени.

src_ip
Имя `собственного` оборудования, используется при маршрутизации на основе шаблона своих номеров `-self_num`.

dst_ip
Имя `удаленного` оборудования, используется при маршрутизации на основе шаблона своих номеров `-self_num`.

nas_ip
Имя NAS сервера, по умолчанию == src_ip.

random_id
Генерировать `случайные` идентификаторы сессии. По умолчанию это равно md5 сумме строки CDR. Без уникальных id не проверяется статус отправки пакетов на радиус сервер.

self_num
Регулярное выражение для определения направления звонка по номеру назначения, все что подпадает под этот шаблон считаем своим оборудованием, и в зависимости нахождения self_num в dnum или snum иннициализируем SRC_IP и DST_IP...

То есть если:

 dnum =~ self_num и snum !~ self_num то SRC_IP = src_ip, DST_IP = dst_ip, ( исходящий )
 snum =~ self_num и dnum !~ self_num то DST_IP = src_ip, SRC_IP = dst_ip, ( входящий )
 dnum =~ self_num и snum =~ self_num то SRC_IP = src_ip, DST_IP = src_ip, ( внутренний )

skip_num
Регулярное выражение, все dnum под подающие под которое пропускаются. Сия благая идея предполагает наличие какого либо префикса при наличии которого АТС маршрутизирует звонок в IP сеть, и шлюз IP сети сам шлет запросы к радиусу...

=item dup_ok

Не ругаться на дублирующиеся записи. Работает только при проверке результата обработки, при отключенной опции '-no_check'

rad_port
Порт радиус сервера. Изначально по крайней мере так было. Сейчас номер порта ( или просто, что то ) что передается в для запуска внешней проге `-exe` в контейнере [% PORT %]

rad_host
Имя радиус сервера. Изначально по крайней мере так было. Сейчас адрес ( или просто, что то ) что передается в для запуска внешней проге `-exe` в контейнере [% HOST %]

rad_pswd
Пароль на радиус сервере. Изначально по крайней мере так было. Сейчас пароль ( или просто, что то ) что передается в для запуска внешней проге `-exe` в контейнере [% PSWD %]

no_check
Не проверять статус ответа радиус сервера.

p_pattern
Имя файла с шаблоном для конвертации CDR. По умолчанию начитывается из секции __DATA__ файла cdr2rad.pl

error_ext
Расширение файла с неотправленными CDR. Актуально только при отправке на радиус сервер и включенной проверке ответов.

conv_ext
Расширение файла, По умолчанию начитывается из секции __DATA__ файла cdr2rad.pl

error_ext
Расширение файла которое добавляется к обработанному файлу CDR.

pid
Директория для хранения PID файла.

route_table
Имя файла с таблицей маршрутизации.

config_file
Имя конфигурационного файла.

no_convert
Не конвертировать входящие\исходящие номера.

preprocess
Имя файла с набором процедур препроцессорной обработки CDR. ( должна быть описана процедура filter ). См. пример.

conv_table
Имя файла с таблицей конвертации номеров.

exe
Внешняя команда для обработки отконвертированных данных.

date_format
Формат даты, в котором отдается дата в контейнеры START_TIME, STOP_TIME

date_format_in
Входящий формат даты.

use_names
Использовать именованные CDR.

alias
Список альясов.

smart_date
Определение `разрывов` в дате, используется только при определении даты при наличии только одной даты ( или stop_date или start_date ) и времени начала и окончания звонка. При проверке времени используется предыдущий CDR.

rebuild
Пересборка CDR. Не расчитывать время и пр. Отдавать в шаблон только те параметры которые описаны в `-f' или, при использовании именнованных, их имена. То есть пользовалось изначально для изменения формаа именованных CDR.


NOTES

ФАЙЛ КОНФИГУРАЦИИ

Набор пар ( параметр значение ) разделенных `=`. В начале и конце `значения` допускаются кавычки.

 exe        = '/var/spool/onyma/bin/transport.sh [% IN_FILE %] [% CDR_FILE %]'
 no_check   = 1
 route_table= /var/spool/onyma/conf/route_ats.txt

ФАЙЛ РОУТИНГА

Описание маршрута. Формат примерно такой:

 ROUTE_NAME = f1=^pattern1$;f2=^pattern2$
 ROUTE2 =f4=pattern

Тоесть ROUTE_NAME, ROUTE2 - имена маршрутов. f1,f2,..fx - имена полей описанные в `-f` или в именованных параметрах -use_names, pattern - регулярные выражения для поиска соответствий.

Приоритет выбора маршрута - порядок следования в файле.

Пустые строки и строки начинающиеся на # - игнорируются.

ФАЙЛ ТАБЛИЦИ ПРЕОБРАЗОВАНИЯ НОМЕРОВ

Формат:

 исходный_номер => во_что_преобразовать.

Пример:

 # Нижегородские шести знаки
 ^([1-79][0-9]{5})$     => 78312${1}
 # Нижегородские областные
 ^82([0-9]{7})$         => 7831${1}
 # Федеральные 8
 ^8([0-9]{10})$         => 7${1}

ФАЙЛ ШАБЛОНА

Текстовый файл.

В шаблон передаются следующие контейнеры ( при выключеном параметре -rebuild ) :

SRC_IP
DST_IP
ROUTE_NAME
Имя маршрута определенное в соответствии с таблицей роутинга `-route_table`

USER_NAME
Не преобразованный номер звонящего.

DST_NUM
Номер назначения, после преобразования через таблицу преобразования номеров.

SRC_NUM
Номер звонящего, после преобразования через таблицу преобразования номеров.

DURATION
Продолжительность звонка в секундах.

START_TIME
Время начала звонка в формате `date_format`

START_TIME
Время завершения звонка в формате `date_format`

SESSION_ID
MD5 сумма CDR строки.

кромем того в шаблон также передаются ВСЕ контейнеры описанные в -f ( или именованные параметры ).

ВНЕШНИЕ ОБРАБОТЧИКИ

Формат вызова внешней программы ( -exe ):

Внутри разбираются следующие контейнеры

HOST
имя из rad_host

PORT
имя из rad_port

PSWD
пароль из rad_pswd

IN_FILE
файл со сгенерированными из шаблона данными

RESULT_FILE
файл в который кладем выхлоп программы

CDR_FILE
имя файла с CDR который обрабатываем

ОБЯЗАТЕЛЬНЫЕ ПОЛЯ В CDR

snum
номер звонящего.

dnum
номер назначения.

и дата в одном из приведенных диже комбинаций:

P.S.
при отсутствии одного из параметров stop_date или start_date они равны...

При возникновении ситуации в которой отсутствуют выше приведенные параметры ( разбор именованных CDR ), возможно воспользоваться alias'ами, тоесть если есть например такой CDR формат: `D-NUM=123,S-NUM=456,SETUP-TIME=12/12/06 12:12,ELAPSED-TIME=12`

то строка alias должна иметь сл.вид:

`D-NUM dnum S-NUM snum SETUP-TIME start_date_time ELAPSED-TIME duration`

ну и соответственно надо корректно определить date_format_in


AUTHOR

 Igor V. Okunev  mailto:igor@prv.mts-nn.ru
                 http://home.sinn.ru/~gosha
                 icq:106183300