]>
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 GS |
29 | |
30 | int totalger(const char *dirname, int debug, const char *outdir) | |
25697a35 | 31 | { |
13a19c1a | 32 | FILE *fp_in; |
25697a35 GS |
33 | long long int tnacc=0; |
34 | long long int tnbytes=0; | |
35 | long long int telap=0; | |
36 | long long int tincache=0, toucache=0; | |
2240dcea | 37 | char wger[MAXLEN]; |
ac422f9b | 38 | char *warea; |
afaa3b67 | 39 | longline line; |
2240dcea | 40 | struct generalitemstruct item; |
25697a35 | 41 | |
d5d021c5 | 42 | snprintf(wger,sizeof(wger),"%s/sarg-general",dirname); |
13a19c1a | 43 | if((fp_in=fopen(wger,"r+"))==NULL) { |
fcdc0918 | 44 | debuga(_("(totger) Cannot open file %s\n"),wger); |
06b39c87 | 45 | exit(EXIT_FAILURE); |
25697a35 GS |
46 | } |
47 | ||
afaa3b67 | 48 | if ((line=longline_create())==NULL) { |
10210234 | 49 | debuga(_("Not enough memory to read the temporary file %s\n"),wger); |
06b39c87 | 50 | exit(EXIT_FAILURE); |
ac422f9b FM |
51 | } |
52 | ||
afaa3b67 | 53 | while((warea=longline_read(fp_in,line))!=NULL) |
25697a35 | 54 | { |
2240dcea FM |
55 | ger_read(warea,&item,wger); |
56 | tnacc+=item.nacc; | |
57 | tnbytes+=item.nbytes; | |
58 | telap+=item.nelap; | |
59 | tincache+=item.incache; | |
60 | toucache+=item.oucache; | |
25697a35 GS |
61 | } |
62 | ||
afaa3b67 | 63 | longline_destroy(&line); |
25697a35 | 64 | |
13a19c1a FM |
65 | if (fseek(fp_in,0,SEEK_END)==-1) { |
66 | debuga(_("Failed to move to the end of %s - %s\n"),wger,strerror(errno)); | |
67 | exit(EXIT_FAILURE); | |
25697a35 GS |
68 | } |
69 | ||
f16ba15b FM |
70 | /* |
71 | This complicated printf is due to Microsoft's inability to comply with any standard. Msvcrt is unable | |
72 | to print a long long int unless it is exactly 64-bits long. | |
73 | */ | |
74 | if (fprintf(fp_in,"TOTAL\t%"PRIu64"\t%"PRIu64"\t%"PRIu64"\t%"PRIu64"\t%"PRIu64"\n",(uint64_t)tnacc,(uint64_t)tnbytes,(uint64_t)telap,(uint64_t)tincache,(uint64_t)toucache)<0) { | |
13a19c1a FM |
75 | debuga(_("Failed to write the total line in %s\n"),wger); |
76 | exit(EXIT_FAILURE); | |
77 | } | |
78 | if (fclose(fp_in)==EOF) { | |
79 | debuga(_("Failed to close file %s - %s\n"),wger,strerror(errno)); | |
80 | exit(EXIT_FAILURE); | |
81 | } | |
25697a35 GS |
82 | |
83 | return (0); | |
84 | } |