From: Frédéric Marchal Date: Fri, 14 Aug 2009 17:58:09 +0000 (+0000) Subject: Fixed e-mail report (may also fix bug #2153024). X-Git-Tag: v2_2_6~40 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fb7c5f27d48c4f6146d7f5f228baa10aad1ec941;p=thirdparty%2Fsarg.git Fixed e-mail report (may also fix bug #2153024). Fixed total and percentages of topuser page. --- diff --git a/email.c b/email.c index ec0af2c..b52fa58 100644 --- a/email.c +++ b/email.c @@ -36,14 +36,15 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con float perc2=0.00; int posicao=0; char olduser[MAXLEN], csort[MAXLEN], period[MAXLEN], arqper[MAXLEN]; - char wger[MAXLEN], top1[MAXLEN], top2[MAXLEN], top3[MAXLEN], user[MAXLEN], nacc[20], nbytes[20], url[1024], tusr[MAXLEN]; - char ip[MAXLEN], hora[9], data[11], elap[15], user2[MAXLEN], wperc[8], wperc2[8]; + char wger[MAXLEN], top1[MAXLEN], top2[MAXLEN], top3[MAXLEN], user[MAXLEN], nacc[20], nbytes[20], url[MAXLEN], tusr[MAXLEN]; + char ip[MAXLEN], hora[9], data[15], elap[16], user2[MAXLEN], wperc[8], wperc2[8]; char strip1[MAXLEN], strip2[MAXLEN], strip3[MAXLEN], strip4[MAXLEN], strip5[MAXLEN], strip6[MAXLEN], strip7[MAXLEN]; - char incac[16], oucac[16]; + char incac[30], oucac[30]; int totuser=0; time_t t; struct tm *local; int cstatus; + char warea[MAXLEN]; strcpy(wger,dirname); strcpy(top1,dirname); @@ -71,39 +72,72 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con exit(1); } - fscanf(fp_in,"%s",user); - fscanf(fp_in,"%s",nacc); - fscanf(fp_in,"%s",nbytes); - fscanf(fp_in,"%s",url); - fscanf(fp_in,"%s",ip); - fscanf(fp_in,"%s",hora); - fscanf(fp_in,"%s",data); - fscanf(fp_in,"%s",elap); - fscanf(fp_in,"%s",incac); - fscanf(fp_in,"%s",oucac); - - strcpy(olduser,user); - totuser=1; - - while(!feof(fp_in)) + olduser[0]='\0'; + totuser=0; + + while(fgets(warea,sizeof(warea),fp_in)) { + if (getword(user,sizeof(user),warea,' ')<0) { + printf("SARG: Maybe you have a broken user in your %s file.\n",wger); + exit(1); + } + if(strcmp(user,"TOTAL") == 0) { + continue; + } + if (getword(nacc,sizeof(nacc),warea,' ')<0) { + printf("SARG: Maybe you have a broken number of access in your %s file.\n",wger); + exit(1); + } + if (getword(nbytes,sizeof(nbytes),warea,' ')<0) { + printf("SARG: Maybe you have a broken number of bytes in your %s file.\n",wger); + exit(1); + } + if (getword(url,sizeof(url),warea,' ')<0) { + printf("SARG: Maybe you have a broken url in your %s file.\n",wger); + exit(1); + } + if (getword(ip,sizeof(ip),warea,' ')<0) { + printf("SARG: Maybe you have a broken source IP address in your %s file.\n",wger); + exit(1); + } + if (getword(hora,sizeof(hora),warea,' ')<0) { + printf("SARG: Maybe you have a broken time in your %s file.\n",wger); + exit(1); + } + if (getword(data,sizeof(data),warea,' ')<0) { + printf("SARG: Maybe you have a broken date in your %s file.\n",wger); + exit(1); + } + if (getword(elap,sizeof(elap),warea,' ')<0) { + printf("SARG: Maybe you have a broken elapsed time in your %s file.\n",wger); + exit(1); + } + if (getword(incac,sizeof(incac),warea,' ')<0) { + printf("SARG: Maybe you have a broken in cache column in your %s file.\n",wger); + exit(1); + } + if (getword(oucac,sizeof(oucac),warea,0)<0) { + printf("SARG: Maybe you have a broken not in cache column in your %s file.\n",wger); + exit(1); + } if(strcmp(olduser,user) != 0) { - if(strcmp(user,"TOTAL") != 0) - totuser++; + totuser++; + if (olduser[0] != '\0') { #if defined(__FreeBSD__) - fprintf(fp_top2,"%s %15qu %15qu %15qu\n",olduser,tnbytes,tnacc,tnelap); + fprintf(fp_top2,"%s %qu %qu %qu\n",olduser,tnbytes,tnacc,tnelap); #elif defined(__alpha) || __ALPHA - fprintf(fp_top2,"%s %15ld %15ld %15ld\n",olduser,tnbytes,tnacc,tnelap); + fprintf(fp_top2,"%s %ld %ld %ld\n",olduser,tnbytes,tnacc,tnelap); #else - fprintf(fp_top2,"%s %15lld %15lld %15lld\n",olduser,tnbytes,tnacc,tnelap); + fprintf(fp_top2,"%s %lld %lld %lld\n",olduser,tnbytes,tnacc,tnelap); #endif - strcpy(olduser,user); - ttnbytes=ttnbytes+tnbytes; - ttnacc=ttnacc+tnacc; - ttnelap=ttnelap+tnelap; + ttnbytes=ttnbytes+tnbytes; + ttnacc=ttnacc+tnacc; + ttnelap=ttnelap+tnelap; + } + strcpy(olduser,user); tnbytes=0; tnacc=0; tnelap=0; @@ -112,31 +146,20 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con tnbytes=tnbytes+atol(nbytes); tnacc=tnacc+atol(nacc); tnelap=tnelap+atol(elap); - - fscanf(fp_in,"%s",user); - fscanf(fp_in,"%s",nacc); - fscanf(fp_in,"%s",nbytes); - fscanf(fp_in,"%s",url); - fscanf(fp_in,"%s",ip); - fscanf(fp_in,"%s",hora); - fscanf(fp_in,"%s",data); - fscanf(fp_in,"%s",elap); - fscanf(fp_in,"%s",incac); - fscanf(fp_in,"%s",oucac); - - if(strcmp(user,"TOTAL") == 0) - continue; } + + if (olduser[0] != '\0') { #if defined(__FreeBSD__) - fprintf(fp_top2,"%s %15qu %15qu %15qu\n",olduser,tnbytes,tnacc,tnelap); + fprintf(fp_top2,"%s %qu %qu %qu\n",olduser,tnbytes,tnacc,tnelap); #elif defined(__alpha) || __ALPHA - fprintf(fp_top2,"%s %15ld %15ld %15ld\n",olduser,tnbytes,tnacc,tnelap); + fprintf(fp_top2,"%s %ld %ld %ld\n",olduser,tnbytes,tnacc,tnelap); #else - fprintf(fp_top2,"%s %15lld %15lld %15lld\n",olduser,tnbytes,tnacc,tnelap); + fprintf(fp_top2,"%s %lld %lld %lld\n",olduser,tnbytes,tnacc,tnelap); #endif - ttnbytes=ttnbytes+tnbytes; - ttnacc=ttnacc+tnacc; - ttnelap=ttnelap+tnelap; + ttnbytes=ttnbytes+tnbytes; + ttnacc=ttnacc+tnacc; + ttnelap=ttnelap+tnelap; + } fclose(fp_in); fclose(fp_top2); @@ -156,27 +179,17 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con exit(1); } #if defined(__FreeBSD__) - fprintf(fp_top1,"TOTAL %15qu %15qu %15qu\n",ttnbytes,ttnacc,ttnelap); + fprintf(fp_top1,"TOTAL %qu %qu %qu\n",ttnbytes,ttnacc,ttnelap); #elif defined(__alpha) || __ALPHA - fprintf(fp_top1,"TOTAL %15ld %15ld %15ld\n",ttnbytes,ttnacc,ttnelap); + fprintf(fp_top1,"TOTAL %ld %ld %ld\n",ttnbytes,ttnacc,ttnelap); #else - fprintf(fp_top1,"TOTAL %15lld %15lld %15lld\n",ttnbytes,ttnacc,ttnelap); + fprintf(fp_top1,"TOTAL %lld %lld %lld\n",ttnbytes,ttnacc,ttnelap); #endif fclose(fp_top1); - if((fp_top1=fopen(top1,"r"))==NULL) { - fprintf(stderr, "SARG: (email) %s: %s\n",text[45],top1); - exit(1); - } - - if((fp_top3=fopen(top3,"w"))==NULL) { - fprintf(stderr, "SARG: (email) %s: %s\n",text[45],top3); - exit(1); - } - - /* - * Obtem o period - */ + /* + * Obtem o period + */ strcpy(arqper,dirname); strcat(arqper,"/sarg-period"); @@ -189,6 +202,16 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con fgets(period,sizeof(period),fp_in); fclose(fp_in); + if((fp_top1=fopen(top1,"r"))==NULL) { + fprintf(stderr, "SARG: (email) %s: %s\n",text[45],top1); + exit(1); + } + + if((fp_top3=fopen(top3,"w"))==NULL) { + fprintf(stderr, "SARG: (email) %s: %s\n",text[45],top3); + exit(1); + } + sprintf(strip1,"%s",text[88]); strip_latin(strip1); fprintf(fp_top3,"%s\n",strip1); @@ -218,15 +241,26 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con fprintf(fp_top3,"%-7s %-20s %-8s %-15s %%%-6s %-10s %-10s %%%-7s\n------- -------------------- -------- --------------- ------- ---------- ---------- -------\n",strip1,strip2,strip3,strip4,strip4,strip5,strip6,strip7); - fscanf(fp_top1,"%s",user); - fscanf(fp_top1,"%s",nbytes); - fscanf(fp_top1,"%s",nacc); - fscanf(fp_top1,"%s",elap); - - while(!feof(fp_top1)) + while(fgets(warea,sizeof(warea),fp_top1)) { + if (getword(user,sizeof(user),warea,' ')<0) { + printf("SARG: Maybe you have a broken user in your %s file.\n",top1); + exit(1); + } + if (getword(nbytes,sizeof(nbytes),warea,' ')<0) { + printf("SARG: Maybe you have a broken number of bytes in your %s file.\n",top1); + exit(1); + } + if (getword(nacc,sizeof(nacc),warea,' ')<0) { + printf("SARG: Maybe you have a broken number of access in your %s file.\n",top1); + exit(1); + } + if (getword(elap,sizeof(elap),warea,' ')<0) { + printf("SARG: Maybe you have a broken elapsed time in your %s file.\n",top1); + exit(1); + } - if(strstr(user,"_") != 0) + if(strchr(user,'_') != NULL) fixip(user); strcpy(user2,user); @@ -249,7 +283,7 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con sprintf(wperc,"%3.2f%%",perc); sprintf(wperc2,"%3.2f%%",perc2); - if(strstr(user,"TOTAL") != 0){ + if(strcmp(user,"TOTAL") == 0){ fputs("------- -------------------- -------- --------------- ------- ---------- ---------- -------\n",fp_top3); #if defined(__FreeBSD__) fprintf(fp_top3,"%-7s %20s %8qu %15s %8s %9s %10qu\n",text[107]," ",ttnacc,fixnum(ttnbytes,1)," ",buildtime(ttnelap),ttnelap); @@ -267,11 +301,6 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con fprintf(fp_top3,"%7d %20s %8s %15s %7s %10s %10lld %7s\n",posicao,user2,nacc,fixnum(tnbytes,1),wperc,buildtime(tnelap),tnelap,wperc2); #endif } - - fscanf(fp_top1,"%s",user); - fscanf(fp_top1,"%s",nbytes); - fscanf(fp_top1,"%s",nacc); - fscanf(fp_top1,"%s",elap); } if(ttnbytes) { @@ -314,7 +343,7 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con exit(1); } } - + sprintf(csort,"rm -rf %s/sarg",TempDir); system(csort); diff --git a/getconf.c b/getconf.c index 23a5bba..ebf85c2 100644 --- a/getconf.c +++ b/getconf.c @@ -259,7 +259,7 @@ static void parmtest(char *buf) if (getparam_string("topsites_num",buf,TopSitesNum,sizeof(TopSitesNum))>0) return; - if (getparam_string("topuser_num",buf,TopUsersNum,sizeof(TopUsersNum))>0) return; + if (getparam_int("topuser_num",buf,&TopUsersNum)>0) return; if (getparam_string("usertab",buf,UserTabFile,sizeof(UserTabFile))>0) return; diff --git a/include/conf.h b/include/conf.h index 9798e54..c207254 100755 --- a/include/conf.h +++ b/include/conf.h @@ -144,7 +144,7 @@ char RecordsWithoutUser[20]; char UseComma[4]; char MailUtility[PATH_MAX]; char TopSitesNum[20]; -char TopUsersNum[20]; +int TopUsersNum; char ExcludeCodes[256]; char TopsitesSortField[15]; char TopsitesSortType[20]; diff --git a/topuser.c b/topuser.c index c41bf4b..37ae57f 100644 --- a/topuser.c +++ b/topuser.c @@ -86,17 +86,17 @@ void topuser(void) exit(1); } - //fscanf(fp_in,"%s%s%s%s%s%s%s%s%s%s",user,nacc,nbytes,url,ip,time,date,elap,incac,oucac); - fgets(warea,sizeof(warea),fp_in); - if (getword(user,sizeof(user),warea,' ')<0) { - printf("SARG: Maybe you have a broken user in your %s file.\n",wger); - exit(1); - } - - strcpy(olduser,user); - totuser=1; + olduser[0]='\0'; + totuser=0; - while(!feof(fp_in)) { + while(fgets(warea,sizeof(warea),fp_in)) { + if (getword(user,sizeof(user),warea,' ')<0) { + printf("SARG: Maybe you have a broken user in your %s file.\n",wger); + exit(1); + } + if(strcmp(user,"TOTAL") == 0) { + continue; + } if (getword(nacc,sizeof(nacc),warea,' ')<0) { printf("SARG: Maybe you have a broken number of access in your %s file.\n",wger); exit(1); @@ -134,22 +134,23 @@ void topuser(void) exit(1); } if(strcmp(olduser,user) != 0) { - if(strcmp(user,"TOTAL") != 0) - totuser++; - - my_lltoa(tnbytes,val1,15); - my_lltoa(tnacc,val2,15); - my_lltoa(tnelap,val3,15); - my_lltoa(tnincache,val4,15); - my_lltoa(tnoucache,val5,15); - fprintf(fp_top2,"%s %s %s %s %s %s\n",olduser,val1,val2,val3,val4,val5); - + totuser++; + + if (olduser[0] != '\0') { + my_lltoa(tnbytes,val1,15); + my_lltoa(tnacc,val2,15); + my_lltoa(tnelap,val3,15); + my_lltoa(tnincache,val4,15); + my_lltoa(tnoucache,val5,15); + fprintf(fp_top2,"%s %s %s %s %s %s\n",olduser,val1,val2,val3,val4,val5); + + ttnbytes+=tnbytes; + ttnacc+=tnacc; + ttnelap+=tnelap; + ttnincache+=tnincache; + ttnoucache+=tnoucache; + } strcpy(olduser,user); - ttnbytes+=tnbytes; - ttnacc+=tnacc; - ttnelap+=tnelap; - ttnincache+=tnincache; - ttnoucache+=tnoucache; tnbytes=0; tnacc=0; tnelap=0; @@ -162,30 +163,23 @@ void topuser(void) tnelap+=my_atoll(elap); tnincache+=my_atoll(incac); tnoucache+=my_atoll(oucac); - - //fscanf(fp_in,"%s%s%s%s%s%s%s%s%s%s",user,nacc,nbytes,url,ip,time,date,elap,incac,oucac); - fgets(warea,sizeof(warea),fp_in); - if (getword(user,sizeof(user),warea,' ')<0) { - printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",wger); - exit(1); - } - - if(strcmp(user,"TOTAL") == 0) - continue; } - my_lltoa(tnbytes,val1,15); - my_lltoa(tnacc,val2,15); - my_lltoa(tnelap,val3,15); - my_lltoa(tnincache,val4,15); - my_lltoa(tnoucache,val5,15); - fprintf(fp_top2,"%s %s %s %s %s %s\n",olduser,val1,val2,val3,val4,val5); + if (olduser[0] != '\0') { + my_lltoa(tnbytes,val1,15); + my_lltoa(tnacc,val2,15); + my_lltoa(tnelap,val3,15); + my_lltoa(tnincache,val4,15); + my_lltoa(tnoucache,val5,15); + fprintf(fp_top2,"%s %s %s %s %s %s\n",olduser,val1,val2,val3,val4,val5); + + ttnbytes+=tnbytes; + ttnacc+=tnacc; + ttnelap+=tnelap; + ttnincache+=tnincache; + ttnoucache+=tnoucache; - ttnbytes+=tnbytes; - ttnacc+=tnacc; - ttnelap+=tnelap; - ttnincache+=tnincache; - ttnoucache+=tnoucache; + } my_lltoa(ttnbytes,val1,15); my_lltoa(ttnacc,val2,15); @@ -228,19 +222,9 @@ void topuser(void) fprintf(fp_top1,"TOTAL %s %s %s %s %s\n",val1,val2,val3,val4,val5); fclose(fp_top1); - if((fp_top1=fopen(top1,"r"))==NULL) { - fprintf(stderr, "SARG: (topuser) %s: %s\n",text[45],top1); - exit(1); - } - - if((fp_top3=fopen(top3,"w"))==NULL) { - fprintf(stderr, "SARG: (topuser) %s: %s\n",text[45],top3); - exit(1); - } - - /* - * get period - */ + /* + * get period + */ strcpy(arqper,dirname); strcat(arqper,"/sarg-period"); @@ -253,6 +237,16 @@ void topuser(void) fgets(period,sizeof(period),fp_in); fclose(fp_in); + if((fp_top1=fopen(top1,"r"))==NULL) { + fprintf(stderr, "SARG: (topuser) %s: %s\n",text[45],top1); + exit(1); + } + + if((fp_top3=fopen(top3,"w"))==NULL) { + fprintf(stderr, "SARG: (topuser) %s: %s\n",text[45],top3); + exit(1); + } + fprintf(fp_top3, "\n\n\n \n",CharSet); css(fp_top3); fprintf(fp_top3,"\n"); @@ -293,66 +287,75 @@ void topuser(void) if (fp_top3) fclose (fp_top3); return; } - strcpy(val1,text[100]); - strcpy(val2,text[98]); - strcpy(val3,text[92]); - strcpy(val4,text[93]); - sprintf(val11,"%%%s",text[93]); - sprintf(val5,"%s-%s-%s",text[113],text[114],text[112]); - strcpy(val6,text[94]); - strcpy(val7,text[95]); - sprintf(val8,"%%%s",text[99]); - strcpy(val9,"colspan=2"); - bzero(val10, 255); - - strcpy(hbc1,"class=\"header\""); - strcpy(hbc2,"class=\"header\""); - strcpy(hbc3,"class=\"header\""); - strcpy(hbc4,"class=\"header\""); - strcpy(hbc5,"class=\"header3\""); - strcpy(hbc6,"class=\"header\""); - strcpy(hbc7,"class=\"header\""); - strcpy(hbc8,"class=\"header\""); - strcpy(hbc9,"class=\"header\""); + strcpy(hbc10,"class=\"header\""); if(strstr(TopUserFields,"NUM") == 0) { bzero(val1, 255); bzero(hbc1, 30); + } else { + strcpy(val1,text[100]); + strcpy(hbc1,"class=\"header\""); } if(strstr(TopUserFields,"USERID") == 0) { bzero(val2, 255); bzero(hbc2, 30); + } else { + strcpy(val2,text[98]); + strcpy(hbc2,"class=\"header\""); } if(strstr(TopUserFields,"CONNECT") == 0) { bzero(val3, 255); bzero(hbc3, 30); + } else { + strcpy(val3,text[92]); + strcpy(hbc3,"class=\"header\""); } if(strstr(TopUserFields,"BYTES") == 0) { bzero(val4, 255); bzero(hbc4, 30); + } else { + strcpy(val4,text[93]); + strcpy(hbc4,"class=\"header\""); } if(strstr(TopUserFields,"SETYB") == 0) { bzero(val11, 255); bzero(hbc9, 30); + } else { + sprintf(val11,"%%%s",text[93]); + strcpy(hbc9,"class=\"header\""); } if(strstr(TopUserFields,"IN-CACHE-OUT") == 0) { bzero(val5, 255); bzero(hbc5, 30); bzero(val9, 255); strcpy(val10,""); + } else { + sprintf(val5,"%s-%s-%s",text[113],text[114],text[112]); + strcpy(hbc5,"class=\"header3\""); + strcpy(val9,"colspan=\"2\""); + bzero(val10, 255); } if(strstr(TopUserFields,"USED_TIME") == 0) { bzero(val6, 255); bzero(hbc6, 30); + } else { + strcpy(val6,text[94]); + strcpy(hbc6,"class=\"header\""); } if(strstr(TopUserFields,"MILISEC") == 0) { bzero(val7, 255); bzero(hbc7, 30); + } else { + strcpy(val7,text[95]); + strcpy(hbc7,"class=\"header\""); } if(strstr(TopUserFields,"%TIME") == 0) { bzero(val8, 255); bzero(hbc8, 30); + } else { + sprintf(val8,"%%%s",text[99]); + strcpy(hbc8,"class=\"header\""); } fprintf(fp_top3,"%s%s%s%s%s%s%s%s%s%s\n",hbc1,val1,hbc1,hbc2,val2,hbc3,val3,hbc4,val4,hbc9,val11,hbc5,val9,val5,val10,hbc6,val6,hbc7,val7,hbc8,val8); @@ -365,7 +368,7 @@ void topuser(void) fscanf(fp_top1,"%s%s%s%s%s%s",user,nbytes,nacc,elap,incac,oucac); continue; } else ntopuser = 1; - if(atoi(TopUsersNum) > 0 && topcount >= atoi(TopUsersNum)) goto final; + if(TopUsersNum > 0 && topcount >= TopUsersNum) goto final; strcpy(user2,user); tnbytes=my_atoll(nbytes); @@ -390,16 +393,13 @@ void topuser(void) } else ouperc = 0; if(strcmp(user,"TOTAL") != 0){ - sprintf(href1,"",user,user); strcpy(href1end,""); - sprintf(href2,"",user,user); strcpy(href2end,""); sprintf(href3,"",user); strcpy(href3end,""); - strcat(href1,user); - strcat(href2,user); - strcat(href1,".html\">"); - strcat(href2,".html\">"); + posicao++; } else { strcpy(href1," "); strcpy(href1end,""); @@ -414,8 +414,6 @@ void topuser(void) strcpy(href3end,""); } - posicao++; - tnelap=my_atoll(elap); if(userip) { @@ -646,7 +644,7 @@ void topuser(void) if(UserAgentLog[0] != '\0') { fputs("\n",fp_top3); fputs("\n",fp_top3); - fputs("Useragent Report\n",fp_top3); + fputs("Useragent Report\n",fp_top3); } fputs("",fp_top3);