cdr2rad.pl - конвертер CDR.
Конвертирует CDR записи звонков.
Аргументы командной строки:
- 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.
Набор пар ( параметр значение ) разделенных `=`. В начале и конце `значения` допускаются кавычки.
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 который обрабатываем
- snum
-
номер звонящего.
- dnum
-
номер назначения.
и дата в одном из приведенных диже комбинаций:
duration + stop_date, stop_date_day, stop_date_mon, stop_date_year, stop_time, stop_time_hour, stop_time_min, stop_time_sec
duration + start_date, start_date_day, start_date_mon, start_date_year, start_time, start_time_hour, start_time_min, start_time_sec
stop_date, stop_date_day, stop_date_mon, stop_date_year, stop_time, stop_time_hour, stop_time_min, stop_time_sec
+
start_date, start_date_day, start_date_mon, start_date_year, start_time, start_time_hour, start_time_min, start_time_sec
при наличии модуля POSIX::strptime, ( stop_date_time || start_date_time ) && duration.
| 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
Igor V. Okunev mailto:igor@prv.mts-nn.ru
http://home.sinn.ru/~gosha
icq:106183300