[AsteriskBrasil] Tirar Relatorio da base asteriskcdrdb.
Mike Tesliuk
mike em tesliuk.com
Quarta Outubro 30 12:54:22 BRST 2013
você deveria gerar o relatorio baseado na fila e nao no cdr neste caso.
existem alguns scripts que podemos jogar os dados da sua fila no banco
de dados e uma vez no banco você pode fazer as consultas necessárias.
http://www.voip-info.org/wiki/view/Asterisk+queue_log+on+MySQL
Abaixo um script que fiz uma vez para esta finalidade (era versao 1.4 na
epoca), precisa verificar se o formato do arquivo é o mesmo ainda, se
quiser testar fique avontade, unico detalhe é , faça um backup do seu
queues_log enquanto você está testando para você nao perder os dados que
tem la, nao venha chorar depois se o arquivo for apagado :)
-----
#!/usr/bin/perl
#
# Script para proccessamento do arquivo queue_log
#
# Descricao dos campos do arquivo:
# epoch timestamp
# uniqueid da chamada
# nome da fila
# Canal
# evento
# parametro 1 do evento
# parametro 2 do evento
# parametro 3 do evento
# Verificando se o processo ja esta rodando
$control = "/tmp/ProccessQueueLog.run";
if(! -e $control){
system("touch $control");
}else{
die("Processo ja em Execucao\n");
}
# declarando funcoes
use DBI;
# declarando variaveis de conexao com banco
$host = "localhost";
$user = "USUARIO DO BANCO";
$pass = "SENHA DO BANCO";
$database = "asterisk";
$table = "queuelog";
# Criando conexao
$dsn = "DBI:mysql:database=$database;host=$host;port=3306";
$dbh = DBI->connect($dsn, $user, $pass);
# Definindo os arquivos
$file = "/var/log/asterisk/queue_log";
$file_tmp = "/var/log/asterisk/queue_log_tmp";
# Verificando se o processo esta rodando
if(-e $file_tmp){
system("rm -rf $file_tmp");
}
system("mv $file $file_tmp");
system("touch $file");
system("chown -R asterisk.asterisk $file");
system("/usr/sbin/asterisk -rx \"logger reload\"");
# Abrindo o arquivo
open FILE, "<", $file_tmp or die $!;
# Lendo informacao do arquivo
# contador para teste
$contador = 0;
while ($line = <FILE>){
$contador++;
#if($contador > 5000){ die(); }
($epoch, $uniqueid, $queue, $channel, $event, $param1, $param2,
$param3) = split(/\|/, $line);
# limpando as variaveis
chomp($epoch);
chomp($uniqueid);
chomp($queue);
chomp($channel);
chomp($event);
chomp($param1);
chomp($param2);
chomp($param3);
# Convertendo epoch para date
$data = convert_epoc_to_date($epoch);
# Imprimindo valores apenas para debug
#print "Data: $data\n";
#print "Uniqueid: $uniqueid\n";
#print "Fila: $queue\n";
#print "Canal: $channel\n";
#print "Evento: $event\n";
#print "Parametro 1: $param1\n";
#print "Parametro 2: $param2\n";
#print "Parametro 3: $param3\n";
#print "Original: $line\n\n";
# Exibindo a linha completa (para debug)
#print "LINE: $line\n";
$query = "INSERT INTO $database.$table VALUES ('$epoch',
'$uniqueid', '$queue', '$channel' , '$event', '$param1', '$param2',
'$param3', '$data')";
# Imprimindo insert para verificacao
print "Query: $query\n";
# Executando Insert
$sth = $dbh->prepare($query);
$sth->execute();
}
sub convert_epoc_to_date($epoch){
# Formato alterado pela falta da DateTime
#use DateTime;
#$dt = DateTime->from_epoch (epoch => $epoch);
#$year = $dt->year;
#$month = $dt->month;
#$day = $dt->day;
#$hour = $dt->hour;
#$minute = $dt->minute;
#$second = $dt->second;
#return ($year + 1900) . "-$month" . "-$day". "-$hour" . ":$minute"
. "$second";
my $time = $epoch;
my @months =
("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
my ($sec, $min, $hour, $day,$month,$year) =
(localtime($time))[0,1,2,3,4,5,6];
$month = $month + 1;
if($month < 10){ $month = "0" . $month; }
if($day < 10){ $day = "0" . $day; }
if($hour < 10){ $hour = "0" . $hour; }
if($min < 10){ $min = "0" . $min; }
if($sec < 10){ $sec = "0" . $sec; }
return ($year + 1900) . "-$month" . "-$day". " $hour" . ":$min" .
":$sec";
}
/
system("rm -rf $control");
-----
A estrutura do banco de dados para receber estes dados éra a seguinte.
CREATE TABLE `queuelog` (
`timestamp` int(11) default NULL,
`callid` text,
`qname` text,
`agent` text,
`action` text,
`info1` text,
`info2` text,
`info3` text,
`date` datetime default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
---
Em 30/10/13 10:44, Silvinho Barros escreveu:
> Bom dia Pessoal,
>
> Alguem sabe a manha para tirar relatorio dessa base(Asteriskcdrdb) de
> quantas chamadas forma atendidas e quantas falharam de verdade?
> O problema é que trabalho com filas e quando ele começa a discar para
> os ramais é registrado varios não respondidos mas na verdade a chamada
> foi atendida por 1 ramal apenas.
>
> Asternic ta furado aqui!
>
> Obrigado.
>
>
>
> _______________________________________________
> KHOMP: completa linha de placas externas FXO, FXS, GSM e E1;
> Media Gateways de 1 a 64 E1s para SIP com R2, ISDN e SS7;
> Intercomunicadores para acesso remoto via rede IP. Conheça em www.Khomp.com.
> _______________________________________________
> ALIGERA -- Fabricante nacional de Gateways SIP-E1 para R2, ISDN e SS7.
> Placas de 1E1, 2E1, 4E1 e 8E1 para PCI ou PCI Express.
> Channel Bank -- Appliance Asterisk - Acesse www.aligera.com.br.
> _______________________________________________
> Para remover seu email desta lista, basta enviar um email em branco para asteriskbrasil-unsubscribe em listas.asteriskbrasil.org
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20131030/38ce7aa1/attachment-0001.htm
Mais detalhes sobre a lista de discussão AsteriskBrasil