[AsteriskBrasil] RES: RES: tabela CDR postgres billing !!!
eder souza
ederwander em yahoo.com.br
Sexta Dezembro 15 16:32:28 BRST 2006
Obrigado Junior vou testar isso o mais breve possível desculpe a demora para responder mas estava enrolado com uma E1 com sinalização R2 aqui abraço, vou testar e postar os resultados vlw
Eder de Souza
Eder... e agora José.!!!?.. hehehe
É o seguinte, preferi alterar o logger.c para colocar um TIMESTAMP no arquivo queue_log no inicio das linhas para facilitar.
Está ai. Exatamente como esta funcionando aqui. O “Motorzinho” que coleta o queue_log e joga em uma tabela no POSTGRE.
Salve nosso amigo Cláudio Polegato Jr que me ajudou com essa rotina em C.
To mandando também o logger.c com a alteração para colocar o timestamp no inicio de cada linha do queue_log.
Att:
Rosilto Junior.
Vc precisa criar a tabela no postrgres.. dessa forma..
CREATE TABLE "public"."queue_log" (
"data" TIMESTAMP WITH TIME ZONE NOT NULL,
"uid1" VARCHAR(50) NOT NULL,
"uid2" VARCHAR(50),
"fila" VARCHAR(50),
"agente" VARCHAR(50),
"evento" VARCHAR(80),
"param1" VARCHAR(50),
"param2" VARCHAR(50),
"param3" VARCHAR(50)
) WITH OIDS;
Código fonte do “daemon”..
---------------------- inicio motor.c -----------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libpq-fe.h>
#include <time.h>
/*###########################################################*/
/* Conversor do queue_log para PostgreSQL */
/* Data: 20-10-2006 */
/* DSS Telecomunicacoes e Informatica */
/* Por: junior em dssnet.com.br */
/* Porto Velho - RO */
/*###########################################################*/
#define MAX_CAMPOS 11
#define DELIMITADOR '|'
char* campos[MAX_CAMPOS];
int Preencher_Campos(char *linha)
{
char *inicio, *delimitador;
int campo_atual = 0;
inicio = linha;
delimitador = strchr(inicio, DELIMITADOR);
while (delimitador && campo_atual < MAX_CAMPOS-1)
{
*delimitador = '\0';
campos[campo_atual++] = inicio;
inicio = delimitador + 1;
delimitador = strchr(inicio, DELIMITADOR);
}
campos[campo_atual++] = inicio;
return campo_atual;
}
/*Objeto de conexão*/
PGconn *conn = NULL;
/*Ponteiro de resultado*/
PGresult *result;
int main()
{
/*realiza a conexão*/
conn = PQconnectdb("host=localhost user=asterisk password=asterisk dbname=asterisk");
if(PQstatus(conn) == CONNECTION_OK)
{
printf("Conexão com o banco efetuada com sucesso. ");
}
else
{
printf("Falha na conexão. Erro: %s", PQerrorMessage(conn));
PQfinish(conn);
return -1;
}
//Delete lixo da tabela...
result = PQexec(conn, "DELETE FROM queue_log WHERE evento = 'CONFIGRELOAD'");
if(!result)
{ printf("Erro executando query."); }
else
{ switch(PQresultStatus(result))
{
case PGRES_EMPTY_QUERY:
printf("Nenhuma alteracao.");
break;
case PGRES_FATAL_ERROR:
printf("Erro na query: %s ", PQresultErrorMessage(result));
break;
case PGRES_COMMAND_OK:
printf("%s linhas afetadas. ", PQcmdTuples(result));
break;
default:
printf("Query executada sem retorno.");
break;
}
}
FILE *arquivo;
char consulta[1024];
char string[1024]; //string onde ficara a linha
int x = 0;
int campos_lidos;
char *delimitador, *inicio;
int aux1;
//#define DATE_FORMAT "%Y-%m-%d %T"
//time_t t;
//struct tm tm;
//char date[256];
//time(&t);
//localtime_r(&t, &tm);
//strftime(date, sizeof(date), DATE_FORMAT, &tm);
arquivo = fopen("/var/log/asterisk/queue_log", "rt");
while (! feof(arquivo))
{
while(fgets(string, sizeof(string), arquivo)) //le arquivo
{
delimitador = strchr(string, '\n');
while (delimitador)
{
*delimitador = '\0';
printf("\n\n\nLinha: %s\n\n", string);
campos_lidos = Preencher_Campos(string);
printf("Campos LIDOS: %d\n", campos_lidos);
int i;
for (i=0; i<campos_lidos-1; i++)
printf("Campo %2i: %s\n", i, campos[i]);
//getchar();
// Sendo a variável "campos_lidos" especificando quantos campos
// foram encontrados
// E o vetor "campos" apontando para o início de cada campo
// desta linha na memória terminados por '\0'
// Aqui é contigo! ;-)
strcpy(consulta,"");
strcat(consulta,"INSERT INTO queue_log values ('");
for (i=0; i< campos_lidos-1; i++)
{
strcat(consulta,campos[i]);
strcat(consulta, "','");
aux1 = i+1;
}
strcat(consulta,campos[aux1]);
strcat(consulta, "')");
result = PQexec(conn, consulta);
if(!result)
{ printf("Erro executando query."); }
else
{ switch(PQresultStatus(result))
{
case PGRES_EMPTY_QUERY:
printf("Nenhuma alteracao.");
break;
case PGRES_FATAL_ERROR:
printf("Erro na query: %s ", PQresultErrorMessage(result));
break;
case PGRES_COMMAND_OK:
printf("%s linhas afetadas. ", PQcmdTuples(result));
break;
default:
printf("Query executada sem retorno.");
break;
}
inicio = delimitador + 1;
delimitador = strchr(inicio, '\n');
}
x = x+1;
}
}
fclose(arquivo); //fecha arquivo
/*Libera objeto da query*/
PQclear(result);
}
/*Verifica se a conexão está aberta e a encerra*/
if(conn != NULL)
PQfinish(conn);
}
------------------- fim motor.c --------------------------
---------------------------------
De: asteriskbrasil-bounces em listas.asteriskbrasil.org [mailto:asteriskbrasil-bounces em listas.asteriskbrasil.org] Em nome de eder souza
Enviada em: quarta-feira, 13 de dezembro de 2006 09:20
Para: asteriskbrasil em listas.asteriskbrasil.org
Assunto: Re: [AsteriskBrasil] RES: tabela CDR postgres billing !!!
Olá Junior
Obrigado pela Dica estou começando a fazer um daemon em C que leia o arquivo queue_log e coloque os dados que acho interessante dentro de uma tabela do meu postgres, reparei que neste arquivo nao é mostrado a data e nem a hora que a fila foi atendida, mas não vejo isto como um problema posso comparar o ID da chamada e assim descobrir a data e a hora atraves da tabela CDR que esta no meu banco vou ter q fazer um join entre as tableas para comparar.
Dei uma fuçada no histórico e vi uma mensagem sua "PostgreSQL rotina em C...sugestao" gostaria de saber se aquele fonte que vc postou em C vc já conseguiu fazer ? claro se conseguiu poste aqui o fonte para ajudar a galera e a mim me poupará tempo.
Obrigado pelas Dicas
Eder de Souza
Eder!!!
Respondendo a 1 pergunta, vc consegue essa informação no arquivo /var/log/asterisk/queue_log nos flags “CONNECT” e “COMPLETECALLER” ou “COMPLETEAGENT”
No oráculo (voip-info.org) tem maiores detalhes. Sobre os parâmetros\eventos que o queue_log grava... com ele vc tem “tudo” o que acontece com as chamadas passadas pela fila,
não precisa(depende do caso) nem olhar o cdr..
No trixbox tem um “daemon” que fica rodando de tempo em tempo e “joga” o arquivo /var/log/asterisk/queue_log para uma tabela no banco de dados.
Vc pode fazer o seu e consultar direto na tabela..
A informação de “por quantos ramais” a ligação passou até ser atendida, no flag “CONNECT” tem a informação da última posição (na fila) que o chamador foi atendido.. não sei se ajuda..
Att:.
Jr..
---------------------------------
De: asteriskbrasil-bounces em listas.asteriskbrasil.org [mailto:asteriskbrasil-bounces em listas.asteriskbrasil.org] Em nome de eder souza
Enviada em: segunda-feira, 11 de dezembro de 2006 22:33
Para: asteriskbrasil em listas.asteriskbrasil.org
Assunto: [AsteriskBrasil] tabela CDR postgres billing !!!
Olá lista possuo uma tabela CDR em postgres que faz bilhetagem de todas as ligações e dentrada e saidas feitas pelo asterisk, tenho uma dúvida possuo uma fila configurada como eu consigo inserir no meu banco o tempo que uma ligação de entrada demorou para ser atendida??
Existe como saber isso ? se é possivel tbm bilhetar por quais ramais essa ligação passou antes de ser atendida por algum ramal tem como pessoal ? e como fazer isso caso for possivel !!!
vlw pessoal
Eder de Souza
---------------------------------
Yahoo! Search
Música para ver e ouvir: You're Beautiful, do James Blunt
--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.432 / Virus Database: 268.15.16/582 - Release Date: 11/12/2006 16:32
--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.5.432 / Virus Database: 268.15.16/582 - Release Date: 11/12/2006 16:32
----------------------------------------
Estação VoIP 2006
5 e 6 Dezembro
Curitiba PR
http://www.estacaovoip.com.br
_______________________________________________
LIsta de discussões AsteriskBrasil.org
AsteriskBrasil em listas.asteriskbrasil.org
http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil
_______________________________________________
Acesse o wiki AsteriskBrasil.org:
http://www.asteriskbrasil.org
---------------------------------
Você quer respostas para suas perguntas? Ou você sabe muito e quer compartilhar seu conhecimento? Experimente o Yahoo! Respostas!
--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.432 / Virus Database: 268.15.16/582 - Release Date: 11/12/2006 16:32
----------------------------------------
Estação VoIP 2006
5 e 6 Dezembro
Curitiba PR
http://www.estacaovoip.com.br
_______________________________________________
LIsta de discussões AsteriskBrasil.org
AsteriskBrasil em listas.asteriskbrasil.org
http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil
_______________________________________________
Acesse o wiki AsteriskBrasil.org:
http://www.asteriskbrasil.org
__________________________________________________
Fale com seus amigos de graça com o novo Yahoo! Messenger
http://br.messenger.yahoo.com/
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20061215/2c41513c/attachment-0001.html
Mais detalhes sobre a lista de discussão AsteriskBrasil