]>
git.ipfire.org Git - thirdparty/sarg.git/blob - grepday.c
2 * AUTHOR: Pedro Lineu Orso pedro.orso@gmail.com
4 * SARG Squid Analysis Report Generator http://sarg.sourceforge.net
7 * please look at http://sarg.sourceforge.net/donations.php
8 * ---------------------------------------------------------------------
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
26 #include "include/conf.h"
27 #include "include/defs.h"
37 static int goldenrod2
;
41 //static char *font1 = FONTDIR"/FreeSans.ttf";
42 static char *font1
= FONTDIR
"/DejaVuSans.ttf";
44 #if defined(HAVE_ICONV_H) && defined(gdFTEX_Unicode)
46 #define SARGgdImageStringFT I18NgdImageStringFT
48 static char * I18NgdImageStringFT (gdImage
* im
, int *brect
, int fg
, char *fontlist
,
49 double ptsize
, double angle
, int x
, int y
, char *string
)
52 char *sstring
, *str
, *sstr
, *retval
;
55 slen
= strlen(string
) + 1; // We must include string termination character
56 sslen
= slen
* 2; // We assume that UTF8 maximum 2 times large than local
57 sstring
= (char *)malloc(sslen
);
59 fprintf(stderr
, "SARG: %s (%zu):\n",text
[59],sslen
);
63 str
= (char *) string
;
64 sstr
= (char *) sstring
;
66 localtoutf
= iconv_open ("UTF-8", CharSet
);
67 iconv (localtoutf
, (ICONV_CONST
char **)&str
, &slen
, &sstr
, &sslen
);
68 iconv_close (localtoutf
);
70 retval
= gdImageStringFTEx (im
, brect
, fg
, fontlist
, ptsize
, angle
, x
, y
, sstring
, gdFTEX_Unicode
);
76 #define SARGgdImageStringFT gdImageStringFT
79 static void bar(int x1
,long long int n
)
87 static const long long int limits
[400]={0,500,1000,2000,3000,4000,
88 5000,6000,7000,8000,9000,10000,
89 20000,30000,40000,50000,70000,90000,
90 110000,130000,150000,170000,190000,210000,
91 230000,250000,280000,310000,340000,370000,
92 400000,430000,450000,460000,490000,500000,
93 550000,600000,650000,700000,750000,800000,
94 850000,900000,950000,1000000,1100000,1200000,
95 1300000,1400000,1500000,1600000,1700000,1800000,
96 1900000,2000000,2100000,2200000,2300000,2400000,
97 2500000,2600000,2700000,2800000,2900000,3000000,
98 3100000,3200000,3300000,3400000,3500000,3600000,
99 3700000,3800000,3900000,4000000,4100000,4200000,
100 4300000,4400000,4500000,4600000,4700000,4800000,
101 4900000,5000000,5100000,5200000,5300000,5400000,
102 5500000,5600000,5700000,5800000,5900000,6000000,
103 6100000,6200000,6300000,6400000,6500000,6600000,
104 6700000,6800000,6900000,7000000,7100000,7200000,
105 7300000,7400000,7500000,7600000,7700000,7800000,
106 7900000,8000000,8100000,8200000,8300000,8400000,
107 8500000,8600000,8700000,8800000,8900000,9000000,
108 9100000,9200000,9300000,9400000,9500000,9600000,
109 9700000,9800000,9900000,10000000,10500000,11000000,
110 11500000,12000000,12500000,13000000,13500000,14000000,
111 14500000,15000000,15500000,16000000,16500000,17000000,
112 17500000,18000000,18500000,19000000,19500000,20000000,
113 21000000,22000000,23000000,24000000,25000000,26000000,
114 27000000,28000000,29000000,30000000,31000000,32000000,
115 33000000,34000000,35000000,36000000,37000000,38000000,
116 39000000,40000000,41000000,42000000,43000000,44000000,
117 45000000,46000000,47000000,48000000,49000000,50000000,
118 51000000,52000000,53000000,54000000,55000000,56000000,
119 57000000,58000000,59000000,60000000,61000000,62000000,
120 63000000,64000000,65000000,66000000,67000000,68000000,
121 69000000,70000000,71000000,72000000,73000000,74000000,
122 75000000,76000000,77000000,78000000,79000000,80000000,
123 81000000,82000000,83000000,84000000,85000000,86000000,
124 87000000,88000000,89000000,90000000,91000000,92000000,
125 93000000,94000000,95000000,96000000,97000000,98000000,
126 99000000,100000000,110000000,120000000,130000000,140000000,
127 150000000,160000000,170000000,180000000,190000000,200000000,
128 210000000,220000000,230000000,240000000,250000000,260000000,
129 270000000,280000000,290000000,300000000,310000000,320000000,
130 330000000,340000000,350000000,360000000,370000000,380000000,
131 390000000,400000000,410000000,420000000,430000000,440000000,
132 450000000,460000000,470000000,480000000,490000000,500000000,
133 510000000,520000000,530000000,540000000,550000000,560000000,
134 570000000,580000000,590000000,600000000,610000000,620000000,
135 630000000,640000000,650000000,660000000,670000000,680000000,
136 690000000,700000000,710000000,720000000,730000000,740000000,
137 750000000,760000000,770000000,780000000,790000000,800000000,
138 810000000,820000000,830000000,840000000,850000000,860000000,
139 870000000,880000000,890000000,900000000,910000000,920000000,
140 930000000,940000000,950000000,960000000,970000000,980000000,
141 990000000LL,1000000000LL,1100000000LL,1200000000LL,1300000000LL,1400000000LL,
142 1500000000LL,1600000000LL,1700000000LL,1800000000LL,1900000000LL,2000000000LL,
143 2100000000LL,2200000000LL,2300000000LL,2400000000LL,2500000000LL,2600000000LL,
144 2700000000LL,2800000000LL,2900000000LL,3000000000LL,3100000000LL,3200000000LL,
145 3300000000LL,3400000000LL,3500000000LL,3600000000LL,3700000000LL,3800000000LL,
146 3900000000LL,4000000000LL,4100000000LL,4200000000LL,4300000000LL,4400000000LL,
147 4500000000LL,4600000000LL,4700000000LL,4800000000LL,4900000000LL,5000000000LL};
149 if(access(font1
, R_OK
) != 0) {
150 fprintf(stderr
, "SARG: (grepday) Fontname: %s not found.\n",font1
);
154 if(strcmp(GraphDaysBytesBarColor
,"orange") == 0) {
155 color1
= gdImageColorAllocate(im
, 255, 233, 142);
156 color2
= gdImageColorAllocate(im
, 220, 163, 72);
157 color3
= gdImageColorAllocate(im
, 255, 198, 107);
159 if(strcmp(GraphDaysBytesBarColor
,"blue") == 0) {
160 color1
= gdImageColorAllocate(im
, 62, 80, 167);
161 color2
= gdImageColorAllocate(im
, 40, 51, 101);
162 color3
= gdImageColorAllocate(im
, 57, 73, 150);
164 if(strcmp(GraphDaysBytesBarColor
,"green") == 0) {
165 color1
= gdImageColorAllocate(im
,120,166,129);
166 color2
= gdImageColorAllocate(im
,84,113,82);
167 color3
= gdImageColorAllocate(im
,158,223,167);
169 if(strcmp(GraphDaysBytesBarColor
,"yellow") == 0) {
170 color1
= gdImageColorAllocate(im
,185,185,10);
171 color2
= gdImageColorAllocate(im
,111,111,10);
172 color3
= gdImageColorAllocate(im
,166,166,10);
174 if(strcmp(GraphDaysBytesBarColor
,"brown") == 0) {
175 color1
= gdImageColorAllocate(im
,97,45,27);
176 color2
= gdImageColorAllocate(im
,60,30,20);
177 color3
= gdImageColorAllocate(im
,88,41,26);
179 if(strcmp(GraphDaysBytesBarColor
,"red") == 0){
180 color1
= gdImageColorAllocate(im
,185,10,10);
181 color2
= gdImageColorAllocate(im
,111,10,10);
182 color3
= gdImageColorAllocate(im
,166,10,10);
185 blue
= gdImageColorAllocate(im
, 0, 0, 255);
186 white
= gdImageColorAllocate(im
, 255, 255, 255);
187 dimgray
= gdImageColorAllocate(im
, 105, 105, 105);
188 goldenrod
= gdImageColorAllocate(im
, 234, 234, 174);
189 goldenrod2
= gdImageColorAllocate(im
, 207, 181, 59);
193 for(x
=0; x
<=366; x
++) {
194 if(limits
[x
] >= num
) {
200 gdImageFilledRectangle(im
, x1
, val
, x1
+11, 425, color3
);
210 gdImageFilledPolygon(im
, points
, 4, color1
);
212 gdImageLine(im
, x1
+8, val
-2, x1
+8, val
-10, dimgray
);
213 gdImageFilledRectangle(im
, x1
-2, val
-20, x1
+18, val
-10, goldenrod
);
214 gdImageRectangle(im
, x1
-2, val
-20, x1
+18, val
-10, goldenrod2
);
216 snprintf(v
,6,"%s",fixnum(num
,0));
218 SARGgdImageStringFT(im
,&brect
[0],black
,font1
,6,0.0,x1
-1,val
-12,v
);
228 gdImageFilledPolygon(im
, points
, 4, color2
);
234 void greport_day(const char *user
)
237 FILE *fp_in
, *pngout
;
241 char wdirname
[MAXLEN
];
257 struct getwordstruct gwarea
;
258 struct getwordstruct gwarea1
;
265 im
= gdImageCreate(720, 480);
267 lavender
= gdImageColorAllocate(im
, 230, 230, 250);
268 white
= gdImageColorAllocate(im
, 255, 255, 255);
269 gray
= gdImageColorAllocate(im
, 192, 192, 192);
270 silver
= gdImageColorAllocate(im
, 211, 211, 211);
271 black
= gdImageColorAllocate(im
, 0, 0, 0);
272 blue
= gdImageColorAllocate(im
, 35, 35, 227);
273 dimgray
= gdImageColorAllocate(im
, 105, 105, 105);
274 darkblue
= gdImageColorAllocate(im
, 0, 0, 139);
276 gdImageRectangle(im
, 0, 0, 719, 479, dimgray
);
277 gdImageFilledRectangle(im
, 60, 60, 700, 420, silver
);
287 gdImageFilledPolygon(im
, points
, 4, gray
);
297 gdImageFilledPolygon(im
, points
, 4, gray
);
299 gdImageLine(im
, 50, 65, 50, 430, black
);
300 gdImageLine(im
, 45, 425, 690, 425, black
);
301 gdImageLine(im
, 50, 425, 60, 420, black
);
302 gdImageLine(im
, 60, 420, 60, 60, black
);
303 gdImageLine(im
, 700, 60, 700, 420, black
);
304 gdImageLine(im
, 690, 425, 700, 420, black
);
306 for(x
=415; x
>=65; x
=x
-10) {
307 gdImageLine(im
, 50, x
, 60, x
-5, dimgray
);
308 gdImageLine(im
, 47, x
, 50, x
, dimgray
);
311 for(x
=60; x
<=420; x
=x
+10)
312 gdImageLine(im
, 60, x
, 700, x
, dimgray
);
314 gdImageLine(im
, 60, 420, 700, 420, black
);
316 for(x
=70; x
<=680; x
=x
+20)
317 gdImageLine(im
, x
, 425, x
, 428, dimgray
);
320 for(x
=1; x
<=31; x
++) {
322 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,y
,437,s
);
327 local
= localtime(&t
);
328 if(strcmp(DateFormat
,"u") == 0)
329 strftime(ftime
, sizeof(ftime
), "%b/%d/%Y %H:%M", local
);
330 if(strcmp(DateFormat
,"e") == 0)
331 strftime(ftime
, sizeof(ftime
), "%d/%b/%Y-%H:%M", local
);
333 if(dotinuser
&& strchr(name
,'_')) {
334 subs(name
,sizeof(name
),"_",".");
337 SARGgdImageStringFT(im
,&brect
[0],darkblue
,font1
,7,0.0,620,470,ftime
);
338 if(ShowSargInfo
) SARGgdImageStringFT(im
,&brect
[0],darkblue
,font1
,10,0.0,257,15,"SARG, ");
339 SARGgdImageStringFT(im
,&brect
[0],darkblue
,font1
,10,0.0,300,15,Title
);
340 sprintf(warea
,"%s: %s",text
[89],period
);
341 SARGgdImageStringFT(im
,&brect
[0],darkblue
,font1
,9,0.0,300,27,warea
);
342 sprintf(warea
,"%s: %s",text
[90],name
);
343 SARGgdImageStringFT(im
,&brect
[0],darkblue
,font1
,9,0.0,300,38,warea
);
344 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,418," 50K");
345 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,408,"250K");
346 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,398,"500K");
347 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,388," 1M");
348 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,378," 2M");
349 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,368," 3M");
350 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,358," 4M");
351 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,348," 5M");
352 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,338," 6M");
353 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,328," 7M");
354 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,318," 8M");
355 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,308," 9M");
356 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,298," 10M");
357 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,288," 15M");
358 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,278," 20M");
359 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,268," 30M");
360 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,258," 40M");
361 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,248," 50M");
362 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,238," 60M");
363 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,228," 70M");
364 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,218," 80M");
365 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,208," 90M");
366 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,198,"100M");
367 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,188,"200M");
368 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,178,"300M");
369 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,168,"400M");
370 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,158,"500M");
371 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,148,"600M");
372 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,138,"700M");
373 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,128,"800M");
374 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,118,"900M");
375 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23,108," 1G");
376 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23, 98," 2G");
377 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23, 88," 3G");
378 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23, 78," 4G");
379 SARGgdImageStringFT(im
,&brect
[0],dimgray
,font1
,7,0.0,23, 68," 5G");
380 SARGgdImageStringFT(im
,&brect
[0],black
,font1
,10,3.14/2,20,248,text
[93]);
381 SARGgdImageStringFT(im
,&brect
[0],black
,font1
,10,0.0,330,460,text
[127]);
383 if (snprintf(graph
,sizeof(graph
),"%s/%s/graph_day.png",dirname
,user
)>=sizeof(graph
)) {
384 fprintf(stderr
, "SARG: user name too long for: %s/%s/graph_day.png\n",dirname
,user
);
387 if (snprintf(wdirname
,sizeof(wdirname
),"%s/%s.day",tmp
,user
)>=sizeof(wdirname
)) {
388 fprintf(stderr
, "SARG: user name too long for: %s/%s.day\n",tmp
,user
);
391 if (snprintf(tmp5
,sizeof(tmp5
),"%s/%s.graph",tmp
,user
)>=sizeof(tmp5
)) {
392 fprintf(stderr
, "SARG: user name too long for: %s/%s.graph\n",tmp
,user
);
396 if(access(wdirname
, R_OK
) != 0) {
401 if(strcmp(DateFormat
,"e") == 0)
402 sprintf(csort
,"sort -t\"/\" -k 1,1 -o \"%s\" \"%s\"",tmp5
,wdirname
);
404 sprintf(csort
,"sort -t\"/\" -k 2,2 -o \"%s\" \"%s\"",tmp5
,wdirname
);
406 cstatus
=system(csort
);
407 if (!WIFEXITED(cstatus
) || WEXITSTATUS(cstatus
)) {
408 fprintf(stderr
, "SARG: sort command return status %d\n",WEXITSTATUS(cstatus
));
409 fprintf(stderr
, "SARG: sort command: %s\n",csort
);
413 if((fp_in
=fopen(tmp5
,"r"))==NULL
) {
414 fprintf(stderr
, "SARG: (grepday) %s: %s\n",text
[8],tmp5
);
418 if((pngout
=fopen(graph
,"wb"))==NULL
) {
419 fprintf(stderr
, "SARG: (grepday) %s: %s\n",text
[8],graph
);
424 if(strstr(wuser
,"_") != 0)
428 if((str
=(char *) strstr(name
, ".")) != (char *) NULL
) {
429 if((str
=(char *) strstr(str
+1, ".")) != (char *) NULL
)
430 ip2name(wuser
,sizeof(wuser
));
433 get_usertab_name(wuser
,name
,sizeof(name
));
435 while(fgets(buf
,sizeof(buf
),fp_in
)!=NULL
) {
437 getword_start(&gwarea
,buf
);
438 if (getword(data
,sizeof(data
),&gwarea
,'\t')<0) {
439 printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",tmp5
);
442 getword_start(&gwarea1
,data
);
443 if (getword(day
,sizeof(day
),&gwarea1
,'/')<0) {
444 printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",tmp5
);
447 if(strcmp(DateFormat
,"u") == 0) {
448 if (getword(day
,sizeof(day
),&gwarea1
,'/')<0) {
449 printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",tmp5
);
457 if (getword(bytes
,sizeof(bytes
),&gwarea
,'\t')<0 || getword(bytes
,sizeof(bytes
),&gwarea
,'\t')<0) {
458 printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",tmp5
);
462 if(strcmp(oday
,day
) != 0) {
464 x1
= 44 +(atoi(oday
) * 20);
469 tot
=tot
+my_atoll(bytes
);
473 x1
= 44 +(atoi(day
) * 20);
477 gdImagePng(im
, pngout
);
490 void greport_cleanup(void)
493 gdFontCacheShutdown();