Запись статистики, Asterisk, ведет автоматически, если загружен модуль cdr_csv.so, статистика ведется по умолчанию. Этой статистики в принципе достаточно, но работать не удобно. Удобней всего обрабатывать статистику хранящуюся в базе.
Запись статистики, Asterisk, ведет автоматически, если загружен
модуль cdr_csv.so, статистика ведется по умолчанию в
/var/log/asterisk/cdr-csv/Master.csv. Этой статистики в принципе
достаточно, но работать не удобно. Удобней всего обрабатывать
статистику хранящуюся в базе. Для того, что бы статистика писалась в
MySQL нужно установить из портов:
Выбираем этот пункт, он позволяет разместить примеры
конфигурационных файлов. А примеры нам пригодятся и ждем когда
соберется модуль.
Естественно, у вас уже должен быть сервер MySQL, клиента при сборке порт вытащит по депендам.
После того, как все оберется приступаем к настройке.
В первую очередь создадим базу asterisk в MySQL и пользователя asterisk
с паролем asterisk-123. Для этого подключаемся к MySQL и выполняем
такие команды:
mysql -uroot create database asterisk; grant all on asterisk.* to 'asterisk'@'localhost' identified by 'asterisk-777';
и теперь создадим таблицу в которой будем хранить информацию:
USE asterisk;
CREATE TABLE `cdr`( `calldate`
datetime NOT NULL default '0000-00-00 00:00:00', `clid` varchar(80) NOT NULL default '', `src` varchar(80) NOT NULL default '', `dst` varchar(80) NOT NULL default '', `dcontext` varchar(80) NOT NULL default '', `channel` varchar(80) NOT NULL default '', `dstchannel` varchar(80) NOT NULL default '', `lastapp` varchar(80) NOT NULL default '', `lastdata` varchar(80) NOT NULL default '', `duration` int(11) NOT NULL default '0', `billsec` int(11) NOT NULL default '0', `disposition` varchar(45) NOT NULL default '', `amaflags` int(11) NOT NULL default '0', `accountcode` varchar(20) NOT NULL default '', `userfield` varchar(255) NOT NULL default '' );
Как вы можете заметить приведенная таблица совсем без индексов.
Почему? Да все очень просто, индексы при каждой вставке новой записи
пересчитываются, это замедляет работу с базой. При большой
интенсивности звонков это может негативно отразится на работе. Если для
вас скорость построения отчета более важна(работа select, выборка
статистики), можно добавить индексы.
create index cld_idx on cdr(calldate); create index src_idx on cdr(src); create index dst_idx on cdr(dst); create index acc_idx on cdr(accountcode);
Теперь настроим подключение к MySQL, для этого внесем в файл
/usr/local/etc/asterisk/cdr_mysql.conf настройки на наш аккаунт MySQL:
И загрузить модуль в астериск. Для этого подключимся к работающем астериску и загрузим модуль:
asterisk -r load cdr_addon_mysql.so
Asterisk должен написать что то типа такого:
The 'load'command is deprecated and will be removed in a future release. Please use 'module load' instead. == Parsing '/usr/local/etc/asterisk/cdr_mysql.conf':
Found Loaded cdr_addon_mysql.so =>(MySQL CDR Backend)
Но это еще не все. Модуль будет болтаться в памяти, а статистика
вестись не будет. Нужно вызвать подключение MySQL, делается это в
extentions.conf при обработке звонка:
Последняя строка MYSQL(Disconnect ${connid}) – обязательна, задается
она в extention h. h – это обработчик вызываемый при hangup, то есть
когда разрывается канал связи, а попросту когда одна из сторон ложит
трубку.
На этом настройка закончена. Статистика будет писаться и считать ее, можно так, допусти сколько назвонил абонент 333 на 8-ку:
selectsum(billsec) from cdr where src='333'
and dst like '8%';
Ну в общем тут можно много разных вариантов придумать. Можно
использовать ограничение времени calldate, работать с разными
направлениями и т.д. и т.п. в общем насколько знаний SQL хватит.
Буду рад комментариям, постараюсь ответить на вопросы. Заходите на сайт http://www.hilik.org.ua/