CDR-Stats

De Asterisk Wiki
Saltar a: navegación, buscar

CDR-Stats es una interfaz web, que sirve para mostrar todo tipo de estadísticas, basada en el sencillo Registro de llamadas que ofrece Asterisk y en la actualidad, es el más completo al menos, con una licencia Open Source (Mozilla Public License V2).

Logo de CDR-Stats

Descripción General

CDR-Stats es una aplicación web creada por Areski Belaid en 2010, y ofrecida a la comunidad desde entonces. En la actualidad pertenece a Star2Billing Inc, misma compañia creadora del sistema A2Billing

Esta aplicación esta basada en Python, concretamente, en su framework Django [1] y utiliza una base de datos especifica para la gestión del sistema llamada MongoDB (No esta basada en consultas SQL)

Básicamente sirve de interfaz visual, muy atractiva y llamativa, para poder filtrar, y controlar todos los registros CDR que vayan almacenandose en una base de datos SQL (no valido para instalaciones del sistema CDR basados en ficheros CSV).

Instalación

Existen dos partes relacionadas a la instalación del sistema CDR-Stats.

Por un lado la implícita de Asterisk, relacionada a conseguir que el [Registro Llamadas y Eventos|registro de llamadas]] pase a la Base de Datos de forma autónoma.

Por otro lado, sería la instalación de la plataforma Django en la que esta basada CDR-Stats. Para ello el creador provee un script generico en su página web oficial [2]

Hay que decir, que la instalación se ha complicado tanto con las últimas versiones que por eso surgio la idea de utilizar un Script, pero aún así es importante entender el proceso de la instalación al menos en términos generales, porque el script en sí tiene una tendencia demasiado alta a fallar, ya que esta condicionado al entorno Linux que estemos utilizando y cualquier cambio en la versión de un solo componente o forma de realizar algo pararía la ejecución del script y nos dejaría la instalación a medias. Además la instalación por script entiende que estamos trabajando con un usuario root, lo que puede ser no ser el caso, si realizamos la instalación Segura basándonos en las políticas de control de acceso de Asterisk.

En este caso, ofrecemos una versión "manual" de la instalación y menos perecedera dado que hecha la primera parte, la parte de configuración especifica no resulta tan compleja.

En primer lugar descargamos el paquete correspondiente a la última versión de CDR-Stats del siguiente enlace.

A continuación lo descomprimimos en un directorio, por ejemplo:

# unzip cdr-stats-version-x.y.z.zip


Y accedemos al directorio de descompresión, para comenzar a aplicar los cambios. Vamos a preparar la interfaz web primero. Para ello creamos un directorio dentro de nuestra raíz WWW por ejemplo

# sudo mkdir /var/www/cdrstats


# sudo chown -R asterisk:asterisk /var/www/cdrstats/


Ahora en siguiente lugar hay que instalar todo el software necesario para que el sistema CDR-Stats funcione:

# sudo aptitude install python-setuptools python-dev build-essential
libevent-dev libapache2-mod-python libapache2-mod-wsgi git-core mercurial gawk


# sudo easy_install pip


# sudo pip install -e
hg+http://bitbucket.org/andrewgodwin/south/@ecaafda23e600e510e252734d67bf8f9f2362dc9#egg=South-dev


Creamos el directorio para logs:

# sudo mkdir /var/log/cdr-stats


Instalamos CDR-Stats en su directorio de instalación por defecto, en este caso: /usr/share/cdr_stats.

# sudo mkdir /usr/share/cdr_stats/


# sudo chown -R asterisk:asterisk /usr/share/cdr_stats/


# cp -r ./cdr_stats/* /usr/share/cdr_stats



Instalando MongoDB

Es necesario lanzar los siguientes comandos en orden.

Necesitamos instalar el paquete debian para la base de datos Mongo, para ello necesitamos añadir un repositorio y una clave a nuestro sistema Ubuntu:

# sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10


# sudo sh -c 'echo "deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart
dist 10gen" >> /etc/apt/sources.list'


# sudo aptitude update


# sudo aptitude install mongodb-10gen


Por otro lado, necesitamos aplicar algunas configuraciones específicas para su funcionamiento:

# cd /etc/init.d/


# sudo update-rc.d -f mongodb defaults


# sudo sed -i "s/#port = 27017/port = 27017/g" /etc/mongodb.conf


# sudo service mongodb restart


Instalando Python Virtual Environment

Instalamos la característica de entornos virtuales.

# sudo easy_install virtualenv


