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.
rasterisk -x "core show channels verbose" | grep "^SIP/yourSIPTrunkName-"
rasterisk -x "core show channels verbose" | grep -c "^SIP/yourSIPTrunkName-"
rasterisk -x "core show channels verbose" | grep "^DAHDI/[1-9]-1\|^DAHDI/1[0-9]-1\|^DAHDI/2[0-4]-1"
rasterisk -x "core show channels verbose" | grep -c "^DAHDI/[1-9]-1\|^DAHDI/1[0-9]-1\|^DAHDI/2[0-4]-1"
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.
- 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
Deixe um comentário