четверг, 5 июня 2014 г.

WEB интерфейс детализации звонков Asterisk

В предыдущей публикации я взялся за написание приложения с помощью которого можно посмотреть статистику телефонных звонков сервера Asterisk и сейчас рад представить вам приложение ACViewer! Ознакомиться с возможностями интерфейса детализации телефонных соединений можно посмотрев видео ролик на сайте ACViewer.
В рассказе описана установка приложения на примере дистрибутива CentOS 6.x, с незначительными изменениями возможна установка и на других дистрибутивах Linux.

Конфигурация ПО 

Конфигурация сервера MySQL
База данных необходима для хранения информации о телефонных звонках. Установка и конфигурация MySQL сервера подробна описана в моей предыдущей публикации Устанавливаем и настраиваем базу данных MySQL
После авторизации на сервере MySQL под учётной записью root создаём новую базу данных с указанием имени пользователя и пароля.
mysql> CREATE DATABASE acv;
mysql> GRANT ALL PRIVILEGES ON acv.* TO 'acv'@'127.0.0.1' IDENTIFIED BY 'myacv';
mysql> GRANT ALL PRIVILEGES ON acv.* TO 'acv'@'localhost' IDENTIFIED BY 'myacv';
mysql> FLUSH PRIVILEGES;
Какие либо схемы таблиц импортировать в созданную базу данных не требуется, после старта приложения ACViewer все нужные таблицы будут созданы автоматически.
В случае использования конфигурации с протоколом Radius данные по звонкам потребуется импортировать в автоматические созданные таблицы, структуры таблиц очень похожи поэтому больших сложностей в импорте данных не возникнет.

Установка и настройка веб сервера Jetty
Веб сервер Jetty является полноценным веб сервером и предназначен для выполнения тех же задач что стоят перед такими серверами как Apache или Nginx. Но в отличии от перечисленных серверов Jetty написан на языке программирования Java, поэтому в систему требуется установить пакеты Java JDK.
$ sudo yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
Jetty использует библиотеку коннектора для доступа к серверу MySQL, устанавливаем эту библиотеку в систему.
$ sudo yum install mysql-connector-java
В CentOS по умолчанию идёт устаревшая версия сервера Jetty, поэтому загружаем архив Jetty версии 9.0.3 с сайта www.eclipse.org
$ wget -O jetty-distribution-9.0.3.v20130506.tar.gz http://eclipse.org/downloads/download.php?file=/jetty/9.0.3.v20130506/dist/jetty-distribution-9.0.3.v20130506.tar.gz
Создаём нового пользователя под которым в дальнейшем будет запускаться сервер Jetty в системе
$ sudo useradd jetty
Распаковываем архив
$ tar -zxvf jetty-distribution-9.0.3.v20130506.tar.gz
Перемещаем директорию сервера Jetty
$ sudo mv jetty-distribution-9.0.3.v20130506 /opt/jetty
Для работы потребуется начальная конфигурация сервера Jetty.
Файл тестовой конфигурации “/opt/jetty/start.d/900-demo.ini” удаляем.
Файлы конфигурации коннектора MySQL “jetty-plus.xml” и начальных установок контейнера приложения “webdefault.xml” которые идут с поставкой приложения ACViewer в директории “jetty-config/etc” копируем в директорию Jetty “/opt/jetty/etc”
В файле конфигурации “jetty-plus.xml” убедитесь в соответствии имени базы данных, пользователя и пароля тем что были указаны при создании MySQL базы данных.
В файле конфигурации сервера Jetty “start.ini” убираем комментарии со строк “OPTIONS=jndi” и “etc/jetty-plus.xml”
Файлы контейнера и контекста приложения ACViewer находящиеся в директории “acviewer” копируем в директорию “/opt/jetty/webapps” Указываем символьную ссылку в jndi директории сервера Jetty на MySQL коннектор и выставляем новые права доступа к файлам
$ sudo ln -s /usr/share/java/mysql-connector-java.jar /opt/jetty/lib/jndi/mysql-connector-java.jar
$ sudo chown -R jetty:jetty /opt/jetty
Для активации запуска Jetty сервера при загрузке системы потребуется скопировать файл стартового скрипта из директории “jetty-config/bin” поставки ACViewer в директорию “/etc/rc.d/init.d” и добавить его в загрузочную конфигурацию
$ sudo chkconfig --add jetty
$ sudo chkconfig jetty on
$ sudo service jetty start
На данном этапе приложение ACViewer развёрнуто и выполняется при помощи веб сервера Jetty. При запуске веб сервера Jetty в базе данных MySQL будут автоматически созданы необходимые для работы таблицы.

Зайдя браузером по IP адресу сервера на котором развёртывается приложение ACViewer с указанием номера порта 8080 можно авторизоваться с использованием имени “admin” и пароля “admin” заданными по умолчанию в приложении.
После успешной авторизации видим интерфейс поиска. Информация о детализации на данном этапе настройки отсутствует.
Добавляем правило которое позволит использовать в работе порт 80
$ sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
$ sudo service iptables save

Конфигурация Asterisk
Предполагается что сервер Asterisk уже установлен, поэтому потребуется установить лишь один пакет коннектора Asterisk к серверу базы данных MySQL
$ sudo yum install asterisk asterisk-mysql
С поставкой ACViewer в директории “asterisk-config” идёт файл конфигурации коннектора Asterisk к базе данных MySQL, его требуется скопировать в директорию конфигурации сервера Asterisk “/etc/asterisk”. Убедитесь в соответствии имени базы данных, пользователя и пароля в файле конфигурации тем что были указаны при создании MySQL базы данных.
Заходим на консоль управления сервером Asterisk и убеждаемся что соединение с базой даных MySQL установлено
localhost*CLI> cdr mysql status
Сделайте звонок, зайдите на web интерфейс программы чтобы убедиться в нормальной работе программы.

Теперь у вас в компании появилось простое и удобное решение просмотра статистики телефонных звонков Asterisk! Мне будет интересно узнать какие дополнительные функции вам нужны, я обязательно постараюсь дополнить ими программу.