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/


Raspunde prin e-mail lui