From: Frédéric Marchal Date: Mon, 16 Jul 2012 09:06:35 +0000 (+0200) Subject: Add a column to the top sites report X-Git-Tag: v2.3.3~31 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=95092e58b999b8de8542479bfbd5719695df0d70;p=thirdparty%2Fsarg.git Add a column to the top sites report The new column contains the number of users who visited each site amongst the most visited sites. --- diff --git a/topsites.c b/topsites.c index 6b0949b..94380c8 100644 --- a/topsites.c +++ b/topsites.c @@ -44,6 +44,7 @@ void topsites(void) char general3[MAXLEN]; char sites[MAXLEN]; char report[MAXLEN]; + char ouser[MAX_USER_LEN]=""; const char *sortf; const char *sortt; long long int nacc; @@ -58,6 +59,7 @@ void topsites(void) long long int ttnbytes=0; long long int ttntime=0; #endif + int nusers=0; int regs=0; int cstatus; int url_len; @@ -78,7 +80,7 @@ void topsites(void) sprintf(report,"%s/topsites.html",outdirname); - if (snprintf(csort,sizeof(csort),"sort -t \"\t\" -k 4,4 -o \"%s\" \"%s\"",general2,general)>=sizeof(csort)) { + if (snprintf(csort,sizeof(csort),"sort -t \"\t\" -k 4,4 -k 1,1 -o \"%s\" \"%s\"",general2,general)>=sizeof(csort)) { debuga(_("Sort command too long when sorting file \"%s\" to \"%s\"\n"),general,general2); exit(EXIT_FAILURE); } @@ -128,7 +130,7 @@ void topsites(void) This complicated printf is due to Microsoft's inability to comply with any standard. Msvcrt is unable to print a long long int unless it is exactly 64-bits long. */ - fprintf(fp_ou,"%"PRIu64"\t%"PRIu64"\t%"PRIu64"\t%s\n",(uint64_t)tnacc,(uint64_t)tnbytes,(uint64_t)tntime,ourl); + fprintf(fp_ou,"%"PRIu64"\t%"PRIu64"\t%"PRIu64"\t%d\t%s\n",(uint64_t)tnacc,(uint64_t)tnbytes,(uint64_t)tntime,nusers,ourl); url_len=strlen(item.url); if (url_len>=ourl_size) { ourl_size=url_len+1; @@ -139,9 +141,14 @@ void topsites(void) } } strcpy(ourl,item.url); + strcpy(ouser,item.user); tnacc=0; tnbytes=0; tntime=0; + nusers=1; + } else if (strcmp(item.user,ouser)!=0) { + strcpy(ouser,item.user); + nusers++; } tnacc+=item.nacc; @@ -161,7 +168,7 @@ void topsites(void) This complicated printf is due to Microsoft's inability to comply with any standard. Msvcrt is unable to print a long long int unless it is exactly 64-bits long. */ - fprintf(fp_ou,"%"PRIu64"\t%"PRIu64"\t%"PRIu64"\t%s\n",(uint64_t)tnacc,(uint64_t)tnbytes,(uint64_t)tntime,ourl); + fprintf(fp_ou,"%"PRIu64"\t%"PRIu64"\t%"PRIu64"\t%d\t%s\n",(uint64_t)tnacc,(uint64_t)tnbytes,(uint64_t)tntime,nusers,ourl); free(ourl); } @@ -234,7 +241,7 @@ void topsites(void) fputs(">\n",fp_ou); fprintf(fp_ou,"%s%s%s%s%s\n",_("ACCESSED SITE"),_("CONNECT"),_("BYTES"),_("TIME")); + fprintf(fp_ou,"\">%s%s%s%s%s\n",_("ACCESSED SITE"),_("CONNECT"),_("BYTES"),_("TIME"),_("USERS")); regs=0; ntopsites = 0; @@ -255,6 +262,10 @@ void topsites(void) debuga(_("Maybe you have a broken record or garbage in your %s file\n"),sites); exit(EXIT_FAILURE); } + if (getword_atoi(&nusers,&gwarea,'\t')<0) { + debuga(_("The number of users is invalid in file %s\n"),sites); + exit(EXIT_FAILURE); + } if (getword_ptr(buf,&url,&gwarea,'\t')<0) { debuga(_("The url is invalid in file %s\n"),sites); exit(EXIT_FAILURE); @@ -281,7 +292,10 @@ void topsites(void) fprintf(fp_ou,">%s",fixnum(twork2,1)); fputs("%s\n",fixtime(twork3)); + fprintf(fp_ou,">%s",fixtime(twork3)); + fputs("%s\n",fixnum(nusers,1)); } fclose(fp_in); longline_destroy(&line);