]>
Commit | Line | Data |
---|---|---|
25697a35 | 1 | /* |
94ff9470 | 2 | * SARG Squid Analysis Report Generator http://sarg.sourceforge.net |
1164c474 | 3 | * 1998, 2010 |
25697a35 GS |
4 | * |
5 | * SARG donations: | |
6 | * please look at http://sarg.sourceforge.net/donations.php | |
1164c474 FM |
7 | * Support: |
8 | * http://sourceforge.net/projects/sarg/forums/forum/363374 | |
25697a35 GS |
9 | * --------------------------------------------------------------------- |
10 | * | |
11 | * This program is free software; you can redistribute it and/or modify | |
12 | * it under the terms of the GNU General Public License as published by | |
13 | * the Free Software Foundation; either version 2 of the License, or | |
14 | * (at your option) any later version. | |
15 | * | |
16 | * This program is distributed in the hope that it will be useful, | |
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 | * GNU General Public License for more details. | |
20 | * | |
21 | * You should have received a copy of the GNU General Public License | |
22 | * along with this program; if not, write to the Free Software | |
23 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. | |
24 | * | |
25 | */ | |
26 | ||
27 | #include "include/conf.h" | |
5f3cfd1d | 28 | #include "include/defs.h" |
25697a35 | 29 | |
32e71fa4 | 30 | void topuser(void) |
25697a35 GS |
31 | { |
32 | ||
491b862f | 33 | FILE *fp_in = NULL, *fp_ou = NULL, *fp_top1 = NULL, *fp_top2 = NULL, *fp_top3 = NULL; |
25697a35 GS |
34 | long long int ttnbytes=0, ttnacc=0, tnacc=0; |
35 | long long int tnbytes=0, ttnelap=0, tnelap=0; | |
36 | long long int tnincache=0, tnoucache=0, ttnincache=0, ttnoucache=0; | |
6e792ade FM |
37 | long long int nbytes; |
38 | long long int nacc; | |
39 | long long int elap, incac, oucac; | |
9f20cdae FM |
40 | double perc=0.00; |
41 | double perc2=0.00; | |
42 | double inperc=0.00, ouperc=0.00; | |
25697a35 | 43 | int posicao=0; |
2240dcea | 44 | char olduser[MAX_USER_LEN], csort[MAXLEN], period[MAXLEN], arqper[MAXLEN]; |
25697a35 | 45 | char wger[MAXLEN], top1[MAXLEN], top2[MAXLEN], top3[MAXLEN]; |
2240dcea | 46 | char user[MAX_USER_LEN], tusr[MAXLEN]; |
25697a35 | 47 | char ipantes[MAXLEN], nameantes[MAXLEN]; |
f2ec8c75 FM |
48 | const char *sfield="-n -k 2,2"; |
49 | const char *order="-r"; | |
c0ec9cc7 | 50 | char title[80]; |
ac422f9b | 51 | char *warea; |
ac422f9b | 52 | char ltext110[100]; |
25697a35 GS |
53 | int totuser=0; |
54 | int topcount=0; | |
ac422f9b | 55 | int i; |
25697a35 | 56 | char *s; |
456d78a5 | 57 | int cstatus; |
9c7c6346 | 58 | struct getwordstruct gwarea; |
ac422f9b | 59 | struct longlinestruct line; |
2240dcea | 60 | struct generalitemstruct item; |
f2ec8c75 | 61 | const struct userinfostruct *uinfo; |
25697a35 GS |
62 | |
63 | ipantes[0]='\0'; | |
64 | nameantes[0]='\0'; | |
65 | ||
9f20cdae FM |
66 | /* |
67 | * get period | |
68 | */ | |
d5d021c5 | 69 | snprintf(arqper,sizeof(arqper),"%s/sarg-period",outdirname); |
9f20cdae | 70 | if ((fp_in = fopen(arqper, "r")) == 0) { |
fcdc0918 | 71 | debuga(_("(topuser) Cannot open file %s\n"),arqper); |
06b39c87 | 72 | exit(EXIT_FAILURE); |
9f20cdae FM |
73 | } |
74 | if (!fgets(period,sizeof(period),fp_in)) { | |
d5d021c5 | 75 | debuga(_("(topuser) Read error in %s\n"),arqper); |
06b39c87 | 76 | exit(EXIT_FAILURE); |
9f20cdae FM |
77 | } |
78 | fclose(fp_in); | |
79 | ||
d5d021c5 FM |
80 | strcpy(wger,outdirname); |
81 | strcpy(top1,outdirname); | |
82 | strcpy(top2,outdirname); | |
83 | strcpy(top3,outdirname); | |
84 | strcpy(tusr,outdirname); | |
d6e703cc | 85 | strcat(wger,"/sarg-general"); |
25697a35 GS |
86 | strcat(top1,"/top"); |
87 | strcat(top2,"/top.tmp"); | |
d6e703cc | 88 | strcat(tusr,"/sarg-users"); |
25697a35 GS |
89 | strcat(top3,"/index.html"); |
90 | ||
d6e703cc | 91 | ntopuser = 0; |
25697a35 | 92 | if((fp_in=fopen(wger,"r"))==NULL) { |
fcdc0918 | 93 | debuga(_("(topuser) Cannot open file %s\n"),wger); |
06b39c87 | 94 | exit(EXIT_FAILURE); |
25697a35 GS |
95 | } |
96 | ||
97 | if((fp_top2=fopen(top2,"w"))==NULL) { | |
fcdc0918 | 98 | debuga(_("(topuser) Cannot open file %s\n"),top2); |
06b39c87 | 99 | exit(EXIT_FAILURE); |
25697a35 GS |
100 | } |
101 | ||
fb7c5f27 FM |
102 | olduser[0]='\0'; |
103 | totuser=0; | |
25697a35 | 104 | |
ac422f9b | 105 | if (longline_prepare(&line)<0) { |
10210234 | 106 | debuga(_("Not enough memory to read the file %s\n"),wger); |
06b39c87 | 107 | exit(EXIT_FAILURE); |
ac422f9b FM |
108 | } |
109 | ||
110 | while((warea=longline_read(fp_in,&line))!=NULL) { | |
2240dcea FM |
111 | ger_read(warea,&item,wger); |
112 | if(item.total) continue; | |
113 | if(strcmp(olduser,item.user) != 0) { | |
fb7c5f27 FM |
114 | totuser++; |
115 | ||
116 | if (olduser[0] != '\0') { | |
f2ec8c75 | 117 | fprintf(fp_top2,"%s\t%lld\t%lld\t%lld\t%lld\t%lld\n",olduser,tnbytes,tnacc,tnelap,tnincache,tnoucache); |
fb7c5f27 FM |
118 | |
119 | ttnbytes+=tnbytes; | |
120 | ttnacc+=tnacc; | |
121 | ttnelap+=tnelap; | |
122 | ttnincache+=tnincache; | |
123 | ttnoucache+=tnoucache; | |
124 | } | |
2240dcea | 125 | strcpy(olduser,item.user); |
25697a35 GS |
126 | tnbytes=0; |
127 | tnacc=0; | |
4157aa09 | 128 | tnelap=0; |
25697a35 GS |
129 | tnincache=0; |
130 | tnoucache=0; | |
131 | } | |
132 | ||
2240dcea FM |
133 | tnbytes+=item.nbytes; |
134 | tnacc+=item.nacc; | |
135 | tnelap+=item.nelap; | |
136 | tnincache+=item.incache; | |
137 | tnoucache+=item.oucache; | |
25697a35 | 138 | } |
9f20cdae | 139 | fclose(fp_in); |
ac422f9b | 140 | longline_free(&line); |
25697a35 | 141 | |
fb7c5f27 | 142 | if (olduser[0] != '\0') { |
f2ec8c75 | 143 | fprintf(fp_top2,"%s\t%lld\t%lld\t%lld\t%lld\t%lld\n",olduser,tnbytes,tnacc,tnelap,tnincache,tnoucache); |
fb7c5f27 FM |
144 | |
145 | ttnbytes+=tnbytes; | |
146 | ttnacc+=tnacc; | |
147 | ttnelap+=tnelap; | |
148 | ttnincache+=tnincache; | |
149 | ttnoucache+=tnoucache; | |
fb7c5f27 | 150 | } |
9f20cdae | 151 | fclose(fp_top2); |
25697a35 GS |
152 | |
153 | strup(TopuserSortField); | |
154 | strlow(TopuserSortOrder); | |
155 | ||
156 | if(strcmp(TopuserSortField,"USER") == 0) | |
f2ec8c75 | 157 | sfield="-k 1,1"; |
25697a35 GS |
158 | |
159 | if(strcmp(TopuserSortField,"CONNECT") == 0) | |
f2ec8c75 | 160 | sfield="-n -k 3,3"; |
25697a35 GS |
161 | |
162 | if(strcmp(TopuserSortField,"TIME") == 0) | |
f2ec8c75 | 163 | sfield="-n -k 4,4"; |
25697a35 GS |
164 | |
165 | if(strcmp(TopuserSortOrder,"normal") == 0) | |
f2ec8c75 | 166 | order=""; |
25697a35 | 167 | |
f2ec8c75 | 168 | sprintf(csort,"sort -T \"%s\" %s %s -o \"%s\" \"%s\"", TempDir, order, sfield, top1, top2); |
456d78a5 FM |
169 | cstatus=system(csort); |
170 | if (!WIFEXITED(cstatus) || WEXITSTATUS(cstatus)) { | |
10210234 FM |
171 | debuga(_("sort command return status %d\n"),WEXITSTATUS(cstatus)); |
172 | debuga(_("sort command: %s\n"),csort); | |
06b39c87 | 173 | exit(EXIT_FAILURE); |
456d78a5 | 174 | } |
25697a35 | 175 | |
fb7c5f27 | 176 | if((fp_top1=fopen(top1,"r"))==NULL) { |
fcdc0918 | 177 | debuga(_("(topuser) Cannot open file %s\n"),top1); |
06b39c87 | 178 | exit(EXIT_FAILURE); |
fb7c5f27 FM |
179 | } |
180 | ||
9f20cdae FM |
181 | unlink(top2); |
182 | ||
fb7c5f27 | 183 | if((fp_top3=fopen(top3,"w"))==NULL) { |
fcdc0918 | 184 | debuga(_("(topuser) Cannot open file %s\n"),top3); |
06b39c87 | 185 | exit(EXIT_FAILURE); |
fb7c5f27 FM |
186 | } |
187 | ||
c0ec9cc7 FM |
188 | snprintf(title,sizeof(title),_("SARG report for %s"),period); |
189 | write_html_header(fp_top3,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,title); | |
fcdc0918 FM |
190 | fputs("<tr><td class=\"header_c\">",fp_top3); |
191 | fprintf(fp_top3,_("Period: %s"),period); | |
192 | fputs("</td></tr>\n",fp_top3); | |
c36c7384 | 193 | fprintf(fp_top3,"<tr><td class=\"header_c\">%s: %s, %s</td></tr>\n",_("Sort"),TopuserSortField,TopuserSortOrder); |
fcdc0918 | 194 | fprintf(fp_top3,"<tr><th class=\"header_c\">%s</th></tr>\n",_("Top users")); |
c0ec9cc7 | 195 | close_html_header(fp_top3); |
9f20cdae | 196 | |
c0ec9cc7 | 197 | fputs("<div class=\"report\"><table cellpadding=\"1\" cellspacing=\"2\">\n",fp_top3); |
9f20cdae | 198 | fputs("<tr><td> </td><td> </td></tr>\n",fp_top3); |
25697a35 | 199 | |
fcdc0918 | 200 | if((ReportType & REPORT_TYPE_TOPSITES) != 0 && !Privacy) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"topsites.html\">%s</a></td></tr>\n",_("Top sites")); |
c36c7384 FM |
201 | if((ReportType & REPORT_TYPE_SITES_USERS) != 0 && !Privacy) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"siteuser.html\">%s</a></td></tr>\n",_("Sites & Users")); |
202 | if(dansguardian_count) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"dansguardian.html\">%s</a></td></tr>\n",_("DansGuardian")); | |
203 | if(squidguard_count) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"squidguard.html\">%s</a></td></tr>\n",_("squidGuard")); | |
204 | if ((ReportType & REPORT_TYPE_DOWNLOADS) != 0 && download_count && !Privacy && ndownload) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"download.html\">%s</a></td></tr>\n",_("Downloads")); | |
205 | if ((ReportType & REPORT_TYPE_DENIED) != 0 && denied_count && !Privacy) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"denied.html\">%s</a></td></tr>\n",_("Denied")); | |
206 | if ((ReportType & REPORT_TYPE_AUTH_FAILURES) != 0 && authfail_count && !Privacy) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"authfail.html\">%s</a></td></tr>\n",_("Authentication Failures")); | |
207 | if(smartfilter) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"smartfilter.html\">%s</a></td></tr>\n",_("SmartFilter")); | |
c0ec9cc7 | 208 | if(UserAgentLog[0] != '\0' && useragent_count) fprintf(fp_top3,"<tr><td class=\"link\" colspan=\"0\"><a href=\"useragent.html\">%s</a></td></tr>\n",_("Useragent")); |
5a1b55b7 | 209 | fputs("<tr><td></td></tr>\n</table></div>\n",fp_top3); |
25697a35 | 210 | |
085c1e1f | 211 | if ((ReportType & REPORT_TYPE_TOPUSERS) == 0) { |
491b862f | 212 | fputs("</body>\n</html>\n",fp_top3); |
9f20cdae | 213 | fclose (fp_top3); |
491b862f GS |
214 | return; |
215 | } | |
fb7c5f27 | 216 | |
5a1b55b7 | 217 | fputs("<div class=\"report\"><table cellpadding=\"1\" cellspacing=\"2\">\n",fp_top3); |
9f20cdae FM |
218 | fputs("<tr>",fp_top3); |
219 | ||
220 | if((TopUserFields & TOPUSERFIELDS_NUM) != 0) | |
c36c7384 | 221 | fprintf(fp_top3,"<th class=\"header_l\">%s</th>",_("NUM")); |
9f20cdae | 222 | if((TopUserFields & TOPUSERFIELDS_DATE_TIME) !=0 && (ReportType & REPORT_TYPE_DATE_TIME) != 0) |
b18ce4a0 | 223 | fputs("<th class=\"header_l\"></th>",fp_top3); |
9f20cdae | 224 | if((TopUserFields & TOPUSERFIELDS_USERID) != 0) |
c36c7384 | 225 | fprintf(fp_top3,"<th class=\"header_l\">%s</th>",_("USERID")); |
9f20cdae | 226 | if((TopUserFields & TOPUSERFIELDS_CONNECT) != 0) |
c36c7384 | 227 | fprintf(fp_top3,"<th class=\"header_l\">%s</th>",_("CONNECT")); |
9f20cdae | 228 | if((TopUserFields & TOPUSERFIELDS_BYTES) != 0) |
c36c7384 | 229 | fprintf(fp_top3,"<th class=\"header_l\">%s</th>",_("BYTES")); |
9f20cdae | 230 | if((TopUserFields & TOPUSERFIELDS_SETYB) != 0) |
c36c7384 | 231 | fprintf(fp_top3,"<th class=\"header_l\">%%%s</th>",_("BYTES")); |
9f20cdae | 232 | if((TopUserFields & TOPUSERFIELDS_IN_CACHE_OUT) != 0) |
c36c7384 | 233 | fprintf(fp_top3,"<th class=\"header_c\" colspan=\"2\">%s-%s-%s</th>",_("IN"),_("CACHE"),_("OUT")); |
9f20cdae | 234 | if((TopUserFields & TOPUSERFIELDS_USED_TIME) != 0) |
c36c7384 | 235 | fprintf(fp_top3,"<th class=\"header_l\">%s</th>",_("ELAPSED TIME")); |
9f20cdae | 236 | if((TopUserFields & TOPUSERFIELDS_MILISEC) != 0) |
c36c7384 | 237 | fprintf(fp_top3,"<th class=\"header_l\">%s</th>",_("MILISEC")); |
9f20cdae | 238 | if((TopUserFields & TOPUSERFIELDS_PTIME) != 0) |
c36c7384 | 239 | fprintf(fp_top3,"<th class=\"header_l\">%%%s</th>",_("TIME")); |
9f20cdae FM |
240 | |
241 | fputs("</tr>\n",fp_top3); | |
25697a35 | 242 | |
d6e703cc | 243 | ntopuser = 0; |
25697a35 | 244 | |
ac422f9b | 245 | if (longline_prepare(&line)<0) { |
10210234 | 246 | debuga(_("Not enough memory to read the downloaded files\n")); |
06b39c87 | 247 | exit(EXIT_FAILURE); |
ac422f9b FM |
248 | } |
249 | ||
250 | while((warea=longline_read(fp_top1,&line))!=NULL) { | |
9c7c6346 FM |
251 | getword_start(&gwarea,warea); |
252 | if (getword(user,sizeof(user),&gwarea,'\t')<0) { | |
10210234 | 253 | debuga(_("There is a broken user in file %s\n"),top1); |
06b39c87 | 254 | exit(EXIT_FAILURE); |
05b90947 | 255 | } |
6e792ade | 256 | if (getword_atoll(&nbytes,&gwarea,'\t')<0) { |
10210234 | 257 | debuga(_("There is a broken number of bytes in file %s\n"),top1); |
06b39c87 | 258 | exit(EXIT_FAILURE); |
05b90947 | 259 | } |
6e792ade | 260 | if (getword_atoll(&nacc,&gwarea,'\t')<0) { |
10210234 | 261 | debuga(_("There is a broken number of access in file %s\n"),top1); |
06b39c87 | 262 | exit(EXIT_FAILURE); |
05b90947 | 263 | } |
6e792ade | 264 | if (getword_atoll(&elap,&gwarea,'\t')<0) { |
10210234 | 265 | debuga(_("There is a broken elpased time in file %s\n"),top1); |
06b39c87 | 266 | exit(EXIT_FAILURE); |
05b90947 | 267 | } |
6e792ade | 268 | if (getword_atoll(&incac,&gwarea,'\t')<0) { |
10210234 | 269 | debuga(_("There is a broken in-cache size in file %s\n"),top1); |
06b39c87 | 270 | exit(EXIT_FAILURE); |
05b90947 | 271 | } |
6e792ade | 272 | if (getword_atoll(&oucac,&gwarea,'\n')<0) { |
10210234 | 273 | debuga(_("There is a broken out-of-cache size in file %s\n"),top1); |
06b39c87 | 274 | exit(EXIT_FAILURE); |
05b90947 | 275 | } |
9f20cdae | 276 | if(nacc < 1) |
d6e703cc | 277 | continue; |
05b90947 | 278 | ntopuser = 1; |
c0ec9cc7 | 279 | if(TopUsersNum > 0 && topcount >= TopUsersNum) break; |
6e792ade | 280 | tnbytes=nbytes; |
6e792ade | 281 | tnelap=elap; |
25697a35 | 282 | |
f2ec8c75 FM |
283 | uinfo=userinfo_find_from_id(user); |
284 | if (!uinfo) { | |
10210234 | 285 | debuga(_("Unknown user ID %s in file %s\n"),user,top1); |
06b39c87 | 286 | exit(EXIT_FAILURE); |
25697a35 | 287 | } |
dfb337be | 288 | |
9f20cdae | 289 | fputs("<tr>",fp_top3); |
25697a35 | 290 | |
9f20cdae FM |
291 | posicao++; |
292 | if((TopUserFields & TOPUSERFIELDS_NUM) != 0) | |
293 | fprintf(fp_top3,"<td class=\"data\">%d</td>",posicao); | |
25697a35 | 294 | |
9f20cdae | 295 | if((TopUserFields & TOPUSERFIELDS_DATE_TIME) !=0 && (ReportType & REPORT_TYPE_DATE_TIME) != 0) { |
c36c7384 | 296 | s=_("DATE/TIME"); |
ac422f9b FM |
297 | for(i=0 ; i<sizeof(ltext110)-1 && s[i] ; i++) |
298 | ltext110[i]=tolower(s[i]); | |
299 | ltext110[i]='\0'; | |
9f20cdae | 300 | fputs("<td class=\"data2\">",fp_top3); |
25697a35 | 301 | #ifdef HAVE_GD |
3becf85c | 302 | if(Graphs && GraphFont[0]!='\0') { |
c36c7384 | 303 | fprintf(fp_top3,"<a href=\"%s/graph_day.png\"><img src=\"%s/graph.png\" title=\"%s\" alt=\"G\"></a> ",uinfo->filename,ImageFile,_("Graphic")); |
9f20cdae | 304 | } |
25697a35 | 305 | #endif |
f2ec8c75 | 306 | fprintf(fp_top3,"<a href=\"%s/d%s.html\"><img src=\"%s/datetime.png\" title=\"%s",uinfo->filename,uinfo->filename,ImageFile,ltext110); |
9f20cdae | 307 | #ifdef HAVE_GD |
c36c7384 | 308 | fprintf(fp_top3," %s",_("Report")); |
9f20cdae FM |
309 | #endif |
310 | fputs("\" alt=\"T\"></a></td>",fp_top3); | |
311 | } else { | |
d5d021c5 | 312 | sprintf(val1,"%s/d%s.html",outdirname,uinfo->filename); |
9f20cdae | 313 | unlink(val1); |
25697a35 | 314 | } |
9f20cdae FM |
315 | if((TopUserFields & TOPUSERFIELDS_USERID) != 0) { |
316 | if((ReportType & REPORT_TYPE_USERS_SITES) == 0) | |
317 | fprintf(fp_top3,"<td class=\"data2\">%s</td>",name); | |
318 | else | |
f2ec8c75 | 319 | fprintf(fp_top3,"<td class=\"data2\"><a href=\"%s/%s.html\">%s</a></td>",uinfo->filename,uinfo->filename,uinfo->label); |
25697a35 | 320 | } |
9f20cdae FM |
321 | if((TopUserFields & TOPUSERFIELDS_CONNECT) != 0) |
322 | fprintf(fp_top3,"<td class=\"data\">%s</td>",fixnum(nacc,1)); | |
323 | if((TopUserFields & TOPUSERFIELDS_BYTES) != 0) | |
324 | fprintf(fp_top3,"<td class=\"data\">%s</td>",fixnum(tnbytes,1)); | |
325 | if((TopUserFields & TOPUSERFIELDS_SETYB) != 0) { | |
326 | perc=(ttnbytes) ? tnbytes * 100. / ttnbytes : 0.; | |
327 | fprintf(fp_top3,"<td class=\"data\">%3.2lf%%</td>",perc); | |
25697a35 | 328 | } |
9f20cdae FM |
329 | if((TopUserFields & TOPUSERFIELDS_IN_CACHE_OUT) != 0) { |
330 | inperc=(tnbytes) ? incac * 100. / tnbytes : 0.; | |
331 | ouperc=(tnbytes) ? oucac * 100. / tnbytes : 0.; | |
332 | fprintf(fp_top3,"<td class=\"data\">%3.2lf%%</td><td class=\"data\">%3.2lf%%</td>",inperc,ouperc); | |
25697a35 | 333 | } |
9f20cdae FM |
334 | if((TopUserFields & TOPUSERFIELDS_USED_TIME) != 0) |
335 | fprintf(fp_top3,"<td class=\"data\">%s</td>",buildtime(tnelap)); | |
336 | if((TopUserFields & TOPUSERFIELDS_MILISEC) != 0) | |
337 | fprintf(fp_top3,"<td class=\"data\">%s</td>",fixnum2(tnelap,1)); | |
338 | if((TopUserFields & TOPUSERFIELDS_PTIME) != 0) { | |
339 | perc2=(ttnelap) ? elap * 100. / ttnelap : 0.; | |
340 | fprintf(fp_top3,"<td class=\"data\">%3.2lf%%</td>",perc2); | |
dfb337be | 341 | } |
25697a35 | 342 | |
9f20cdae | 343 | fputs("</tr>\n",fp_top3); |
25697a35 GS |
344 | |
345 | topcount++; | |
25697a35 | 346 | } |
c0ec9cc7 FM |
347 | fclose(fp_top1); |
348 | unlink(top1); | |
ac422f9b | 349 | longline_free(&line); |
25697a35 | 350 | |
9f20cdae | 351 | if((TopUserFields & TOPUSERFIELDS_TOTAL) != 0) { |
9f20cdae FM |
352 | fputs("<tr>",fp_top3); |
353 | if((TopUserFields & TOPUSERFIELDS_NUM) != 0) | |
354 | fputs("<td></td>",fp_top3); | |
355 | if((TopUserFields & TOPUSERFIELDS_DATE_TIME) !=0 && (ReportType & REPORT_TYPE_DATE_TIME) != 0) | |
356 | fputs("<td></td>",fp_top3); | |
c36c7384 | 357 | fprintf(fp_top3,"<th class=\"header_l\">%s</th>",_("TOTAL")); |
9f20cdae FM |
358 | |
359 | if((TopUserFields & TOPUSERFIELDS_CONNECT) != 0) | |
b18ce4a0 | 360 | fprintf(fp_top3,"<th class=\"header_r\">%s</th>",fixnum(ttnacc,1)); |
9f20cdae | 361 | if((TopUserFields & TOPUSERFIELDS_BYTES) != 0) |
b18ce4a0 | 362 | fprintf(fp_top3,"<th class=\"header_r\">%15s</th>",fixnum(ttnbytes,1)); |
9f20cdae FM |
363 | if((TopUserFields & TOPUSERFIELDS_SETYB) != 0) |
364 | fputs("<td></td>",fp_top3); | |
365 | if((TopUserFields & TOPUSERFIELDS_IN_CACHE_OUT) != 0) | |
366 | { | |
367 | inperc=(ttnbytes) ? ttnincache * 100. / ttnbytes : 0.; | |
368 | ouperc=(ttnbytes) ? ttnoucache *100. / ttnbytes : 0.; | |
b18ce4a0 | 369 | fprintf(fp_top3,"<th class=\"header_r\">%3.2lf%%</th><th class=\"header_r\">%3.2lf%%</th>",inperc,ouperc); |
9f20cdae FM |
370 | } |
371 | if((TopUserFields & TOPUSERFIELDS_USED_TIME) != 0) | |
b18ce4a0 | 372 | fprintf(fp_top3,"<th class=\"header_r\">%s</th>",buildtime(ttnelap)); |
9f20cdae | 373 | if((TopUserFields & TOPUSERFIELDS_MILISEC) != 0) |
b18ce4a0 | 374 | fprintf(fp_top3,"<th class=\"header_r\">%s</th>",fixnum2(ttnelap,1)); |
9f20cdae FM |
375 | |
376 | fputs("</tr>\n",fp_top3); | |
25697a35 GS |
377 | } |
378 | ||
9f20cdae FM |
379 | if(ntopuser && (TopUserFields & TOPUSERFIELDS_AVERAGE) != 0) { |
380 | fputs("<tr>",fp_top3); | |
381 | if((TopUserFields & TOPUSERFIELDS_NUM) != 0) | |
382 | fputs("<td></td>",fp_top3); | |
383 | if((TopUserFields & TOPUSERFIELDS_DATE_TIME) !=0 && (ReportType & REPORT_TYPE_DATE_TIME) != 0) | |
384 | fputs("<td></td>",fp_top3); | |
c36c7384 | 385 | fprintf(fp_top3,"<th class=\"header_l\">%s</th>",_("AVERAGE")); |
9f20cdae FM |
386 | |
387 | if((TopUserFields & TOPUSERFIELDS_CONNECT) != 0) | |
b18ce4a0 | 388 | fprintf(fp_top3,"<th class=\"header_r\">%s</th>",fixnum(ttnacc/totuser,1)); |
9f20cdae FM |
389 | if((TopUserFields & TOPUSERFIELDS_BYTES) != 0) { |
390 | tnbytes=(totuser) ? ttnbytes / totuser : 0; | |
b18ce4a0 | 391 | fprintf(fp_top3,"<th class=\"header_r\">%15s</th>",fixnum(tnbytes,1)); |
9f20cdae FM |
392 | } |
393 | if((TopUserFields & TOPUSERFIELDS_SETYB) != 0) | |
394 | fputs("<td></td>",fp_top3); | |
395 | if((TopUserFields & TOPUSERFIELDS_IN_CACHE_OUT) != 0) | |
396 | fputs("<td></td><td></td>",fp_top3); | |
397 | if((TopUserFields & TOPUSERFIELDS_USED_TIME) != 0) | |
b18ce4a0 | 398 | fprintf(fp_top3,"<th class=\"header_r\">%s</th>",buildtime(ttnelap/totuser)); |
9f20cdae | 399 | if((TopUserFields & TOPUSERFIELDS_MILISEC) != 0) |
b18ce4a0 | 400 | fprintf(fp_top3,"<th class=\"header_r\">%s</th>",fixnum2(ttnelap/totuser,1)); |
9f20cdae | 401 | fputs("</tr>\n",fp_top3); |
25697a35 GS |
402 | } |
403 | ||
c0ec9cc7 FM |
404 | fputs("</table></div>\n",fp_top3); |
405 | write_html_trailer(fp_top3); | |
406 | fclose(fp_top3); | |
25697a35 GS |
407 | |
408 | if((fp_ou=fopen(tusr,"w"))==NULL) { | |
fcdc0918 | 409 | debuga(_("(topuser) Cannot open file %s\n"),tusr); |
06b39c87 | 410 | exit(EXIT_FAILURE); |
25697a35 | 411 | } |
d6e703cc | 412 | fprintf(fp_ou,"%d\n",totuser); |
25697a35 GS |
413 | fclose(fp_ou); |
414 | ||
415 | return; | |
416 | } |