Commit | Line | Data |
---|---|---|
dc9c5d88 FAW |
1 | From: Jose Carlos Medeiros <debian@psabs.com.br> |
2 | Subject: Added logio support for new apache2 mod_logio logfiles | |
3 | ||
4 | Origin: http://www.rexursive.com/software/apache.html | |
5 | ||
6 | This is based on previous patch [1] already adapted from the original patch [2] | |
7 | to integrate with other patches in debian package. | |
8 | A fix for upstream patch [3] is integrated. | |
9 | The patch was ported to webalizer 2.21-02 | |
10 | by Julien Viard de Galbert <julien@vdg.blogsite.org> | |
11 | And later adapted to webalizer 2.23-03 with the help | |
12 | from Pim van den Berg <pim@nethuis.nl>, Thanks ! | |
13 | ||
14 | 1: 05_apache_logio.dpatch by Jose Carlos Medeiros <debian@psabs.com.br> | |
15 | 2: ftp://ftp.rexursive.com/pub/webalizer/webalizer-in-out.patch.gz | |
16 | 3: ftp://ftp.rexursive.com/pub/webalizer/webalizer-in-out-fix.patch.gz | |
17 | ||
18 | Index: webalizer/README.FIRST | |
19 | =================================================================== | |
20 | --- webalizer.orig/README.FIRST 2011-04-18 23:54:32.000000000 +0200 | |
21 | +++ webalizer/README.FIRST 2011-04-18 23:56:44.000000000 +0200 | |
22 | @@ -19,3 +19,12 @@ | |
23 | in the subject. Please do not send HTML formatted e-mails or e-mail | |
24 | containing HTML tags as my mail server will reject them. Thanks! | |
25 | ||
26 | +################### SUMMARY 05_apache_logio ########################## | |
27 | + | |
28 | +################## | |
29 | +# This Webalizer 2.01-10 patch intoduces necessary logic for presenting the | |
30 | +# numbers collected by mod_logio in the reports. There are no special | |
31 | +# configuration options required, just patch the Webalizer, configure it | |
32 | +# with the options you prefer, build it, install it and use it. | |
33 | +################## | |
34 | + | |
35 | Index: webalizer/graphs.c | |
36 | =================================================================== | |
37 | --- webalizer.orig/graphs.c 2011-04-18 23:54:32.000000000 +0200 | |
38 | +++ webalizer/graphs.c 2011-04-18 23:56:44.000000000 +0200 | |
39 | @@ -51,6 +51,8 @@ | |
40 | #define FILECOLOR file_or_blue /* files */ | |
41 | #define SITECOLOR site_or_orange /* sites */ | |
42 | #define KBYTECOLOR kbyte_or_red /* KBytes */ | |
43 | +#define IKBYTECOLOR file_or_blue /* In KBytes */ | |
44 | +#define OKBYTECOLOR hit_or_green /* Out KBytes */ | |
45 | #define PAGECOLOR page_or_cyan /* Files */ | |
46 | #define VISITCOLOR visit_or_yellow /* Visits */ | |
47 | ||
48 | @@ -106,7 +108,7 @@ | |
49 | { | |
50 | ||
51 | /* local variables */ | |
52 | - int i,j,x1,y1,x2; | |
53 | + int i,j,k,x1,y1,x2; | |
54 | int s_mth,s_year=0; | |
55 | float cw,cs,co,ci; | |
56 | ||
57 | @@ -139,10 +141,24 @@ | |
58 | { | |
59 | /* Kbytes Legend */ | |
60 | i = (strlen(msg_h_xfer)*6); | |
61 | - gdImageString(im,gdFontSmall,491-i,237, | |
62 | + j = (strlen(msg_h_ixfer)*6); | |
63 | + k = (strlen(msg_h_oxfer)*6); | |
64 | + gdImageString(im,gdFontSmall,491-i-j-k-24,237, | |
65 | (unsigned char *)msg_h_xfer,dkgrey); | |
66 | - gdImageString(im,gdFontSmall,490-i,236, | |
67 | + gdImageString(im,gdFontSmall,490-i-j-k-24,236, | |
68 | (unsigned char *)msg_h_xfer,KBYTECOLOR); | |
69 | + gdImageString(im,gdFontSmall,491-k-j-21,237,"/",dkgrey); | |
70 | + gdImageString(im,gdFontSmall,490-k-j-21,236,"/",black); | |
71 | + gdImageString(im,gdFontSmall,491-k-j-12,237, | |
72 | + (unsigned char *)msg_h_ixfer,dkgrey); | |
73 | + gdImageString(im,gdFontSmall,490-k-j-12,236, | |
74 | + (unsigned char *)msg_h_ixfer,IKBYTECOLOR); | |
75 | + gdImageString(im,gdFontSmall,491-k-9,237,"/",dkgrey); | |
76 | + gdImageString(im,gdFontSmall,490-k-9,236,"/",black); | |
77 | + gdImageString(im,gdFontSmall,491-k,237, | |
78 | + (unsigned char *)msg_h_oxfer,dkgrey); | |
79 | + gdImageString(im,gdFontSmall,490-k,236, | |
80 | + (unsigned char *)msg_h_oxfer,OKBYTECOLOR); | |
81 | ||
82 | /* Sites/Visits Legend */ | |
83 | i = (strlen(msg_h_visits)*6); | |
84 | @@ -303,28 +319,56 @@ | |
85 | } | |
86 | ||
87 | fmaxval=0.0; | |
88 | - for (i=s_mth; i<HISTSIZE; i++) | |
89 | + for (i=s_mth; i<HISTSIZE; i++){ | |
90 | if (data[i].xfer > fmaxval) fmaxval = data[i].xfer; | |
91 | + if (data[i].ixfer > fmaxval) fmaxval = data[i].ixfer; | |
92 | + if (data[i].oxfer > fmaxval) fmaxval = data[i].oxfer; | |
93 | + } | |
94 | if (fmaxval <= 0.0) fmaxval = 1.0; | |
95 | sprintf(maxvaltxt, "%.0f", fmaxval); | |
96 | gdImageStringUp(im, gdFontSmall,493,130+(strlen(maxvaltxt)*6), | |
97 | (unsigned char *)maxvaltxt,black); | |
98 | ||
99 | - cs = 180.0/graph_mths; cw = (cs/2)+(co/2); | |
100 | - ci = 308+((cw-co)/2); | |
101 | + cs = 180.0/graph_mths; cw = (cs/2); | |
102 | + co = (36/graph_mths<1)?1:36/graph_mths; | |
103 | + ci = 308+((cw-2*co)/2); | |
104 | ||
105 | /* xfer */ | |
106 | for (i=s_mth; i<HISTSIZE; i++) | |
107 | { | |
108 | percent = ((float)data[i].xfer / (float)fmaxval); | |
109 | if (percent <= 0.0) continue; | |
110 | - x1 = ci+ ((i-s_mth)*cs); | |
111 | + x1 = ci + ((i-s_mth)*cs); | |
112 | x2 = x1 + cw; | |
113 | y1 = 232 - (percent * 98); | |
114 | gdImageFilledRectangle(im, x1, y1, x2, 232, KBYTECOLOR); | |
115 | if (cw>2) gdImageRectangle(im, x1, y1, x2, 232, black); | |
116 | } | |
117 | ||
118 | + /* ixfer */ | |
119 | + for (i=s_mth; i<HISTSIZE; i++) | |
120 | + { | |
121 | + percent = ((float)data[i].ixfer / (float)fmaxval); | |
122 | + if (percent <= 0.0) continue; | |
123 | + x1 = ci + co + ((i-s_mth)*cs); | |
124 | + x2 = x1 + cw; | |
125 | + y1 = 232 - (percent * 98); | |
126 | + gdImageFilledRectangle(im, x1, y1, x2, 232, IKBYTECOLOR); | |
127 | + if (cw>2) gdImageRectangle(im, x1, y1, x2, 232, black); | |
128 | + } | |
129 | + | |
130 | + /* oxfer */ | |
131 | + for (i=s_mth; i<HISTSIZE; i++) | |
132 | + { | |
133 | + percent = ((float)data[i].oxfer / (float)fmaxval); | |
134 | + if (percent <= 0.0) continue; | |
135 | + x1 = ci + co + co + ((i-s_mth)*cs); | |
136 | + x2 = x1 + cw; | |
137 | + y1 = 232 - (percent * 98); | |
138 | + gdImageFilledRectangle(im, x1, y1, x2, 232, OKBYTECOLOR); | |
139 | + if (cw>2) gdImageRectangle(im, x1, y1, x2, 232, black); | |
140 | + } | |
141 | + | |
142 | /* stat the file */ | |
143 | if ( !(lstat(fname, &out_stat)) ) | |
144 | { | |
145 | @@ -365,8 +409,10 @@ | |
146 | u_int64_t data2[31], /* data2 (files) */ | |
147 | u_int64_t data3[31], /* data3 (sites) */ | |
148 | double data4[31], /* data4 (kbytes) */ | |
149 | - u_int64_t data5[31], /* data5 (views) */ | |
150 | - u_int64_t data6[31]) /* data6 (visits) */ | |
151 | + double data5[31], /* data4 (kbytes) */ | |
152 | + double data6[31], /* data4 (kbytes) */ | |
153 | + u_int64_t data7[31], /* data5 (views) */ | |
154 | + u_int64_t data8[31]) /* data6 (visits) */ | |
155 | { | |
156 | ||
157 | /* local variables */ | |
158 | @@ -415,7 +461,7 @@ | |
159 | { | |
160 | if (data1[i] > maxval) maxval = data1[i]; /* get max val */ | |
161 | if (data2[i] > maxval) maxval = data2[i]; | |
162 | - if (data5[i] > maxval) maxval = data5[i]; | |
163 | + if (data7[i] > maxval) maxval = data7[i]; | |
164 | } | |
165 | if (maxval <= 0) maxval = 1; | |
166 | sprintf(maxvaltxt, "%llu", maxval); | |
167 | @@ -425,22 +471,36 @@ | |
168 | if (graph_legend) /* Print color coded legends? */ | |
169 | { | |
170 | /* Kbytes Legend */ | |
171 | + i=(strlen(msg_h_xfer)*6); | |
172 | + j=(strlen(msg_h_ixfer)*6); | |
173 | gdImageStringUp(im,gdFontSmall,494,376, | |
174 | (unsigned char *)msg_h_xfer,dkgrey); | |
175 | gdImageStringUp(im,gdFontSmall,493,375, | |
176 | (unsigned char *)msg_h_xfer,KBYTECOLOR); | |
177 | + gdImageStringUp(im,gdFontSmall,494,376-i-3,"/",dkgrey); | |
178 | + gdImageStringUp(im,gdFontSmall,493,375-i-3,"/",black); | |
179 | + gdImageStringUp(im,gdFontSmall,494,376-i-12, | |
180 | + (unsigned char *)msg_h_ixfer,dkgrey); | |
181 | + gdImageStringUp(im,gdFontSmall,493,375-i-12, | |
182 | + (unsigned char *)msg_h_ixfer,IKBYTECOLOR); | |
183 | + gdImageStringUp(im,gdFontSmall,494,376-i-j-15,"/",dkgrey); | |
184 | + gdImageStringUp(im,gdFontSmall,493,375-i-j-15,"/",black); | |
185 | + gdImageStringUp(im,gdFontSmall,494,376-i-j-24, | |
186 | + (unsigned char *)msg_h_oxfer,dkgrey); | |
187 | + gdImageStringUp(im,gdFontSmall,493,375-i-j-24, | |
188 | + (unsigned char *)msg_h_oxfer,OKBYTECOLOR); | |
189 | ||
190 | /* Sites/Visits Legend */ | |
191 | i = (strlen(msg_h_sites)*6); | |
192 | - gdImageStringUp(im,gdFontSmall,494,276, | |
193 | + gdImageStringUp(im,gdFontSmall,494,256, | |
194 | (unsigned char *)msg_h_sites,dkgrey); | |
195 | - gdImageStringUp(im,gdFontSmall,493,275, | |
196 | + gdImageStringUp(im,gdFontSmall,493,255, | |
197 | (unsigned char *)msg_h_sites,SITECOLOR); | |
198 | - gdImageStringUp(im,gdFontSmall,494,276-i-3,(unsigned char *)"/",dkgrey); | |
199 | - gdImageStringUp(im,gdFontSmall,493,275-i-3,(unsigned char *)"/",black); | |
200 | - gdImageStringUp(im,gdFontSmall,494,276-i-12, | |
201 | + gdImageStringUp(im,gdFontSmall,494,256-i-3,(unsigned char *)"/",dkgrey); | |
202 | + gdImageStringUp(im,gdFontSmall,493,255-i-3,(unsigned char *)"/",black); | |
203 | + gdImageStringUp(im,gdFontSmall,494,256-i-12, | |
204 | (unsigned char *)msg_h_visits,dkgrey); | |
205 | - gdImageStringUp(im,gdFontSmall,493,275-i-12, | |
206 | + gdImageStringUp(im,gdFontSmall,493,255-i-12, | |
207 | (unsigned char *)msg_h_visits,VISITCOLOR); | |
208 | ||
209 | /* Pages/Files/Hits Legend */ | |
210 | @@ -489,11 +549,11 @@ | |
211 | gdImageRectangle(im, x1, y1, x2, 176, black); | |
212 | } | |
213 | ||
214 | - /* data5 */ | |
215 | + /* data7 */ | |
216 | for (i=0; i<31; i++) | |
217 | { | |
218 | - if (data5[i]==0) continue; | |
219 | - percent = ((float)data5[i] / (float)maxval); | |
220 | + if (data7[i]==0) continue; | |
221 | + percent = ((float)data7[i] / (float)maxval); | |
222 | if (percent <= 0.0) continue; | |
223 | x1 = 29 + (i*15); | |
224 | x2 = x1 + 7; | |
225 | @@ -507,7 +567,7 @@ | |
226 | for (i=0; i<31; i++) | |
227 | { | |
228 | if (data3[i]>maxval) maxval = data3[i]; | |
229 | - if (data6[i]>maxval) maxval = data6[i]; | |
230 | + if (data8[i]>maxval) maxval = data8[i]; | |
231 | } | |
232 | if (maxval <= 0) maxval = 1; | |
233 | sprintf(maxvaltxt, "%llu", maxval); | |
234 | @@ -517,7 +577,7 @@ | |
235 | /* data 6 */ | |
236 | for (i=0; i<31; i++) | |
237 | { | |
238 | - percent = ((float)data6[i] / (float)maxval); | |
239 | + percent = ((float)data8[i] / (float)maxval); | |
240 | if (percent <= 0.0) continue; | |
241 | x1 = 25 + (i*15); | |
242 | x2 = x1 + 8; | |
243 | @@ -538,26 +598,55 @@ | |
244 | gdImageRectangle(im, x1, y1, x2, 276, black); | |
245 | } | |
246 | ||
247 | - /* data4 */ | |
248 | + /* xfer */ | |
249 | fmaxval=0.0; | |
250 | - for (i=0; i<31; i++) | |
251 | + for (i=0; i<31; i++){ | |
252 | if (data4[i]>fmaxval) fmaxval = data4[i]; | |
253 | + if (data5[i]>fmaxval) fmaxval = data5[i]; | |
254 | + if (data6[i]>fmaxval) fmaxval = data6[i]; | |
255 | + } | |
256 | if (fmaxval <= 0.0) fmaxval = 1.0; | |
257 | sprintf(maxvaltxt, "%.0f", fmaxval/1024); | |
258 | gdImageStringUp(im, gdFontSmall,8,280+(strlen(maxvaltxt)*6), | |
259 | (unsigned char *)maxvaltxt, black); | |
260 | ||
261 | + /* data4 */ | |
262 | for (i=0; i<31; i++) | |
263 | { | |
264 | percent = data4[i] / fmaxval; | |
265 | if (percent <= 0.0) continue; | |
266 | - x1 = 26 + (i*15); | |
267 | - x2 = x1 + 10; | |
268 | + x1 = 25 + (i*15); | |
269 | + x2 = x1 + 7; | |
270 | y1 = 375 - ( percent * 91 ); | |
271 | gdImageFilledRectangle(im, x1, y1, x2, 375, KBYTECOLOR); | |
272 | gdImageRectangle(im, x1, y1, x2, 375, black); | |
273 | } | |
274 | ||
275 | + /* data5 */ | |
276 | + for (i=0; i<31; i++) | |
277 | + { | |
278 | + percent = data5[i] / fmaxval; | |
279 | + if (percent <= 0.0) continue; | |
280 | + x1 = 27 + (i*15); | |
281 | + x2 = x1 + 7; | |
282 | + y1 = 375 - ( percent * 91 ); | |
283 | + gdImageFilledRectangle(im, x1, y1, x2, 375, IKBYTECOLOR); | |
284 | + gdImageRectangle(im, x1, y1, x2, 375, black); | |
285 | + } | |
286 | + | |
287 | + /* data6 */ | |
288 | + for (i=0; i<31; i++) | |
289 | + { | |
290 | + percent = data6[i] / fmaxval; | |
291 | + if (percent <= 0.0) continue; | |
292 | + x1 = 29 + (i*15); | |
293 | + x2 = x1 + 7; | |
294 | + y1 = 375 - ( percent * 91 ); | |
295 | + gdImageFilledRectangle(im, x1, y1, x2, 375, OKBYTECOLOR); | |
296 | + gdImageRectangle(im, x1, y1, x2, 375, black); | |
297 | + } | |
298 | + | |
299 | + | |
300 | /* stat the file */ | |
301 | if ( !(lstat(fname, &out_stat)) ) | |
302 | { | |
303 | Index: webalizer/graphs.h | |
304 | =================================================================== | |
305 | --- webalizer.orig/graphs.h 2011-04-18 23:54:32.000000000 +0200 | |
306 | +++ webalizer/graphs.h 2011-04-18 23:56:44.000000000 +0200 | |
307 | @@ -2,7 +2,8 @@ | |
308 | #define _GRAPHS_H | |
309 | ||
310 | extern int month_graph6(char *, char *, int, int, u_int64_t *, | |
311 | - u_int64_t *, u_int64_t *, double *, u_int64_t *, u_int64_t *); | |
312 | + u_int64_t *, u_int64_t *, double *, double *, double *, u_int64_t *, | |
313 | + u_int64_t *); | |
314 | extern int year_graph6x(char *, char *, struct hist_rec *); | |
315 | extern int day_graph3(char *, char *, u_int64_t *, u_int64_t *, u_int64_t *); | |
316 | extern int pie_chart(char *, char *, u_int64_t, u_int64_t *, char **); | |
317 | Index: webalizer/hashtab.c | |
318 | =================================================================== | |
319 | --- webalizer.orig/hashtab.c 2011-04-18 23:54:39.000000000 +0200 | |
320 | +++ webalizer/hashtab.c 2011-04-18 23:56:44.000000000 +0200 | |
321 | @@ -155,6 +155,8 @@ | |
322 | u_int64_t count, /* hit count */ | |
323 | u_int64_t file, /* File flag */ | |
324 | double xfer, /* xfer size */ | |
325 | + double ixfer, /* in xfer size */ | |
326 | + double oxfer, /* out xfer size */ | |
327 | u_int64_t *ctr, /* counter */ | |
328 | u_int64_t visit, /* visits */ | |
329 | u_int64_t tstamp,/* timestamp */ | |
330 | @@ -177,6 +179,8 @@ | |
331 | nptr->count = count; | |
332 | nptr->files = file; | |
333 | nptr->xfer = xfer; | |
334 | + nptr->ixfer = ixfer; | |
335 | + nptr->oxfer = oxfer; | |
336 | nptr->next = NULL; | |
337 | htab[hval] = nptr; | |
338 | if (type!=OBJ_GRP) (*ctr)++; | |
339 | @@ -219,9 +223,11 @@ | |
340 | if ((type==cptr->flag)||((type!=OBJ_GRP)&&(cptr->flag!=OBJ_GRP))) | |
341 | { | |
342 | /* found... bump counter */ | |
343 | - cptr->count+=count; | |
344 | - cptr->files+=file; | |
345 | - cptr->xfer +=xfer; | |
346 | + cptr->count +=count; | |
347 | + cptr->files +=file; | |
348 | + cptr->xfer +=xfer; | |
349 | + cptr->ixfer +=ixfer; | |
350 | + cptr->oxfer +=oxfer; | |
351 | ||
352 | if (ispage(log_rec.url)) | |
353 | { | |
354 | @@ -253,6 +259,8 @@ | |
355 | nptr->count = count; | |
356 | nptr->files = file; | |
357 | nptr->xfer = xfer; | |
358 | + nptr->ixfer = ixfer; | |
359 | + nptr->oxfer = oxfer; | |
360 | nptr->next = htab[hval]; | |
361 | htab[hval]=nptr; | |
362 | if (type!=OBJ_GRP) (*ctr)++; | |
363 | @@ -361,6 +369,7 @@ | |
364 | /*********************************************/ | |
365 | ||
366 | int put_unode(char *str, int type, u_int64_t count, double xfer, | |
367 | + double ixfer, double oxfer, | |
368 | u_int64_t *ctr, u_int64_t entry, u_int64_t exit, UNODEPTR *htab) | |
369 | { | |
370 | UNODEPTR cptr,nptr; | |
371 | @@ -378,6 +387,8 @@ | |
372 | nptr->flag = type; | |
373 | nptr->count= count; | |
374 | nptr->xfer = xfer; | |
375 | + nptr->ixfer= ixfer; | |
376 | + nptr->oxfer= oxfer; | |
377 | nptr->next = NULL; | |
378 | nptr->entry= entry; | |
379 | nptr->exit = exit; | |
380 | @@ -395,8 +406,10 @@ | |
381 | if ((type==cptr->flag)||((type!=OBJ_GRP)&&(cptr->flag!=OBJ_GRP))) | |
382 | { | |
383 | /* found... bump counter */ | |
384 | - cptr->count+=count; | |
385 | - cptr->xfer += xfer; | |
386 | + cptr->count +=count; | |
387 | + cptr->xfer += xfer; | |
388 | + cptr->ixfer += ixfer; | |
389 | + cptr->oxfer += oxfer; | |
390 | return 0; | |
391 | } | |
392 | } | |
393 | @@ -408,6 +421,8 @@ | |
394 | nptr->flag = type; | |
395 | nptr->count= count; | |
396 | nptr->xfer = xfer; | |
397 | + nptr->ixfer= ixfer; | |
398 | + nptr->oxfer= oxfer; | |
399 | nptr->next = htab[hval]; | |
400 | nptr->entry= entry; | |
401 | nptr->exit = exit; | |
402 | @@ -846,6 +861,8 @@ | |
403 | u_int64_t count, /* hit count */ | |
404 | u_int64_t file, /* File flag */ | |
405 | double xfer, /* xfer size */ | |
406 | + double ixfer, /* in xfer size */ | |
407 | + double oxfer, /* out xfer size */ | |
408 | u_int64_t *ctr, /* counter */ | |
409 | u_int64_t visit, /* visits */ | |
410 | u_int64_t tstamp,/* timestamp */ | |
411 | @@ -867,6 +884,8 @@ | |
412 | nptr->count = count; | |
413 | nptr->files = file; | |
414 | nptr->xfer = xfer; | |
415 | + nptr->ixfer = ixfer; | |
416 | + nptr->oxfer = oxfer; | |
417 | nptr->next = NULL; | |
418 | htab[hval] = nptr; | |
419 | if (type!=OBJ_GRP) (*ctr)++; | |
420 | @@ -893,9 +912,11 @@ | |
421 | if ((type==cptr->flag)||((type!=OBJ_GRP)&&(cptr->flag!=OBJ_GRP))) | |
422 | { | |
423 | /* found... bump counter */ | |
424 | - cptr->count+=count; | |
425 | - cptr->files+=file; | |
426 | - cptr->xfer +=xfer; | |
427 | + cptr->count +=count; | |
428 | + cptr->files +=file; | |
429 | + cptr->xfer +=xfer; | |
430 | + cptr->ixfer +=ixfer; | |
431 | + cptr->oxfer +=oxfer; | |
432 | ||
433 | if (ispage(log_rec.url)) | |
434 | { | |
435 | @@ -915,6 +936,8 @@ | |
436 | nptr->count = count; | |
437 | nptr->files = file; | |
438 | nptr->xfer = xfer; | |
439 | + nptr->ixfer = ixfer; | |
440 | + nptr->oxfer = oxfer; | |
441 | nptr->next = htab[hval]; | |
442 | htab[hval] = nptr; | |
443 | if (type!=OBJ_GRP) (*ctr)++; | |
444 | Index: webalizer/hashtab.h | |
445 | =================================================================== | |
446 | --- webalizer.orig/hashtab.h 2011-04-18 23:54:32.000000000 +0200 | |
447 | +++ webalizer/hashtab.h 2011-04-18 23:56:44.000000000 +0200 | |
448 | @@ -32,6 +32,8 @@ | |
449 | u_int64_t tstamp; | |
450 | char *lasturl; | |
451 | double xfer; | |
452 | + double ixfer; | |
453 | + double oxfer; | |
454 | struct hnode *next; }; | |
455 | ||
456 | struct unode { char *string; /* url hash table structure */ | |
457 | @@ -41,6 +43,8 @@ | |
458 | u_int64_t entry; /* entry page counter */ | |
459 | u_int64_t exit; /* exit page counter */ | |
460 | double xfer; /* xfer size in bytes */ | |
461 | + double ixfer; /* in xfer size in bytes */ | |
462 | + double oxfer; /* out xfer size in bytes */ | |
463 | struct unode *next; }; /* pointer to next node */ | |
464 | ||
465 | struct rnode { char *string; /* referrer hash table struct */ | |
466 | @@ -64,6 +68,8 @@ | |
467 | u_int64_t visit; | |
468 | u_int64_t tstamp; | |
469 | double xfer; | |
470 | + double ixfer; | |
471 | + double oxfer; | |
472 | struct inode *next; }; | |
473 | ||
474 | extern HNODEPTR sm_htab[MAXHASH]; /* hash tables */ | |
475 | @@ -77,11 +83,11 @@ | |
476 | extern DNODEPTR host_table[MAXHASH]; /* DNS resolver table */ | |
477 | #endif | |
478 | ||
479 | -extern int put_hnode(char *, int, u_int64_t, u_int64_t, double, | |
480 | +extern int put_hnode(char *, int, u_int64_t, u_int64_t, double, double, double, | |
481 | u_int64_t *, u_int64_t, u_int64_t, char *, HNODEPTR *); | |
482 | -extern int put_unode(char *, int, u_int64_t, double, u_int64_t *, | |
483 | +extern int put_unode(char *, int, u_int64_t, double, double, double, u_int64_t *, | |
484 | u_int64_t, u_int64_t, UNODEPTR *); | |
485 | -extern int put_inode(char *, int, u_int64_t, u_int64_t, double, | |
486 | +extern int put_inode(char *, int, u_int64_t, u_int64_t, double, double, double, | |
487 | u_int64_t *, u_int64_t, u_int64_t, INODEPTR *); | |
488 | extern int put_rnode(char *, int, u_int64_t, u_int64_t *, RNODEPTR *); | |
489 | extern int put_anode(char *, int, u_int64_t, u_int64_t *, ANODEPTR *); | |
490 | Index: webalizer/lang.h | |
491 | =================================================================== | |
492 | --- webalizer.orig/lang.h 2011-04-18 23:54:32.000000000 +0200 | |
493 | +++ webalizer/lang.h 2011-04-18 23:56:44.000000000 +0200 | |
494 | @@ -108,6 +108,8 @@ | |
495 | extern char *msg_h_files ; | |
496 | extern char *msg_h_sites ; | |
497 | extern char *msg_h_xfer ; | |
498 | +extern char *msg_h_ixfer ; | |
499 | +extern char *msg_h_oxfer ; | |
500 | extern char *msg_h_hname ; | |
501 | extern char *msg_h_url ; | |
502 | extern char *msg_h_agent ; | |
503 | @@ -132,6 +134,8 @@ | |
504 | extern char *msg_mtot_th ; | |
505 | extern char *msg_mtot_tf ; | |
506 | extern char *msg_mtot_tx ; | |
507 | +extern char *msg_mtot_ix ; | |
508 | +extern char *msg_mtot_ox ; | |
509 | extern char *msg_mtot_us ; | |
510 | extern char *msg_mtot_ur ; | |
511 | extern char *msg_mtot_ua ; | |
512 | @@ -144,6 +148,8 @@ | |
513 | extern char *msg_mtot_msd; | |
514 | extern char *msg_mtot_mvd; | |
515 | extern char *msg_mtot_mkd; | |
516 | +extern char *msg_mtot_ikd; | |
517 | +extern char *msg_mtot_okd; | |
518 | extern char *msg_mtot_rc ; | |
519 | ||
520 | extern char *msg_dtot_ds ; | |
521 | Index: webalizer/lang/webalizer_lang.catalan | |
522 | =================================================================== | |
523 | --- webalizer.orig/lang/webalizer_lang.catalan 2011-04-18 23:54:39.000000000 +0200 | |
524 | +++ webalizer/lang/webalizer_lang.catalan 2011-04-18 23:56:44.000000000 +0200 | |
525 | @@ -224,7 +224,9 @@ | |
526 | char *msg_h_visits= "Visites"; | |
527 | char *msg_h_files = "Fitxers"; | |
528 | char *msg_h_sites = "Navegadors"; | |
529 | -char *msg_h_xfer = "KBytes"; | |
530 | +char *msg_h_xfer = "kB F"; | |
531 | +char *msg_h_ixfer = "kB In"; | |
532 | +char *msg_h_oxfer = "kB Out"; | |
533 | char *msg_h_hname = "Visitant"; | |
534 | char *msg_h_url = "URL"; | |
535 | char *msg_h_agent = "Navegador"; | |
536 | @@ -251,6 +253,8 @@ | |
537 | char *msg_mtot_th = "Accessos totals"; | |
538 | char *msg_mtot_tf = "Fitxers totals"; | |
539 | char *msg_mtot_tx = "KBytes totals"; | |
540 | +char *msg_mtot_ix = "In KBytes totals"; | |
541 | +char *msg_mtot_ox = "Out KBytes totals"; | |
542 | char *msg_mtot_us = "Servidors totals"; | |
543 | char *msg_mtot_ur = "Referents totals"; | |
544 | char *msg_mtot_ua = "Navegadors totals"; | |
545 | @@ -263,6 +267,8 @@ | |
546 | char *msg_mtot_msd= "Servidors per dia"; | |
547 | char *msg_mtot_mvd= "Visites per dia"; | |
548 | char *msg_mtot_mkd= "KBytes per dia"; | |
549 | +char *msg_mtot_ikd= "In KBytes per dia"; | |
550 | +char *msg_mtot_okd= "Out KBytes per dia"; | |
551 | char *msg_mtot_rc = "Accessos segons codi de resposta"; | |
552 | ||
553 | /* daily total table */ | |
554 | Index: webalizer/lang/webalizer_lang.chinese | |
555 | =================================================================== | |
556 | --- webalizer.orig/lang/webalizer_lang.chinese 2011-04-18 23:54:32.000000000 +0200 | |
557 | +++ webalizer/lang/webalizer_lang.chinese 2011-04-18 23:56:44.000000000 +0200 | |
558 | @@ -218,7 +218,9 @@ | |
559 | char *msg_h_visits= "Visits"; | |
560 |