Asterisk: смотрим статистику звонков через Интернет
- ОС: FreeBSD
- ПО: Asterisk 1.8
- Цель: веб-статистика звонков Asterisk
Предположим, что у вас имеется установленный и настроенный Asterisk версии 1.8, а также СУБД MySQL и Apache 2. Это означает, что уже из коробки Asterisk способен писать логи в MySQL (т.е. никаких asterisk-addons ставить не нужно). А дальше нам просто нужна веб-морда, которая бы показывала данные логов пользователю.
Порядок действий
- Устанавливаем порт /usr/ports/www/asterisk-stat либо берем исходники.
- Распаковываем в папку веб-директории, предположим, это будет папка на сервере /var/www/asteriskstat
- Создаем таблицу, которая будет хранить статистику (посмотреть код создания БД и таблиц можно в файле /usr/local/etc/asterisk/cdr_mysql.tbl, код ниже м.б. устарел):
# mysql -p > CREATE DATABASE asterisk; GRANT INSERT ON asterisk.* TO asterisk@localhost IDENTIFIED BY 'yourpassword'; 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 '' ); ALTER TABLE `cdr` ADD `uniqueid` VARCHAR(32) NOT NULL default ''; ALTER TABLE `cdr` ADD INDEX ( `calldate` ); ALTER TABLE `cdr` ADD INDEX ( `dst` ); ALTER TABLE `cdr` ADD INDEX ( `accountcode` );
Теперь создаем пользователя для доступа к созданной БД:
mysql> grant LOCK TABLES on asterisk.* to 'asterisk_user'@'localhost' identified by 'pass'; Query OK, 0 rows affected (0.00 sec) mysql> grant SELECT on asterisk.* to 'asterisk_user'@'localhost' identified by 'pass'; Query OK, 0 rows affected (0.02 sec) mysql> grant INSERT on asterisk.* to 'asterisk_user'@'localhost' identified by 'pass'; mysql> flush privileges;
Обращаем внимание, что пользователю дается только право на чтение данных.
- правим файл /usr/local/etc/asterisk/cdr_mysql.conf. Нам нужно правильно прописать параметры к только что созданной базе данных:
hostname=localhost dbname=asterisk table=cdr password=pass user=asterisk_user port=3306
Выполняем перезапуск asterisk. Делаем контрольный звонок, проверяем, что, данные по звонкам пишутся в MySQL БД asterisk.
- также мы должны внести соответствующие коррективы в файлы asterisk-stat (исходники asterisk-stat распаковали в /var/www/asteriskstat). Для начала файл ./lib/defines.php:
define ("WEBROOT", "http://IP адрес вашего сервера/asterisk-stat/"); define ("FSROOT", "/var/www/asteriskstat/"); ... define ("HOST", "localhost"); define ("PORT", "3306"); define ("USER", "asterisk_user"); define ("PASS", "pass"); define ("DBNAME", "asterisk"); define ("DB_TYPE", "mysql");
Теперь файл ./lib/DB-modules/phplib_mysql.php:
var $Host = "localhost"; var $Database = "asterisk"; var $User = "asterisk_user"; var $Password = "pass";
- теперь вносим корректировки в Apache - правим файл httpd.conf:
Alias /asterisk-stat "/var/www/asteriskstat/" <Directory "/var/www/asteriskstat/"> Options none AuthName "Asterisk access" AuthType Basic AuthUserFile /usr/local/etc/apache22/authasteriskstat Require valid-user AllowOverride Limit Order Deny,Allow Allow from all DirectoryIndex cdr.php </Directory>
Строки
AuthName "Asterisk access" AuthType Basic AuthUserFile /usr/local/etc/apache22/authasteriskstat Require valid-user
закрывают доступ к статистике простой аутентификацией пользователя по логину/паролю. Если это не нужно, убираем строки. Чтобы создать файл аутентификации, выполняем команду:
htpasswd -c /usr/local/etc/apache22/authasteriskstat <имя пользователя>
Выполняем перезапуск Apache.
- выполняем вход в www-консоль статистики: http://localhost/asteriskstat.
- На всех этапах настройки смотрим логи asterisk (/var/log/asterisk/messages), apache (/var/log/httpd-error.log) и если нужно MySQL.
Исправление ошибок
1. Ошибка при экспорте в PDF:
Parse error: parse error, unexpected T_STRING in export_pdf.php on line 120
Решение:
- во-первых, ставим /usr/ports/print/fpdf
- во-вторых, в файле asteriskstat/export_pdf.php в пятой строке заменяем одинарную кавычку (') на двойную («), чтобы получилось в итоге так:
include_once(dirname(__FILE__) . "/lib/fpdf.php");
2. Если WWW-страница не отображается корректно, то возможно, нужно задать правильные настройки в /usr/local/etc/php.ini (если нет файла, скопируйте оригинал /usr/local/etc/php.ini-production):
... short_open_tag = On ... date.timezone = Europe/Moscow ...
TAG: