]>
git.ipfire.org Git - thirdparty/sarg.git/blob - topsites.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"
44 char general2
[ MAXLEN
];
45 char general3
[ MAXLEN
];
52 long long int tnacc
= 0 ;
53 long long int tnbytes
= 0 ;
54 long long int tntime
= 0 ;
55 long long int twork1
= 0 , twork2
= 0 , twork3
= 0 ;
59 if ( strcmp ( Privacy
, "yes" ) == 0 )
62 sprintf ( general
, "%s/sarg-general" , dirname
);
63 sprintf ( sites
, "%s/sarg-sites" , dirname
);
64 sprintf ( general2
, "%s/sarg-general2" , dirname
);
65 sprintf ( general3
, "%s/sarg-general3" , dirname
);
66 sprintf ( per
, "%s/sarg-period" , dirname
);
68 if ( strstr ( ReportType
, "topusers" ) == 0 )
69 sprintf ( report
, "%s/index.html" , dirname
);
71 sprintf ( report
, "%s/topsites.html" , dirname
);
73 if (( fp_in
= fopen ( per
, "r" )) == 0 ) {
74 fprintf ( stderr
, "SARG: (topuser) %s: %s \n " , text
[ 45 ], per
);
78 fgets ( period
, sizeof ( period
), fp_in
);
81 sprintf ( csort
, "sort -k 4,4 -o '%s' '%s'" , general2
, general
);
82 cstatus
= system ( csort
);
83 if (! WIFEXITED ( cstatus
) || WEXITSTATUS ( cstatus
)) {
84 fprintf ( stderr
, "SARG: sort command return status %d \n " , WEXITSTATUS ( cstatus
));
85 fprintf ( stderr
, "SARG: sort command: %s \n " , csort
);
89 if (( fp_in
= fopen ( general2
, "r" ))== NULL
) {
90 fprintf ( stderr
, "SARG: (topsite) %s: %s \n " , text
[ 8 ], general2
);
91 fprintf ( stderr
, "SARG: sort command: %s \n " , csort
);
95 if (( fp_ou
= fopen ( general3
, "w" ))== NULL
) {
96 fprintf ( stderr
, "SARG: (topsite) %s: %s \n " , text
[ 8 ], general3
);
100 while ( fgets ( buf
, sizeof ( buf
), fp_in
)!= NULL
) {
101 if ( getword ( url
, sizeof ( url
), buf
, ' ' )< 0 ) {
102 printf ( "SARG: Maybe you have an invalid user in your %s file of the topsites. \n " , general2
);
105 if ( strcmp ( url
, "TOTAL" ) == 0 ) {
106 if ( getword ( ttnacc
, sizeof ( ttnacc
), buf
, ' ' )< 0 ) {
107 printf ( "SARG: Maybe you have an invalid total number of access in your %s file of the topsites. \n " , general2
);
110 if ( getword ( ttnbytes
, sizeof ( ttnbytes
), buf
, ' ' )< 0 ) {
111 printf ( "SARG: Maybe you have an invalid total number of bytes in your %s file of the topsites. \n " , general2
);
114 if ( getword ( ttntime
, sizeof ( ttntime
), buf
, ' ' )< 0 ) {
115 printf ( "SARG: Maybe you have an invalid total time in your %s file of the topsites. \n " , general2
);
120 if ( getword ( nacc
, sizeof ( nacc
), buf
, ' ' )< 0 ) {
121 printf ( "SARG: Maybe you have an invalid number of access in your %s file of the topsites. \n " , general2
);
124 if ( getword ( nbytes
, sizeof ( nbytes
), buf
, ' ' )< 0 ) {
125 printf ( "SARG: Maybe you have an invalid number of bytes in your %s file of the topsites. \n " , general2
);
128 if ( getword ( url
, sizeof ( url
), buf
, ' ' )< 0 ) {
129 printf ( "SARG: Maybe you have an invalid url in your %s file of the topsites. \n " , general2
);
132 if ( getword ( ntemp
, sizeof ( ntemp
), buf
, ' ' )< 0 ) {
133 printf ( "SARG: Maybe you have a broken record or garbage in column 5 in your %s file of the topsites. \n " , general2
);
136 if ( getword ( ntemp
, sizeof ( ntemp
), buf
, ' ' )< 0 ) {
137 printf ( "SARG: Maybe you have a broken record or garbage in column 6 in your %s file of the topsites. \n " , general2
);
140 if ( getword ( ntemp
, sizeof ( ntemp
), buf
, ' ' )< 0 ) {
141 printf ( "SARG: Maybe you have a broken record or garbage in column 7 in your %s file of the topsites. \n " , general2
);
144 if ( getword ( ntime
, sizeof ( ntime
), buf
, ' ' )< 0 ) {
145 printf ( "SARG: Maybe you have a broken record or garbage in column 8 in your %s file of the topsites. \n " , general2
);
154 if ( strcmp ( url
, ourl
) != 0 ) {
155 my_lltoa ( tnacc
, val1
, 15 );
156 my_lltoa ( tnbytes
, val2
, 15 );
157 my_lltoa ( tntime
, val3
, 15 );
158 fprintf ( fp_ou
, "%s %s %s %s \n " , val1
, val2
, val3
, ourl
);
165 tnacc
+= my_atoll ( nacc
);
166 tnbytes
+= my_atoll ( nbytes
);
167 tntime
+= my_atoll ( ntime
);
170 my_lltoa ( tnacc
, val1
, 15 );
171 my_lltoa ( tnbytes
, val2
, 15 );
172 my_lltoa ( tntime
, val3
, 15 );
173 fprintf ( fp_ou
, "%s %s %s %s \n " , val1
, val2
, val3
, ourl
);
179 strlow ( TopsitesSortField
);
180 strlow ( TopsitesSortType
);
182 if ( strcmp ( TopsitesSortField
, "connect" ) == 0 )
184 if ( strcmp ( TopsitesSortField
, "bytes" ) == 0 )
186 if ( strcmp ( TopsitesSortType
, "a" ) == 0 )
188 if ( strcmp ( TopsitesSortType
, "d" ) == 0 )
191 sprintf ( csort
, "sort %s -k %s -o '%s' '%s'" , sortt
, sortf
, sites
, general3
);
192 cstatus
= system ( csort
);
193 if (! WIFEXITED ( cstatus
) || WEXITSTATUS ( cstatus
)) {
194 fprintf ( stderr
, "SARG: sort command return status %d \n " , WEXITSTATUS ( cstatus
));
195 fprintf ( stderr
, "SARG: sort command: %s \n " , csort
);
198 if (( fp_in
= fopen ( sites
, "r" ))== NULL
) {
199 fprintf ( stderr
, "SARG: (topsite) %s: %s \n " , text
[ 8 ], sites
);
200 fprintf ( stderr
, "SARG: sort command: %s \n " , csort
);
207 if (( fp_ou
= fopen ( report
, "w" ))== NULL
) {
208 fprintf ( stderr
, "SARG: (topsite) %s: %s \n " , text
[ 8 ], report
);
214 fprintf ( fp_ou
, "<!DOCTYPE HTML PUBLIC \" -//W3C//DTD HTML 4.01 Transitional//EN \" \" http://www.w3.org/TR/html4/loose.dtd \" > \n <html> \n <head> \n <meta http-equiv= \" Content-Type \" content= \" text/html; charset=%s \" > \n " , CharSet
);
216 fputs ( "</head> \n " , fp_ou
);
217 fprintf ( fp_ou
, "<body bgcolor=%s text=%s background='%s'> \n " , BgColor
, TxColor
, BgImage
);
218 if ( strlen ( LogoImage
) > 0 ) fprintf ( fp_ou
, "<center><table cellpadding= \" 0 \" cellspacing= \" 0 \" > \n <tr><th class= \" logo \" ><img src='%s' border=0 align=absmiddle width=%s height=%s> %s</th></tr> \n <tr><td height= \" 5 \" ></td></tr> \n </table> \n " , LogoImage
, Width
, Height
, LogoText
);
220 if ( strcmp ( IndexTree
, "date" ) == 0 )
221 show_sarg ( fp_ou
, "../../.." );
223 show_sarg ( fp_ou
, ".." );
225 fputs ( "<center><table cellpadding= \" 0 \" cellspacing= \" 0 \" > \n " , fp_ou
);
226 fprintf ( fp_ou
, "<tr><th class= \" title \" >%s</th></tr> \n " , Title
);
228 fprintf ( fp_ou
, "<tr><td class= \" header3 \" >%s: %s</td></tr> \n " , text
[ 89 ], period
);
229 fprintf ( fp_ou
, "<tr><th class= \" header3 \" >%s %s %s</th></tr> \n " , text
[ 83 ], TopSitesNum
, text
[ 84 ]);
230 fputs ( "</table></center> \n " , fp_ou
);
232 fputs ( "<center><table cellpadding= \" 1 \" cellspacing= \" 2 \" > \n " , fp_ou
);
233 fputs ( "<tr><td></td></tr> \n " , fp_ou
);
234 fprintf ( fp_ou
, "<tr><th class= \" header \" >%s</th><th class= \" header \" >%s</th> \
235 <th class= \" header \" >%s</th><th class= \" header \" >%s</th> \
236 <th class= \" header \" >%s</th></tr> \n " , \
237 text
[ 100 ], text
[ 91 ], text
[ 92 ], text
[ 93 ], text
[ 99 ]);
242 while ( fgets ( buf
, sizeof ( buf
), fp_in
)!= NULL
) {
243 if ( regs
> atoi ( TopSitesNum
))
245 if ( getword ( nacc
, sizeof ( nacc
), buf
, ' ' )< 0 ) {
246 printf ( "SARG: Maybe you have a broken record or garbage in your %s file. \n " , sites
);
249 if ( atoi ( nacc
) == 0 ) continue ;
250 if ( getword ( nbytes
, sizeof ( nbytes
), buf
, ' ' )< 0 ||
251 getword ( ntime
, sizeof ( ntime
), buf
, ' ' )< 0 || getword ( url
, sizeof ( url
), buf
, ' ' )< 0 ) {
252 printf ( "SARG: Maybe you have a broken record or garbage in your %s file. \n " , sites
);
256 twork1
= my_atoll ( nacc
);
257 twork2
= my_atoll ( nbytes
);
258 twork3
= my_atoll ( ntime
);
260 sprintf ( wwork1
, "%s" , fixnum ( twork1
, 1 ));
261 sprintf ( wwork2
, "%s" , fixnum ( twork2
, 1 ));
262 sprintf ( wwork3
, "%s" , fixtime ( twork3
));
264 if ( strlen ( BlockIt
) > 0 )
265 sprintf ( BlockImage
, "<a href= \" %s%s?url=%s \" ><img src= \" ../images/sarg-squidguard-block.png \" border= \" 0 \" ></a> " , wwwDocumentRoot
, BlockIt
, url
);
266 else BlockImage
[ 0 ]= '\0' ;
269 fprintf ( fp_ou
, "<tr><td class= \" data \" >%d</td><td class= \" data2 \" >%s<a href= \" http://%s \" ><font class= \" link \" >%s</font></td><td class= \" data \" >%s</td><td class= \" data \" >%s</td><td class= \" data \" >%s</td></tr> \n " , regs
, BlockImage
, url
, url
, wwork1
, wwork2
, wwork3
);
274 fputs ( "</table></center> \n " , fp_ou
);
278 fputs ( "</body> \n </html> \n " , fp_ou
);