Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Запись статистики, Asterisk, ведет автоматически, если загружен модуль cdr_csv.so, статистика ведется по умолчанию. Этой статистики в принципе достаточно, но работать не удобно. Удобней всего обрабатывать статистику хранящуюся в базе.


Новые статьи на сайте:

 

Hilik     Настроим все

 http://www.hilik.org.ua/

 

Asterisk. Статистика звонков в MySQL.

Запись статистики, Asterisk, ведет автоматически, если загружен модуль cdr_csv.so, статистика ведется по умолчанию в /var/log/asterisk/cdr-csv/Master.csv. Этой статистики в принципе достаточно, но работать не удобно. Удобней всего обрабатывать статистику хранящуюся в базе. Для того, что бы статистика писалась в MySQL нужно установить из портов:

cd /usr/ports/net/asterisk-addons/
make install clean


В начале появится конфигурационный диалог с одним пунктом:


Options for asterisk-addons 1.4.6_4

[X] SAMPLE_CONFIG Install sample configuration files



[ OK ] Cancel

Выбираем этот пункт, он позволяет разместить примеры конфигурационных файлов. А примеры нам пригодятся и ждем когда соберется модуль.
Естественно, у вас уже должен быть сервер 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:

[global]
hostname=localhost
dbname=asterisk
table=cdr
password=asterisk-777
user=asterisk
sock=/tmp/mysql.sock
userfield=1

И загрузить модуль в астериск. Для этого подключимся к работающем астериску и загрузим модуль:

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 при обработке звонка:

[dialout]
exten => _8.,1,MYSQL(Connect connid localhost asterisk asterisk-777 asterisk)
exten => _8.,2,Dial(SIP/prov1/${EXTEN})
 
exten => h,1,MYSQL(Disconnect ${connid})

Последняя строка MYSQL(Disconnect ${connid}) – обязательна, задается она в extention h. h – это обработчик вызываемый при hangup, то есть когда разрывается канал связи, а попросту когда одна из сторон ложит трубку.

На этом настройка закончена. Статистика будет писаться и считать ее, можно так, допусти сколько назвонил абонент 333 на 8-ку:

select sum(billsec) from cdr where src='333'
and dst like '8%';

Ну в общем тут можно много разных вариантов придумать. Можно использовать ограничение времени calldate, работать с разными направлениями и т.д. и т.п. в общем насколько знаний SQL хватит.

 

 Буду рад комментариям, постараюсь ответить на вопросы. Заходите на сайт http://www.hilik.org.ua/
 


В избранное