#!/usr/bin/perl # # This code is distributed under the terms of the GPL # # (c) 2005,2006 marco.s # # $Id: calamaris.dat,v 2.1 2006/03/12 00:00:00 marco.s Exp $ # use strict; # enable only the following on debugging purpose #use warnings; #use CGI::Carp 'fatalsToBrowser'; use Time::Local; use IO::Socket; require '/var/ipfire/general-functions.pl'; require "${General::swroot}/lang.pl"; require "${General::swroot}/header.pl"; my $unique=time; my $squidlogdir = "/var/log/squid"; my $reportdir = "${General::swroot}/proxy/calamaris/reports"; my $sargdir = "/var/log/sarg"; unless (-e $reportdir) { mkdir($reportdir) } my %cgiparams=(); my %reportsettings=(); my %selected=(); my %checked=(); my $errormessage=''; my $hintcolour='#FFFFCC'; my $commandline=''; my %monthidx = (qw(Jan 0 Feb 1 Mar 2 Apr 3 May 4 Jun 5 Jul 6 Aug 7 Sep 8 Oct 9 Nov 10 Dec 11)); my @longmonths = ( $Lang::tr{'january'}, $Lang::tr{'february'}, $Lang::tr{'march'}, $Lang::tr{'april'}, $Lang::tr{'may'}, $Lang::tr{'june'}, $Lang::tr{'july'}, $Lang::tr{'august'}, $Lang::tr{'september'}, $Lang::tr{'october'}, $Lang::tr{'november'}, $Lang::tr{'december'} ); my @now = localtime(time); my $year = $now[5]+1900; my $day_begin=0; my $month_begin=0; my $year_begin=0; my $day_end=0; my $month_end=0; my $year_end=0; $reportsettings{'ACTION'} = ''; $reportsettings{'DAY_BEGIN'} = $now[3]; $reportsettings{'MONTH_BEGIN'} = $now[4]; $reportsettings{'YEAR_BEGIN'} = $now[5]+1900; $reportsettings{'DAY_END'} = $now[3]; $reportsettings{'MONTH_END'} = $now[4]; $reportsettings{'YEAR_END'} = $now[5]+1900; $reportsettings{'ENABLE_DOMAIN'} = 'off'; $reportsettings{'NUM_DOMAINS'} = '10'; $reportsettings{'ENABLE_PERFORMANCE'} = 'off'; $reportsettings{'PERF_INTERVAL'} = '60'; $reportsettings{'ENABLE_CONTENT'} = 'off'; $reportsettings{'NUM_CONTENT'} = '10'; $reportsettings{'ENABLE_REQUESTER'} = 'off'; $reportsettings{'ENABLE_USERNAME'} = 'off'; $reportsettings{'NUM_HOSTS'} = '10'; $reportsettings{'NUM_URLS'} = '0'; $reportsettings{'ENABLE_HISTOGRAM'} = 'off'; $reportsettings{'HIST_LEVEL'} = '10'; $reportsettings{'ENABLE_VERBOSE'} = 'off'; $reportsettings{'BYTE_UNIT'} = 'B'; $reportsettings{'SKIP_GZLOGS'} = 'off'; $reportsettings{'RUN_BACKGROUND'} = 'off'; &Header::getcgihash(\%reportsettings); if ($reportsettings{'ACTION'} eq $Lang::tr{'calamaris create report'}) { $cgiparams{'DAY_BEGIN'} = $reportsettings{'DAY_BEGIN'}; $cgiparams{'MONTH_BEGIN'} = $reportsettings{'MONTH_BEGIN'}; $cgiparams{'YEAR_BEGIN'} = $reportsettings{'YEAR_BEGIN'}; $cgiparams{'DAY_END'} = $reportsettings{'DAY_END'}; $cgiparams{'MONTH_END'} = $reportsettings{'MONTH_END'}; $cgiparams{'YEAR_END'} = $reportsettings{'YEAR_END'}; delete $reportsettings{'DAY_BEGIN'}; delete $reportsettings{'MONTH_BEGIN'}; delete $reportsettings{'YEAR_BEGIN'}; delete $reportsettings{'DAY_END'}; delete $reportsettings{'MONTH_END'}; delete $reportsettings{'YEAR_END'}; delete $reportsettings{'REPORT'}; &General::writehash("${General::swroot}/proxy/calamaris/settings", \%reportsettings); $reportsettings{'DAY_BEGIN'} = $cgiparams{'DAY_BEGIN'}; $reportsettings{'MONTH_BEGIN'} = $cgiparams{'MONTH_BEGIN'}; $reportsettings{'YEAR_BEGIN'} = $cgiparams{'YEAR_BEGIN'}; $reportsettings{'DAY_END'} = $cgiparams{'DAY_END'}; $reportsettings{'MONTH_END'} = $cgiparams{'MONTH_END'}; $reportsettings{'YEAR_END'} = $cgiparams{'YEAR_END'}; $day_begin = $reportsettings{'DAY_BEGIN'}; $month_begin = $reportsettings{'MONTH_BEGIN'}; $year_begin = $reportsettings{'YEAR_BEGIN'}; $day_end = $reportsettings{'DAY_END'}; $month_end = $reportsettings{'MONTH_END'}; $year_end = $reportsettings{'YEAR_END'}; if ($reportsettings{'SKIP_GZLOGS'} eq 'on') { $commandline.='nogz '; } $commandline.="$day_begin $month_begin $year_begin $day_end $month_end $year_end"; if ($reportsettings{'ENABLE_DOMAIN'} eq 'on') { $commandline.=' -d '; $commandline.=$reportsettings{'NUM_DOMAINS'}; } if ($reportsettings{'ENABLE_PERFORMANCE'} eq 'on') { $commandline.=' -P '; $commandline.=$reportsettings{'PERF_INTERVAL'}; } if ($reportsettings{'ENABLE_CONTENT'} eq 'on') { $commandline.=' -t '; $commandline.=$reportsettings{'NUM_CONTENT'}; } if ($reportsettings{'ENABLE_HISTOGRAM'} eq 'on') { $commandline.=' -D '; $commandline.=$reportsettings{'HIST_LEVEL'}; } if ($reportsettings{'ENABLE_REQUESTER'} eq 'on') { if ($reportsettings{'ENABLE_USERNAME'} eq 'on') { $commandline.=' -u'; } $commandline.=' -r '; $commandline.=$reportsettings{'NUM_HOSTS'}; unless ($reportsettings{'NUM_URLS'} eq '0') { $commandline.=' -R '; $commandline.=$reportsettings{'NUM_URLS'}; } } unless ($reportsettings{'BYTE_UNIT'} eq 'B') { $commandline.=' -U '; $commandline.=$reportsettings{'BYTE_UNIT'}; } if ($reportsettings{'ENABLE_VERBOSE'} eq 'on') { $commandline.=' -s'; } $commandline.=' < /dev/null > /dev/null 2>&1'; if ($reportsettings{'RUN_BACKGROUND'} eq 'on') { $commandline.=" &"; } system("${General::swroot}/proxy/calamaris/bin/mkreport $commandline") } if ($reportsettings{'ACTION'} eq $Lang::tr{'export'}) { print "Content-type: application/octet-stream\n"; print "Content-length: "; print (-s "$reportdir/$reportsettings{'REPORT'}"); print "\n"; print "Content-disposition: attachment; filename=$reportsettings{'REPORT'}\n\n"; open (FILE, "$reportdir/$reportsettings{'REPORT'}"); while () { print; } close (FILE); exit; } if ($reportsettings{'ACTION'} eq $Lang::tr{'delete'}) { unlink("$reportdir/$reportsettings{'REPORT'}"); } if (-e "${General::swroot}/proxy/calamaris/settings") { &General::readhash("${General::swroot}/proxy/calamaris/settings", \%reportsettings); } &Header::showhttpheaders(); $checked{'ENABLE_DOMAIN'}{'off'} = ''; $checked{'ENABLE_DOMAIN'}{'on'} = ''; $checked{'ENABLE_DOMAIN'}{$reportsettings{'ENABLE_DOMAIN'}} = "checked='checked'"; $selected{'NUM_DOMAINS'}{$reportsettings{'NUM_DOMAINS'}} = "selected='selected'"; $checked{'ENABLE_PERFORMANCE'}{'off'} = ''; $checked{'ENABLE_PERFORMANCE'}{'on'} = ''; $checked{'ENABLE_PERFORMANCE'}{$reportsettings{'ENABLE_PERFORMANCE'}} = "checked='checked'"; $selected{'PERF_INTERVAL'}{$reportsettings{'PERF_INTERVAL'}} = "selected='selected'"; $checked{'ENABLE_CONTENT'}{'off'} = ''; $checked{'ENABLE_CONTENT'}{'on'} = ''; $checked{'ENABLE_CONTENT'}{$reportsettings{'ENABLE_CONTENT'}} = "checked='checked'"; $selected{'NUM_CONTENT'}{$reportsettings{'NUM_CONTENT'}} = "selected='selected'"; $checked{'ENABLE_REQUESTER'}{'off'} = ''; $checked{'ENABLE_REQUESTER'}{'on'} = ''; $checked{'ENABLE_REQUESTER'}{$reportsettings{'ENABLE_REQUESTER'}} = "checked='checked'"; $checked{'ENABLE_USERNAME'}{'off'} = ''; $checked{'ENABLE_USERNAME'}{'on'} = ''; $checked{'ENABLE_USERNAME'}{$reportsettings{'ENABLE_USERNAME'}} = "checked='checked'"; $selected{'NUM_HOSTS'}{$reportsettings{'NUM_HOSTS'}} = "selected='selected'"; $selected{'NUM_URLS'}{$reportsettings{'NUM_URLS'}} = "selected='selected'"; $checked{'ENABLE_HISTOGRAM'}{'off'} = ''; $checked{'ENABLE_HISTOGRAM'}{'on'} = ''; $checked{'ENABLE_HISTOGRAM'}{$reportsettings{'ENABLE_HISTOGRAM'}} = "checked='checked'"; $selected{'HIST_LEVEL'}{$reportsettings{'HIST_LEVEL'}} = "selected='selected'"; $checked{'ENABLE_VERBOSE'}{'off'} = ''; $checked{'ENABLE_VERBOSE'}{'on'} = ''; $checked{'ENABLE_VERBOSE'}{$reportsettings{'ENABLE_VERBOSE'}} = "checked='checked'"; $selected{'BYTE_UNIT'}{$reportsettings{'BYTE_UNIT'}} = "selected='selected'"; $checked{'SKIP_GZLOGS'}{'off'} = ''; $checked{'SKIP_GZLOGS'}{'on'} = ''; $checked{'SKIP_GZLOGS'}{$reportsettings{'SKIP_GZLOGS'}} = "checked='checked'"; $checked{'RUN_BACKGROUND'}{'off'} = ''; $checked{'RUN_BACKGROUND'}{'on'} = ''; $checked{'RUN_BACKGROUND'}{$reportsettings{'RUN_BACKGROUND'}} = "checked='checked'"; &Header::openpage($Lang::tr{'calamaris proxy reports'}, 1, ''); &Header::openbigbox('100%', 'left', '', $errormessage); if ($errormessage) { &Header::openbox('100%', 'left', $Lang::tr{'error messages'}); print "$errormessage \n"; &Header::closebox(); } # Link sarg reports. if (-e $sargdir) { &Header::openbox('100%', 'left', "$Lang::tr{'proxy reports'}:"); print < END # Today. if (-e "$sargdir/today") { print < $Lang::tr{'proxy reports today'} END } else { print < $Lang::tr{'proxy reports today'} END } # Daily. if (-e "$sargdir/daily") { print < $Lang::tr{'proxy reports daily'} END } else { print < $Lang::tr{'proxy reports daily'} END } # Weekly. if (-e "$sargdir/weekly") { print < $Lang::tr{'proxy reports weekly'} END } else { print < $Lang::tr{'proxy reports weekly'} END } # Monthly. if (-e "$sargdir/monthly") { print < $Lang::tr{'proxy reports monthly'} END } else { print < $Lang::tr{'proxy reports monthly'} END } print <

