jueves, 7 de junio de 2012

CDR-STATS en Asterisk

Prerequisitos tener instalado asterisk Addons, el tuto de como instalarlo esta en este mismo blog
http://it-yoda.blogspot.com.ar/2012/01/instalacion-de-asterisk-16.html

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

Instalamos MySQL y establecemos nuestra contraseña para el usuario root de la base de datos.

apt-get -y install mysql-server libmysqlclient-dev
apt-get -y install git-core
apt-get install mercurial
mkdir /usr/share/django_app/
cd /usr/src/
wget --no-check-certificate https://github.com/Star2Billing/cdr-stats/tarball/v1.4.0
mv v1.4.0 Star2Billing-cdr-stats-v1.4.0.tar.gz
tar xvzf Star2Billing-cdr-stats-*.tar.gz
rm -rf Star2Billing-cdr-stats-*.tar.gz 
mv cdr-stats cdr-stats-$DATETIME
mkdir /usr/share/django_app/cdr_stats
mv Star2Billing-cdr-stats-* cdr-stats
mv /usr/share/django_app/cdr_stats archive_cdr-stats-$DATETIME
ln -s /usr/src/cdr-stats/cdr_stats /usr/share/django_app/cdr_stats


pip install -r /usr/share/django_app/cdr_stats/requirements.txt
RANDPASSW=`</dev/urandom tr -dc A-Za-z0-9| (head -c $1 > /dev/null 2>&1 || head -c 50)`
sed -i "s/^SECRET_KEY.*/SECRET_KEY = \'$RANDPASSW\'/g" /usr/share/django_app/cdr_stats/settings.py
sed -i "s/DEBUG = True/DEBUG = False/g" /usr/share/django_app/cdr_stats/settings.py
sed -i "s/TEMPLATE_DEBUG = DEBUG/TEMPLATE_DEBUG = False/g" /usr/share/django_app/cdr_stats/settings.py

# Setup settings.py
sed -i "s/backends.sqlite3/backends.mysql/" /usr/share/django_app/cdr_stats/settings.py
sed -i "s/.*'NAME'/ 'NAME': 'cdrstats',#/" /usr/share/django_app/cdr_stats/settings.py
sed -i "/'USER'/s/''/'root'/" /usr/share/django_app/cdr_stats/settings.py
sed -i "/'PASSWORD'/s/''/'mi_password_root'/" /usr/share/django_app/cdr_stats/settings.py
sed -i "/'HOST'/s/''/'localhost'/" /usr/share/django_app/cdr_stats/settings.py
sed -i "/'PORT'/s/''/'3306'/" /usr/share/django_app/cdr_stats/settings.py
mysql -u root -p
Enter password:mi_password_root

#Creamos la base de datos

mysql> CREATE DATABASE cdrstats;
GRANT SELECT,INSERT ON cdrstats.* TO root@localhost IDENTIFIED BY 'mi_password_root';


mysql>USE cdrstats;
Database changed
mysql> 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 '',
    ->   uniqueid varchar(32) NOT NULL default '',
    ->   userfield varchar(255) NOT NULL default ''
    -> );
Query OK, 0 rows affected (0.03 sec)
quit 
python manage.py syncdb


#Collect static files from apps and other locations in a single location.
python manage.py collectstatic -l --noinput

#preparamos el Apache y cargamos la configuracion en el archivo cdr-stats.conf


echo '
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
</Directory>

</VirtualHost>


' > /etc/apache2/sites-enabled/cdr-stats.conf

#corregimos el archvode arriba
sed -i "s/@/'/g" /etc/apache2/sites-enabled/cdr-stats.conf

#asignamos permisos en python-egg
mkdir /usr/share/django_app/cdr_stats/.python-eggs
chmod 777 /usr/share/django_app/cdr_stats/.python-eggs


chown -R www-data.www-data /usr/share/django_app/cdr_stats/database/
#Reiniciamos el servicio de Apache
service apache2 restart

==========================================

Como ya dijimos en los prerequisitos que tenemos que tener  instalado el modulo cdr_addon_mysql, presente en los addons de Asterisk, es preciso indicar que se utilizara el campo uniqueid, este de manera predeterminada no viene activo cuando trabajamos con MySQL al guardar el CDR, así que debemos agregar la siguiente linea en el archivo Makefile que se encuentra de la carpeta de asterisk-addons-* y despues de esto compilar e instalar.
colocar en el archivo Makefile que se encuentra en /usr/src/asterisk-addons-*/Makefile
#agregar al final la siguiente línea tal como está


#Esta opcion es para Asterisk 1.4.18 o anterior

ASTCFLAGS+=-DMYSQL_LOGUNIQUEID  
# sino utilizar esta linea
CFLAGS+=-DMYSQL_LOGUNIQUEID


#Luego en /usr/src/asterisk-addons-*/ compilamos

make clean
./configure
make
make install


# y esta otra linea en el  /usr/src/asterisk-addons-*/cdr/cdr_addon_mysql.c :

#define MYSQL_LOGUNIQUEID

========================
Especificamos los parametros de conexión en /etc/asterisk/cdr_mysql.conf


[global]
hostname=localhost
dbname=cdrstats
table=cdr
password=mi_password_root
user=root
port=3306
loguniqueid=yes
userfield=1
===================
# verificamos que se haya cargado el módulo de mysql para asterisk
asterisk -rvvvv
asteriskpbx*CLI> module show like mysql
# y debería mostrar algo como lo siguiente
Module                         Description                              Use Count
cdr_addon_mysql.so             MySQL CDR Backend                        0
app_addon_sql_mysql.so         Simple Mysql Interface                   0
res_config_mysql.so            MySQL RealTime Configuration Driver      0
3
modules loadedI>
#ahora vemos el status de la conexión de MySQL
asteriskpbx*CLI> cdr mysql status
# mostrara algo como lo siguiente
Connected to cdrstats@localhost, port 3306 using table cdr for 1 hours, 1 minutes, 0 seconds.
  Wrote 1 records since last restart.
    -- Registered IAX2 '300' (AUTHENTICATED) at 127.0.0.1:32768
#Si dice Not Connected entonces verificar los parámetros de conexión a la base de datos e igual checar que la base de datos esté dada de alta.
#salimos
asteriskpbx*CLI> exit

#Checamos el registro de la base de datos
mysql -u root -p 
mi_password_root
mysql> select * from cdr;
+---------------------+-------------+-----+--------+-----------+------------------+
| calldate            | clid        | src | dst    | dcontext  | channel
+---------------------+-------------+-----+--------+-----------+------------------+
| 2012-07-06 21:36:44 | "1110" <Soporte > | 1110   |
+---------------------+-------------+-----+--------+-----------+------------------+
1
row in set (0.00 sec)
  ============