Добрый день, уважаемые хабравчане. Недавно мы озаботились тем, что у нас не ведется толкового анализа и учета звонков, совершаемых через наш Asterisk. После чтения интернетов, форумов и Хабра, выбор остановился на опенсорсном решении CDR-Stats, разработкой которого занимается компания Star2Billing. Если вам интересен обзор этого софта и процесс установки – добро пожаловать под кат.
Процесс установки довольно таки прост, однако занял у меня несколько дней. Дело в том, что имеется 4 разных официальных мануала по установке: 1 на сайте, 2 на гитхабе(от компании и главного разработчика) и еще на гитхабе в виде автоматического скрипта для установки под CentOS и Ubuntu.
Обнаружив, что есть скрипт для установки, я сначала решил воспользоваться именно им. Выбор ОС пал на Ubuntu, т.к. захотелось разнообразия, сервер с CentOS у меня уже есть. Итак, я скачал скрипт с гитхаба, запустил его и на выходе получил сообщение, что все установлено, однако ничего не работало. Связи были созданы неверно и зависимости поставлены криво. Неудача постигла меня и при попытке поставить все руками, руководствуясь мануалом с сайта софта.
После недолгих раздумий, я решил ставить CDR-Stats руками, руководствуясь скриптом от разработчиков.
Итак, у нас есть сервер с только что установленной Ubuntu и желание запустить необходимый нам анализатор. Сначала ставим зависимости и необходимые модули python:
Если ОС чистая, то ставим и эти необходимые вещи. Замечу, что необязательно ставить MySQL, можно выбирать из SQL Lite, PostgreSQL, Oracle и MySQL.
Затем создаем директорию, в которой будет находится линк на наш проект, перемещаемся туда, где будут лежать исходники CDR-Stats и скачиваем их туда. В конце создаем линк на исходники в папку с проектом.
К счастью, разработчики позаботились о том, чтобы мы ничего не забыли и создали файл requirements.txt, который находится в /usr/share/django_app/cdr_stats/. С помощью pip доставляем то, что необходимо для работы анализатора.
Почти все готово, осталось совсем немного. У меня Asterisk стоит на другом сервере и пишет CDR на третий сервер. В силу некоторых причин использовать эти CDR не получится, поэтому мы будем брать csv с сервера на котором стоит * и с помощью php скрипта импортировать его в БД. Сначала создаем базу и таблицу, куда будем писать cdr
Сам скрипт довольно таки простой, я не буду копировать его сюда, а просто дам ссылку на него.
Далее настраиваем непосредственно CDR-Stats. Для начала, в файле настроек(cdr_stats/settings.py) есть SECRET_KEY, его надо изменить на уникальный. Сгенерировать его можно например командой
Так же надо заменить в настройках тип базы, имя пользователя и пароль от базы, хост и порт(если они не дефолтные), название базы. Еще нужно раскомментировать строку MEDIA_URL и заменить там 0.0.0.0 на Ваш внешний IP.
Теперь создаем базу непосредственно для CDR-Stats:
Собираем всю статические данные, которые будет отдавать пользователю в одно место
Правим права на python-eggs
Все, с настройкой CDR-Stats закончили. Осталось еще настроить веб-сервер. Я использовал apache.
Создаем файл настройки для апача
и вписываем туда конфиг
Перезапускаем апач:
Все готово. Если Вы все правильно сделали, то по адресу IP:9000 появится главная страница CDR-Stats:

Спасибо за внимание.
Если тема заинтересовала, то могу написать так же обзор возможностей CDR-Stats.
CDR-Stats: www.cdr-stats.org
Github: github.com/Star2Billing/cdr-stats
Установка
Процесс установки довольно таки прост, однако занял у меня несколько дней. Дело в том, что имеется 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