END &Header::closebox(); } &Header::openbox('100%', 'left', "$Lang::tr{'settings'}:"); print <
$Lang::tr{'calamaris report period'}
$Lang::tr{'from'}: $Lang::tr{'to'}:

$Lang::tr{'calamaris report options'}
$Lang::tr{'calamaris enable domain report'}: [-d] $Lang::tr{'calamaris number of domains'}:
$Lang::tr{'calamaris enable performance report'}: [-P] $Lang::tr{'calamaris report interval (in minutes)'}:
$Lang::tr{'calamaris enable content report'}: [-t] $Lang::tr{'calamaris number of content types'}:
$Lang::tr{'calamaris enable requester report'}: [-r/-R] $Lang::tr{'calamaris number of requesting hosts'}:
$Lang::tr{'calamaris show usernames'}: [-u] $Lang::tr{'calamaris number of requested urls'}:
$Lang::tr{'calamaris enable distribution histogram'}: [-D] $Lang::tr{'calamaris histogram resolution'}:
$Lang::tr{'calamaris enable verbose reporting'}: [-s] $Lang::tr{'calamaris byte unit'}:

$Lang::tr{'calamaris performance options'}
$Lang::tr{'calamaris skip archived logfiles'}: $Lang::tr{'calamaris run as background task'}:

   
END ; &Header::closebox(); &Header::openbox('100%', 'left', "$Lang::tr{'calamaris available reports'}:"); my @content=(); my @reports=(); my @reportdata=(); my $description; undef @reports; foreach (<$reportdir/*>) { open (FILE, "$_"); @content=; if ($content[3] =~ /^Report\speriod/) { $description = timelocal( substr($content[4],31,2), substr($content[4],28,2), substr($content[4],25,2), substr($content[4],15,2), $monthidx{substr($content[4],18,3)}, "20".substr($content[4],22,2)); push(@reports,join("#",$description,substr($_,rindex($_,"/")+1),$content[3],$content[4])); } close FILE; } @reports=reverse(sort(@reports)); print < END ; if (@reports) { print "\n"; } else { print "$Lang::tr{'calamaris no reports available'}\n"; } print <
END ; if (@reports) { print <  END ; } print <
 
END ; if (($reportsettings{'ACTION'} eq $Lang::tr{'calamaris view'}) && (!($reportsettings{'REPORT'} eq ''))) { &Header::closebox(); &Header::openbox('100%', 'left', "$Lang::tr{'calamaris view report'}:"); print "
\n";
	open (FILE, "$reportdir/$reportsettings{'REPORT'}");
	@content=;
	close FILE;
	foreach (@content)
	{
		s//\>/;
		print;
	}
	print "
\n"; } &Header::closebox(); &Header::closebigbox(); &Header::closepage();