<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix"><br>
você deveria gerar o relatorio baseado na fila e nao no cdr neste
caso.<br>
<br>
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.<br>
<br>
<a class="moz-txt-link-freetext" href="http://www.voip-info.org/wiki/view/Asterisk+queue_log+on+MySQL">http://www.voip-info.org/wiki/view/Asterisk+queue_log+on+MySQL</a><br>
<br>
<br>
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 :)<br>
-----<br>
<br>
#!/usr/bin/perl<br>
#<br>
# Script para proccessamento do arquivo queue_log<br>
# <br>
# Descricao dos campos do arquivo:<br>
# epoch timestamp <br>
# uniqueid da chamada<br>
# nome da fila<br>
# Canal<br>
# evento<br>
# parametro 1 do evento<br>
# parametro 2 do evento<br>
# parametro 3 do evento<br>
<br>
# Verificando se o processo ja esta rodando<br>
$control = "/tmp/ProccessQueueLog.run";<br>
<br>
if(! -e $control){<br>
system("touch $control");<br>
}else{<br>
die("Processo ja em Execucao\n");<br>
}<br>
<br>
<br>
# declarando funcoes<br>
use DBI;<br>
<br>
# declarando variaveis de conexao com banco<br>
<br>
$host = "localhost";<br>
$user = "USUARIO DO BANCO";<br>
$pass = "SENHA DO BANCO";<br>
$database = "asterisk";<br>
$table = "queuelog";<br>
<br>
# Criando conexao<br>
<br>
$dsn = "DBI:mysql:database=$database;host=$host;port=3306";<br>
$dbh = DBI->connect($dsn, $user, $pass);<br>
<br>
# Definindo os arquivos<br>
<br>
$file = "/var/log/asterisk/queue_log";<br>
$file_tmp = "/var/log/asterisk/queue_log_tmp";<br>
<br>
<br>
# Verificando se o processo esta rodando<br>
<br>
<br>
if(-e $file_tmp){<br>
system("rm -rf $file_tmp");<br>
}<br>
<br>
system("mv $file $file_tmp");<br>
system("touch $file");<br>
system("chown -R asterisk.asterisk $file");<br>
system("/usr/sbin/asterisk -rx \"logger reload\"");<br>
<br>
# Abrindo o arquivo<br>
open FILE, "<", $file_tmp or die $!;<br>
<br>
# Lendo informacao do arquivo<br>
<br>
# contador para teste<br>
$contador = 0;<br>
<br>
while ($line = <FILE>){<br>
$contador++;<br>
#if($contador > 5000){ die(); }<br>
($epoch, $uniqueid, $queue, $channel, $event, $param1,
$param2, $param3) = split(/\|/, $line);<br>
<br>
# limpando as variaveis<br>
chomp($epoch);<br>
chomp($uniqueid);<br>
chomp($queue);<br>
chomp($channel);<br>
chomp($event);<br>
chomp($param1);<br>
chomp($param2);<br>
chomp($param3);<br>
<br>
# Convertendo epoch para date<br>
$data = convert_epoc_to_date($epoch);<br>
<br>
# Imprimindo valores apenas para debug<br>
#print "Data: $data\n";<br>
#print "Uniqueid: $uniqueid\n";<br>
#print "Fila: $queue\n";<br>
#print "Canal: $channel\n";<br>
#print "Evento: $event\n";<br>
#print "Parametro 1: $param1\n";<br>
#print "Parametro 2: $param2\n";<br>
#print "Parametro 3: $param3\n";<br>
#print "Original: $line\n\n";<br>
<br>
# Exibindo a linha completa (para debug)<br>
#print "LINE: $line\n";<br>
<br>
$query = "INSERT INTO $database.$table VALUES ('$epoch',
'$uniqueid', '$queue', '$channel' , '$event', '$param1',
'$param2', '$param3', '$data')";<br>
<br>
# Imprimindo insert para verificacao<br>
print "Query: $query\n";<br>
<br>
# Executando Insert<br>
$sth = $dbh->prepare($query);<br>
$sth->execute();<br>
}<br>
<br>
<br>
<br>
<br>
sub convert_epoc_to_date($epoch){<br>
# Formato alterado pela falta da DateTime<br>
#use DateTime;<br>
#$dt = DateTime->from_epoch (epoch => $epoch);<br>
#$year = $dt->year;<br>
#$month = $dt->month;<br>
#$day = $dt->day;<br>
#$hour = $dt->hour;<br>
#$minute = $dt->minute;<br>
#$second = $dt->second;<br>
<br>
#return ($year + 1900) . "-$month" . "-$day". "-$hour" .
":$minute" . "$second";<br>
<br>
my $time = $epoch; <br>
my @months =
("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");<br>
my ($sec, $min, $hour, $day,$month,$year) =
(localtime($time))[0,1,2,3,4,5,6]; <br>
$month = $month + 1;<br>
if($month < 10){ $month = "0" . $month; }<br>
if($day < 10){ $day = "0" . $day; }<br>
if($hour < 10){ $hour = "0" . $hour; }<br>
if($min < 10){ $min = "0" . $min; }<br>
if($sec < 10){ $sec = "0" . $sec; }<br>
<br>
return ($year + 1900) . "-$month" . "-$day". " $hour" .
":$min" . ":$sec";<br>
}<br>
<br>
/<br>
system("rm -rf $control");<br>
<br>
<br>
-----<br>
<br>
A estrutura do banco de dados para receber estes dados éra a
seguinte.<br>
<br>
CREATE TABLE `queuelog` (<br>
`timestamp` int(11) default NULL,<br>
`callid` text,<br>
`qname` text,<br>
`agent` text,<br>
`action` text,<br>
`info1` text,<br>
`info2` text,<br>
`info3` text,<br>
`date` datetime default NULL<br>
) ENGINE=MyISAM DEFAULT CHARSET=latin1;<br>
<br>
<br>
<br>
---<br>
<br>
<br>
<br>
Em 30/10/13 10:44, Silvinho Barros escreveu:<br>
</div>
<blockquote
cite="mid:CALW+dythhuQiJ+i2Np5-YczysFUVvR4MgkatXgd-UbTPf4teRQ@mail.gmail.com"
type="cite">
<div dir="ltr">
<div>
<div>
<div>Bom dia Pessoal,<br>
<br>
</div>
Alguem sabe a manha para tirar relatorio dessa
base(Asteriskcdrdb) de quantas chamadas forma atendidas e
quantas falharam de verdade?<br>
</div>
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.<br>
<br>
</div>
<div>Asternic ta furado aqui!<br>
<br>
</div>
Obrigado.<br>
<div><br>
</div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
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 <a class="moz-txt-link-abbreviated" href="http://www.Khomp.com">www.Khomp.com</a>.
_______________________________________________
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 <a class="moz-txt-link-abbreviated" href="http://www.aligera.com.br">www.aligera.com.br</a>.
_______________________________________________
Para remover seu email desta lista, basta enviar um email em branco para <a class="moz-txt-link-abbreviated" href="mailto:asteriskbrasil-unsubscribe@listas.asteriskbrasil.org">asteriskbrasil-unsubscribe@listas.asteriskbrasil.org</a></pre>
</blockquote>
<br>
</body>
</html>