[AsteriskBrasil] Tirar Relatorio da base asteriskcdrdb.

Mike Tesliuk mike em tesliuk.com
Quarta Outubro 30 12:55:17 BRST 2013


Apenas lembrando as versoes atuais do asterisk suportam o armazenamento 
direto dos logs no banco conforme o link que eu passei

Em 30/10/13 10:54, Mike Tesliuk escreveu:
>
> 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 emwww.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 - Acessewww.aligera.com.br.
>> _______________________________________________
>> Para remover seu email desta lista, basta enviar um email em branco paraasteriskbrasil-unsubscribe em listas.asteriskbrasil.org
>
>
>
> _______________________________________________
> 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/df32eb0a/attachment.htm 


Mais detalhes sobre a lista de discussão AsteriskBrasil