Pull to refresh

Установка CDR-Stats для Asterisk

Добрый день, уважаемые хабравчане. Недавно мы озаботились тем, что у нас не ведется толкового анализа и учета звонков, совершаемых через наш Asterisk. После чтения интернетов, форумов и Хабра, выбор остановился на опенсорсном решении CDR-Stats, разработкой которого занимается компания Star2Billing. Если вам интересен обзор этого софта и процесс установки – добро пожаловать под кат.


Установка

Процесс установки довольно таки прост, однако занял у меня несколько дней. Дело в том, что имеется 4 разных официальных мануала по установке: 1 на сайте, 2 на гитхабе(от компании и главного разработчика) и еще на гитхабе в виде автоматического скрипта для установки под CentOS и Ubuntu.

Обнаружив, что есть скрипт для установки, я сначала решил воспользоваться именно им. Выбор ОС пал на Ubuntu, т.к. захотелось разнообразия, сервер с CentOS у меня уже есть. Итак, я скачал скрипт с гитхаба, запустил его и на выходе получил сообщение, что все установлено, однако ничего не работало. Связи были созданы неверно и зависимости поставлены криво. Неудача постигла меня и при попытке поставить все руками, руководствуясь мануалом с сайта софта.

После недолгих раздумий, я решил ставить CDR-Stats руками, руководствуясь скриптом от разработчиков.
Итак, у нас есть сервер с только что установленной Ubuntu и желание запустить необходимый нам анализатор. Сначала ставим зависимости и необходимые модули python:

apt-get -y install python-setuptools python-dev build-essential
apt-get -y install libapache2-mod-python libapache2-mod-wsgi
easy_install pip
easy_install virtualenv


Если ОС чистая, то ставим и эти необходимые вещи. Замечу, что необязательно ставить MySQL, можно выбирать из SQL Lite, PostgreSQL, Oracle и MySQL.

apt-get -y install mysql-server libmysqlclient-dev git-core
apt-get install mercurial


Затем создаем директорию, в которой будет находится линк на наш проект, перемещаемся туда, где будут лежать исходники CDR-Stats и скачиваем их туда. В конце создаем линк на исходники в папку с проектом.

mkdir /usr/share/django_app/
cd /usr/src/
git clone https://github.com/Star2Billing/cdr-stats.git
ln -s /usr/src/cdr-stats/cdr_stats /usr/share/django_app/cdr_stats

К счастью, разработчики позаботились о том, чтобы мы ничего не забыли и создали файл requirements.txt, который находится в /usr/share/django_app/cdr_stats/. С помощью pip доставляем то, что необходимо для работы анализатора.
pip install -r /usr/share/django_app/cdr_stats/requirements.txt


Почти все готово, осталось совсем немного. У меня Asterisk стоит на другом сервере и пишет CDR на третий сервер. В силу некоторых причин использовать эти CDR не получится, поэтому мы будем брать csv с сервера на котором стоит * и с помощью php скрипта импортировать его в БД. Сначала создаем базу и таблицу, куда будем писать cdr

CREATE DATABASE cdr_stats;
USE cdr_stats;

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 INDEX ( `calldate` );
ALTER TABLE `cdr` ADD INDEX ( `dst` );
ALTER TABLE `cdr` ADD INDEX ( `accountcode` );

Сам скрипт довольно таки простой, я не буду копировать его сюда, а просто дам ссылку на него.

Настройка

Далее настраиваем непосредственно CDR-Stats. Для начала, в файле настроек(cdr_stats/settings.py) есть SECRET_KEY, его надо изменить на уникальный. Сгенерировать его можно например командой
</dev/urandom tr -dc A-Za-z0-9| (head -c $1 > /dev/null 2>&1 || head -c 50)

Так же надо заменить в настройках тип базы, имя пользователя и пароль от базы, хост и порт(если они не дефолтные), название базы. Еще нужно раскомментировать строку MEDIA_URL и заменить там 0.0.0.0 на Ваш внешний IP.

Теперь создаем базу непосредственно для CDR-Stats:

cd /usr/share/django_app/cdr_stats/
python manage.py syncdb

Собираем всю статические данные, которые будет отдавать пользователю в одно место
python manage.py collectstatic -l –noinput
Правим права на python-eggs
mkdir /usr/share/django_app/cdr_stats/.python-eggs
chmod 777 /usr/share/django_app/cdr_stats/.python-eggs

Все, с настройкой CDR-Stats закончили. Осталось еще настроить веб-сервер. Я использовал apache.
Создаем файл настройки для апача
touch /etc/apache2/sites-enabled/cdr_stats.conf
и вписываем туда конфиг
Listen *:9000

<VirtualHost *:9000>
DocumentRoot /usr/share/django_app/cdr_stats/
ErrorLog /var/log/err-cdr-stats.log
LogLevel warn

WSGIPassAuthorization On
WSGIDaemonProcess cdr_stats user=www-data user=www-data threads=25
WSGIProcessGroup cdr_stats
WSGIScriptAlias / /usr/share/django_app/cdr_stats/django.wsgi

<Directory /usr/share/django_app/cdr_stats>
Order deny,allow
Allow from all




Перезапускаем апач:

service apache2 restart

Все готово. Если Вы все правильно сделали, то по адресу IP:9000 появится главная страница CDR-Stats:



Спасибо за внимание.
Если тема заинтересовала, то могу написать так же обзор возможностей CDR-Stats.

CDR-Stats: www.cdr-stats.org
Github: github.com/Star2Billing/cdr-stats
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.