# sudo easy_install virtualenvwrapper


Preparando el entorno Virtual {{Comando|sudo sh -c 'echo "export WORKON_HOME=/usr/share/virtualenvs"
>> ~/.bashrc'}

# sudo sh -c 'echo "source $SCRIPT_VIRTUALENVWRAPPER"
>> ~/.bashrc'


# sudo chown -R asterisk:asterisk /usr/share/virtualenvs/


# source /usr/local/bin/virtualenvwrapper.sh


# mkvirtualenv cdr-stats


# workon cdr-stats


Instalando dependencias Python

# sudo easy_install -U distribute


Ahora creamos un pequeño script para instalar todas las dependencias de Django Python de un golpe gracias a los ficheros de instalación que provee CDR-Stats:

Archivo: ./dependencias_cdrstats.sh
for line in $(cat /usr/src/cdr-stats/install/requirements/basic-requirements.txt)
do
pip install $line
done
echo "Install Django requirements..."
for line in $(cat /usr/src/cdr-stats/install/requirements/django-requirements.txt)
do
pip install $line
done


# sudo chmod +x dependencias_cdrstats.sh


# ./dependencias_cdrstats.sh


Volvemos a instalar la dependencia South ahora en el entorno virtual:

# sudo pip install -e
hg+http://bitbucket.org/andrewgodwin/south/@ecaafda23e600e510e252734d67bf8f9f2362dc9#egg=South-dev


# sudo cp /usr/src/cdr-stats/install/conf/settings_local.py /usr/share/cdr_stats


Vamos a establecer una clave aleatoria para la seguridad del sistema:

# RANDPASSW=`</dev/urandom tr -dc A-Za-z0-9


# sed -i "s/^SECRET_KEY.*/SECRET_KEY = \'$RANDPASSW\'/g" /usr/share/cdr_stats/settings.py


Deshabilitamos el entorno de depuración:

# sed -i "s/DEBUG = True/DEBUG = False/g" /usr/share/cdr_stats/settings_local.py


# sed -i "s/TEMPLATE_DEBUG = DEBUG/TEMPLATE_DEBUG = False/g" /usr/share/cdr_stats/settings_local.py


Y ahora tenemos que acceder al fichero settings_local.py dentro del directorio de instalación settings_local.py para establecer los parametros de configuración de nuestra base de datos MySQL:

Archivo: /usr/share/cdr_stats/settings_local.py
DATABASES = {'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'cdrstats',
'USER': 'asterisk',
'PASSWORD': 'asterisk',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {
'init_command': 'SET storage_engine=INNODB',}}}


Creamos la base de datos y le damos privilegios al usuario asterisk:

# mysqladmin -u root -p create cdrstats


Y condecedemos privilegios

# mysql -u root -p -e "GRANT ALL PRIVILEGES ON cdrstats.* TO 'asterisk'@'localhost';"


Configuración General

Ahora vamos a realizar algunos ajustes en el sistema dentro del directorio de instalacion:

# cd /usr/share/cdr_stats/


# mkdir .python-eggs


# chown www-data:www-data .python-eggs


# mkdir database


Creamos algunos ficheros para el sistema de logging:

# sudo chown -R asterisk:asterisk /var/log/cdr-stats/


# sudo touch /var/log/cdr-stats/cdr-stats.log


# sudo touch /var/log/cdr-stats/cdr-stats-db.log


# sudo touch /var/log/cdr-stats/err-apache-cdr-stats.log


Ahora creamos la estructura de tablas dentro de la base de datos:

# python manage.py syncdb --noinput


# python manage.py migrate


Y creamos el usuario administrador de CDR-Stats:

# python manage.py createsuperuser


# python manage.py collectstatic -l --noinput


# sudo chown -R $www-data:www-data /usr/share/cdr_stats/database/


# sudo chown -R www-data:www-data /var/log/cdr-stats/


Ahora vamos a configurar la base de datos de CDR de Asterisk:

# mysql -u root -p asterisk -e "ALTER TABLE cdr ADD acctid BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;"


Ahora dentro del fichero settings_local.py modificamos para adaptarlo a nuestra base de datos:

Archivo: /usr/share/cdr_stats/settings_local.py
ASTERISK_CDR_MYSQL_IMPORT = {
'127.0.0.1': {
'db_name': 'asterisk',
'table_name': 'cdr',
'host': 'localhost',
'user': 'asterisk',
'password': 'asterisk',
},}


Tenemos que configurar también la parte relacionada a Apache:

Archivo: /etc/apache2/sites-enabled/cdr-stats.conf
Listen *:8008
<VirtualHost *:8008>
DocumentRoot /usr/share/cdr_stats/
ErrorLog /var/log/cdr-stats/err-apache-cdr-stats.log

LogLevel warn
Alias /static/ "/usr/share/cdr_stats/static/"
<Location "/static/">
SetHandler None
</Location>
WSGIPassAuthorization On
WSGIDaemonProcess cdr-stats user=www-data user=www-data threads=25
WSGIProcessGroup cdr-stats
WSGIScriptAlias / /usr/share/cdr_stats/django.wsgi
<Directory /usr/share/cdr_stats>

AllowOverride all
Order deny,allow
Allow from all
</Directory>
</VirtualHost>


Ahora configuramos el proceso Socket IO:

Para ello volvemos a modificar el fichero settings_local.py:

Archivo: /usr/share/cdr_stats/settings_local.py
SOCKETIO_HOST = '<nuestra_direccion_ip_local>'
SOCKETIO_PORT = 9000
SOCKETIO_CALLNUM_DEFAULT = 0


# sudo cp /usr/src/cdr-stats/install/cdr-stats-socketio /etc/init.d/cdr-stats-socketio


# sudo chmod +x /etc/init.d/cdr-stats-socketio


# sudo cd /etc/init.d; update-rc.d cdr-stats-socketio defaults 99


# sudo /etc/init.d/cdr-stats-socketio start


Y finalmente reiniciando el servidor Apache:

# sudo service apache2 restart


Ya tendríamos la primera parte funcionando. Para comprobar que todo ha ido bien podemos acceder a nuestro servidor desde un navegador: http://<nuestra_direccion_ip_local>:8008

Instalando la Interfaz Web

Copiamos dentro todos los ficheros relativos a la interfaz web, dentro del directorio que descomprimimos el paquete CDR-Stats:

# sudo cp -r install/landing-page/* /var/www/cdrstats/


Ahora creamos un fichero dentro del directorio Apache:

Archivo: /etc/apache2/sites-enabled/welcome-cdr-stats.conf
<VirtualHost *:80>
DocumentRoot '/var/www/cdrstats'
DirectoryIndex index.html index.htm index.php index.php4 index.php5
<Directory '/var/www/cdrstats'>
Options Indexes IncludesNOEXEC FollowSymLinks
allow from all

AllowOverride All
allow from all
</Directory>
</VirtualHost>


Volvemos a reiniciar el servidor Apache:

# sudo service apache2 restart


Y realizamos una pequeña modificación en la dirección del servidor para poder acceder con nuestra ip de servidor Asterisk:

# sudo sed -i "s/LOCALHOST/nuestra_direccion_ip_local:8008/g" /var/www/cdrstats/index.html


Instalación del Sistema de Recopilación

Vamos a instalar primero el servidor Django Redis:

# sudo aptitude install redis-server


# sudo /etc/init.d/redis-server.dpkg-dist start


En primer lugar vamos a instalar Django Celery:

# sudo mkdir -p /var/run/celery


# sudo cp /usr/src/cdr-stats/install/celery-init/debian/etc/default/cdr-stats-celeryd /etc/default/


# sudo cp /usr/src/cdr-stats/install/celery-init/debian/etc/init.d/cdr-stats-celeryd /etc/init.d/


# sudo chmod +x /etc/default/cdr-stats-celeryd


# sudo chmod +x /etc/init.d/cdr-stats-celeryd


# sudo /etc/init.d/cdr-stats-celeryd restart


# cd /etc/init.d


# sudo update-rc.d cdr-stats-celeryd defaults 99


Y por último activamos el logrotate para ello editamos el fichero /etc/logrotate.d/cdr_stats:

Archivo: /etc/logrotate.d/cdr_stats
/var/log/cdr-stats/celery*log {
missingok
rotate 10
compress
size 10M
postrotate
/etc/init.d/cdr-stats-celeryd restart > /dev/null
endscript}


# sudo logrotate /etc/logrotate.d/cdr_stats


Y ya quedaría configurado todo el sistema CDR-Stats por completo.

Referencias

  1. Django Project, Django Software Foundation (2005)
  2. Script de Instalación de CDR-Stats, en Inglés, Areski Belaid

Véase también

Enlaces Externos

  • Mongo DB, página oficial de esta Base de Datos no Relacional.
  • A2Billing, pagina oficial del sistema de facturación A2Billing
  • Servidor Redis IO, página oficial de este sistema de almacenamiento de claves.