On Thursday 05 February 2004 10:13, you wrote:
> On Thursday 05 February 2004 09:58, you wrote:
> > eu zic sa ne dai sursa
>
> ok
>
> > > Toti sunt initializati (cu malloc() ). Totusi daca ar fi asta
> >
> > problema as
> >
> > > primi segfault si cand lansez programul din linia de comanda nu ?
> >
> > ---
> > Detalii despre listele noastre de mail: http://www.lug.ro/
am uitat ca e blocat attach:
/*
***********************************************************************************
* Lorin Scraba,2003/02/04 *
* Programul parcurge clientii din tabela 'clients', calculeaza pentru fiecare
*
*nr. total de bytes/pachete in/out si updateaza fisierele .rrd cu aceste
valori. *
* GPL bla bla *
* Se compileaza cu: *
* gcc -I/usr/include/mysql/ -L/usr/lib/mysql -lmysqlclient raport.c -o raport
*
* *
*************************************************************************************/
#include <stdio.h>
#include <mysql.h>
#include <unistd.h>
#include <stdlib.h>
#define HOST "localhost"
#define USER "root"
#define PASS "xxx"
#define DATABASE "accounting"
#define PORT 3306
#define SOCK "/var/lib/mysql/mysql.sock"
#define RRD_FILES_PATH "/var/rrd"
#define RRD_APP_PATH "/usr/local/rrdtool-1.0.45/bin/rrdtool"
#define UPDATE "/etc/rrd/update"
int main(void) {
MYSQL *link;
MYSQL_RES *res=(MYSQL_RES *)malloc(sizeof(MYSQL_RES));
MYSQL_RES *res_in=(MYSQL_RES *)malloc(sizeof(MYSQL_RES));
MYSQL_RES *res_out=(MYSQL_RES *)malloc(sizeof(MYSQL_RES));
MYSQL_ROW row,row_in,row_out;
FILE *fd;
char *query=(char *)malloc(2000);
char *ip_list=(char *)malloc(255*15);
char *bytes_in=(char *)malloc(20);
char *bytes_out=(char *)malloc(20);
char *packets_in=(char *)malloc(20);
char *packets_out=(char *)malloc(20);
int i;
//fisier pt. update
fd=fopen(UPDATE,"wt+");
if (fd==NULL) {
fprintf(stderr,"Eroare la deschiderea fisierului...%s\n",UPDATE);
return -1;
}
fprintf(fd,"#!/bin/sh\n");
//conectare la baza de date
mysql_init(link);
if (link==NULL) {
fprintf(stderr,"\nProblema la alocarea memoriei...%s\n",mysql_error(link));
return -1;
}
mysql_real_connect(link,HOST,USER,PASS,DATABASE,PORT,SOCK,0);
if (link==NULL) {
fprintf(stderr,"\nProblema la conectare...%s\n",mysql_error(link));
return -1;
}
//selectez toti clientii (id) si ii grupez dupa id
if (mysql_real_query(link,"select id from clients group by id",34)) {
fprintf(stderr,"\nProblema la interogare...%s\n",mysql_error(link));
return -1;
}
if (!(res=mysql_store_result(link))) {
fprintf(stderr,"\nProblema la salvarea
rezultatului...%s\n",mysql_error(link));
return -1;
}
//salvez rezultatul query-ului intr-un vector de *char
int n=mysql_num_rows(res);
char id_list[n][30];
n=0;
while (row=mysql_fetch_row(res))
if ((strcmp(row[0],"free")!=0) && (strstr(row[0],"clasa")==NULL)) {
strcpy(id_list[n],row[0]);
n++;
}
//---the deep shit is starting here; completez valorile bytes,packets si
updatez fisierele .rrd
//parcurg lista clientilor
for (i=0;i<n;i++) {
sprintf(query,"select ip from clients where id like \"%s\"",id_list[i]);
if (mysql_real_query(link,query,strlen(query))) {
fprintf(stderr,"\nProblema la interogare...%s\n",mysql_error(link));
return -1;
}
mysql_free_result(res);
if (!(res=mysql_store_result(link))) {
fprintf(stderr,"\nProblema la salvarea
rezultatului...%s\n",mysql_error(link));
return -1;
}
//pentru fiecare client construiec un query cu lista ip-urilor asociate
strcpy(ip_list,"\"");
while (row=mysql_fetch_row(res))
if (strcmp(ip_list,"\"")==0)
sprintf(ip_list,"\"%s\"",row[0]);
else
sprintf(ip_list,"%s,\"%s\"",ip_list,row[0]);
//fac suma pentru:
//---bytes/packets_in
sprintf(query,"select sum(doctets),sum(dpkts) from flow where dstaddr in
(%s)",ip_list);
if (mysql_real_query(link,query,strlen(query))) {
fprintf(stderr,"\nProblema la interogare...%s\n",mysql_error(link));
return -1;
}
if (!(res_in=mysql_store_result(link))) {
fprintf(stderr,"\nProblema la salvarea
rezultatului...%s\n",mysql_error(link));
return -1;
}
row_in=mysql_fetch_row(res_in);
//---bytes/packets_out
sprintf(query,"select sum(doctets),sum(dpkts) from flow where srcaddr in
(%s)",ip_list);
if (mysql_real_query(link,query,strlen(query))) {
fprintf(stderr,"\nProblema la interogare...%s\n",mysql_error(link));
return -1;
}
if (!(res_out=mysql_store_result(link))) {
fprintf(stderr,"\nProblema la salvarea
rezultatului...%s\n",mysql_error(link));
return -1;
}
row_out=mysql_fetch_row(res_out);
//updatez fisierele rrd pe baza output-ului de mai jos - /etc/rrd/raport_all
sprintf(bytes_in,"%s",row_in[0]);
sprintf(bytes_out,"%s",row_out[0]);
sprintf(packets_in,"%s",row_in[1]);
sprintf(packets_out,"%s",row_out[1]);
if (strstr(bytes_in,"(null)")!=NULL)
sprintf(bytes_in,"0");
if (strstr(bytes_out,"(null)")!=NULL)
sprintf(bytes_out,"0");
if (strstr(packets_in,"(null)")!=NULL)
sprintf(packets_in,"0");
if (strstr(packets_out,"(null)")!=NULL)
sprintf(packets_out,"0");
fprintf(fd,"%s update %s/%s.rrd
N:%s:%s:%s:%s\n",RRD_APP_PATH,RRD_FILES_PATH,id_list[i],bytes_in,bytes_out,packets_in,packets_out);
mysql_free_result(res_out);
mysql_free_result(res_in);
}
mysql_close(link);
fclose(fd);
return 0;
}
--
I tought i taw a putty cat...I did! I did taw a putty cat!
---
Detalii despre listele noastre de mail: http://www.lug.ro/