Bash Script - Registre chamadas simultâneas do Asterisk® SCF™ para o MySQL e outras informações úteis

Aqui está um script em bash rápido, a ideia é registrar as chamadas simultâneas de cada um dos meus troncos de longa distância (DDD) do Asterisk® SCF™ em um banco de dados MySQL para poder analisar rapidamente as tendências de uso. Certamente, provavelmente existem outros softwares de código aberto por aí que podem fazer isso e fornecer gráficos muito pequenos ou não (cdr-stats ou asternic me vêm à mente). mas qual é a graça nisso? Como mencionei, o script é extremamente primitivo (apenas o mínimo necessário, pois não tinha muito tempo para gastar nele) e não contém nenhuma verificação de erro, mas também pode ser usado como uma ideia de informações úteis para suar o Grafana.

Mostrar todas as chamadas SIP ativas em um único tronco
rasterisk -x "core show channels verbose" | grep "^SIP/yourSIPTrunkName-"
Mostrar número simultâneo de chamadas SIP em um único tronco
rasterisk -x "core show channels verbose" | grep -c "^SIP/yourSIPTrunkName-"
Mostrar todas as chamadas DAHDI ativas nos canais 1-24
rasterisk -x "core show channels verbose" | grep "^DAHDI/[1-9]-1\|^DAHDI/1[0-9]-1\|^DAHDI/2[0-4]-1"
Mostrar número simultâneo de chamadas DAHDI nos canais 1-24
rasterisk -x "core show channels verbose" | grep -c "^DAHDI/[1-9]-1\|^DAHDI/1[0-9]-1\|^DAHDI/2[0-4]-1"
Para uma exibição útil em tempo real de chamadas simultâneas em um único tronco, incorpore o comando watch
watch -n .5 'rasterisk -x "core show channels verbose" | grep "^SIP/yourSIPTrunkName-"'
Como observação, sinta-se à vontade para usar o script abaixo, se quiser, mas você terá que escrever suas próprias expressões regulares para corresponder aos canais DAHDI usados em seu ambiente específico.

Você também precisará de um banco de dados MySQL em algum lugar para inserir os dados. Neste exemplo, eu nomeei a tabela “trunkusage” e ela possui quatro colunas.

Os tipos de dados são os seguintes:
  • ID – int 11 unsigned auto-increment
  • time – datetime
  • trunk – varchar 50
  • activecalls – int 11 unsigned
Para rodar como um daemon, crie o Shell Script em /etc/init.d/trunkusage e certifique-se de executar chmod + x, assim como executar o update-rc.d para permitir os níveis de execução padrão.

#!/bin/bash
#
# Log Concurrent Calls to MySQL
#
DBUSER='yourMysqlUser';
DBPASS='yourMysqlPass';
DBHOST='yourMysqlServer';
DBNAME='yourMysqlDatabaseName';
TBLNAME='trunkusage';
TRUNKNAME=('mySIPProvider1' 'mySIPProvider2' 'dahdiCircuitProvider');
TRUNKTYPE=('SIP' 'SIP' 'DAHDI');
RUNTIME='5';  # how often to run in seconds

while true  # Infinite loop
do
        i=0
        for trunk in "${TRUNKNAME[@]}" ; do
                unset ACTIVECALLS;
                if [ "${TRUNKTYPE[$i]}" == "SIP" ] ; then
                        ACTIVECALLS=$( /usr/sbin/asterisk -x "core show channels verbose" | grep -c "^${TRUNKTYPE[$i]}/${trunk}-" ) > /dev/null 2>&1;
                        mysql -u ${DBUSER} -p${DBPASS} -h ${DBHOST} ${DBNAME} -e "INSERT INTO ${TBLNAME} (time,trunk,activecalls) VALUES (NOW(), '${trunk}', '${ACTIVECALLS}');" > /dev/null 2>&1;
                        ((i++));
                elif [ "${TRUNKTYPE[$i]}" == "DAHDI" ] ; then
                        # Regex pattern for channels 1-24
                        ACTIVECALLS=$( /usr/sbin/asterisk -x "core show channels verbose" | grep -c "^${TRUNKTYPE[$i]}/[1-9]-1\|^${TRUNKTYPE[$i]}/1[0-9]-1\|^${TRUNKTYPE[$i]}/2[0-4]-1" ) > /dev/null 2>&1;
                        mysql -u ${DBUSER} -p${DBPASS} -h ${DBHOST} ${DBNAME} -e "INSERT INTO ${TBLNAME} (time,trunk,activecalls) VALUES (NOW(), '${trunk}', '${ACTIVECALLS}');" > /dev/null 2>&1;
                        ((i++));
                fi
        done
        sleep ${RUNTIME};
done

Um comentário

Unknown disse...

Top demais!!!
Já vou fazer um lab com esse conteúdo!
Obrigado pela Colaboração Del!!

Tecnologia do Blogger.