[AsteriskBrasil] Queue_log + Mysql
Eder Souza
eder.souza em bsd.com.br
Segunda Agosto 9 14:37:46 BRT 2010
Opa nos primordios usava uma rotina feita pelo Juniou aqui da lista tem como
deixar ela realtime mas eu usava estática mesmo !!
Source de exemplo usando PostgreSQL
#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 */
/* Porto Velho - RO [EMAIL PROTECTED] */
/*###########################################################*/
#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 Data: %s ", campos_lidos, date);
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();
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);
}
Da para aprimorar isso !!!
Agora tem uma maneira mais simples ainda de se fazer isso com o stdin de
qualquer programa veja um exemplo simples !!
import sys
retorna_valores = sys.stdin.readline().split(',')
print retorna_valores
se vc rodar isso em conjunto com um tail -f vai conseguir pegar todas as
informações em tempo real conforme forem entrando no log, veja exemplo
bobo!!
tail -f /var/log/asterisk/queue_log | python teste.py
só escrever a rodina de insert para o banco no seu programa e pronto!!
[]'s
Eng Eder de Souza
Em 9 de agosto de 2010 14:00, Sidnei - IG <sidnei_rp em ig.com.br> escreveu:
> Pessoal.
>
> Alguém sabe como faço para inserir os dados do queue_log
> (/var/log/asterisk/queue_log) no BD Mysql em tempo real???
>
> Uso asterisk 1.2.24 (Meucci).
>
>
>
> _______________________________________________
> KHOMP: qualidade em placas de E1, GSM, FXS e FXO para Asterisk.
> - Hardware com alta disponibilidade de recursos e qualidade KHOMP
> - Suporte técnico local qualificado e gratuito
> Conheça a linha completa de produtos KHOMP em www.khomp.com.br
> _______________________________________________
> Temos tudo para seu projeto VoIP com Asterisk!
> Descontos especiais para assinantes da AsteriskBrasil.org.
> Registre-se e receba um cupom exclusivo de desconto!
> Acesse agora www.voipmania.com.br
> ______________________________________________
> Lista de discussões AsteriskBrasil.org
> AsteriskBrasil em listas.asteriskbrasil.org
> http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20100809/2612cded/attachment-0001.htm
Mais detalhes sobre a lista de discussão AsteriskBrasil