#!/usr/bin/perl -w
use Spreadsheet::WriteExcel;
sub commanum {
my $i;
my $tmp_len;
my $final_num = "";
my $remaining;
$tmp_len = length($_[0]);
if ($tmp_len <= 3) { return $_[0]; }
$i = 3;
while ($i < $tmp_len)
{
$final_num = "," . substr($_[0], -$i, 3) . $final_num ;
$remaining = substr($_[0], 0, $tmp_len - $i);
$i += 3;
}
return $remaining . $final_num;
}
sub setflag ($)
{
$flags{$_[0]} = 1;
}
sub clearflag ($)
{
delete $flags{$_[0]};
}
$rpt_dir = "rpt";
$flt_dir = "flt";
$totalhits = 0;
$totalpages = 0;
$totalurls = 0;
keys %pageviews = 1000;
keys %params = 10;
keys %flags = 10;
my $filter_file = "standard";
my @filter;
foreach (@ARGV)
{
if (/^--\w+=.*/)
{
($pname, $pval) = /--(\w+)=(.*)/;
$params{$pname} = $pval;
} elsif (/^-\+\w+=.*/) {
($pname, $filename) = /-\+(\w+)=(.*)/;
open (INFILE, "<$filename")
or die "Couldn't open file: $filename\n";
$tmp = $/;
$/ = '\n\n';
($pval) = <INFILE>;
$/ = $tmp;
close (INFILE);
$params{$pname} = $pval;
} elsif (/^--\w+/) {
($pname) = /--(\w+)/;
$params{$pname} = 1;
} else {
eval('require("$rpt_dir/$_")')
or die "Error in report module $rpt_dir/$_ : $@\n";
push @reports, ("&" . $_);
}
}
die "No report specified\n" if ($#reports < 0);
if (exists($params{"filter"})) { $filter_file = $params{"filter"} };
open(FILTER, "<$flt_dir/$filter_file");
while(<FILTER>)
{
if (!/^#/)
{
my ($action, $flag, $pattern) = /(accept|reject)\s(=|!)\s(.*)/
+;
if (defined($action) && defined($flag) &&defined($pattern)) {
+push @filter, [ qr/$pattern/, $flag, $action ] }
}
}
close(FILTER);
# for (my $i = 0; $i <= $#filter; $i++) { print "$filter[$i][1]\t$filt
+er[$i][0]\n" }
if (exists($params{"daily"}))
{
if (defined($date_stamp = <STDIN>))
{
chomp $date_stamp;
if (exists($params{"inline"}))
{
print "$date_stamp\t";
} else {
print "\n$date_stamp\n\n";
}
}
while (<STDIN>)
{
if ($_ eq "\n")
{
foreach $rpt (@reports)
{
eval($rpt);
}
undef %pageviews;
$totalpages = 0;
$date_stamp = <STDIN>;
if (defined($date_stamp))
{
chomp $date_stamp;
if (exists($params{"inline"}))
{
print "$date_stamp\t";
} else {
print "\n$date_stamp\n\n";
}
}
$_ = <STDIN>;
}
if (defined($_))
{
my $i = 0 ;
my $match = 0;
my ($views, $uri) = /^([0-9]+)\t(\S+)/;
while ($i <= $#filter && !$match)
{
if (($filter[$i][1] eq '=' && $uri =~ /$filter[$i][0]/
+) || ($filter[$i][1] eq '!' && $uri !~ /$filter[$i][0]/))
{
if ($filter[$i][2] eq 'accept')
{
$pageviews{$uri} += $views;
$totalpages += $views;
} else {
# print "rejecting $uri\n";
}
$match = 1;
}
$i++;
}
$totalhits += $views;
$totalurls++;
}
}
} else {
while (<STDIN>)
{
my $i = 0 ;
my $match = 0;
($views, $uri) = /^([0-9]+)\t(\S+)/o;
while ($i <= $#filter && !$match)
{
if (($filter[$i][1] eq '=' && $uri =~ /$filter[$i][0]/) ||
+ ($filter[$i][1] eq '!' && $uri !~ /$filter[$i][0]/))
{
if ($filter[$i][2] eq 'accept')
{
$pageviews{$uri} += $views;
$totalpages += $views;
} else {
# print "rejecting $views\t$uri\n";
}
$match = 1;
}
$i++;
}
$totalhits += $views;
$totalurls++;
}
foreach $rpt (@reports)
{
eval($rpt);
}
}
</readmore>