#!/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) = ; $/ = $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() { 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$filter[$i][0]\n" } if (exists($params{"daily"})) { if (defined($date_stamp = )) { chomp $date_stamp; if (exists($params{"inline"})) { print "$date_stamp\t"; } else { print "\n$date_stamp\n\n"; } } while () { if ($_ eq "\n") { foreach $rpt (@reports) { eval($rpt); } undef %pageviews; $totalpages = 0; $date_stamp = ; if (defined($date_stamp)) { chomp $date_stamp; if (exists($params{"inline"})) { print "$date_stamp\t"; } else { print "\n$date_stamp\n\n"; } } $_ = ; } 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 () { 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); } }