#!/sw/bin/perl -w use strict; no strict "vars"; use Date::DateCalc qw(:all); #$logfile = '/u/sb/access.log'; #$logfile = '/opt/var/w3s/log/access.log'; # sunbi1 $logfile = '/sw/var/w3s/log/apache.access.log'; # en3 unless (open(FILE, "<$logfile")) { error("Can't read file '$logfile': $!"); } $infinity = calc_days(3000,1,1) - 1; $mindate = $infinity; $maxdate = 0; while () { next if (m!^(?:(?:world|www|en1|en3)\.engelschall\.com|sunti5\.sdm\.de|izb\.)!i); if (m!\bGET\s+/(?:[A-Za-z0-9\._-]+/)*([A-Za-z0-9\._-]+\.(?:tar\.gz|sea\.bin))\b!i) { $name = $1; $name =~ tr/_/-/; $namecount{$name}++; if (m!\[(\d?\d/[A-Za-z]{3}/\d\d(?:\d\d)?):!) { $date = $1; if (($yy,$mm,$dd) = decode_date($date)) { $date = calc_days($yy,$mm,$dd) - 1; $mindate = $date if ($date < $mindate); $maxdate = $date if ($date > $maxdate); unless (defined $datecount{$date}) { $datecount{$date} = { }; } $datecount{$date}->{$name}++; } } } } close(FILE); &body; exit; sub body { if (($mindate < $infinity) && ($mindate <= $maxdate) && ($maxdate > 0)) { $date = date_to_short(calc_new_date(1,1,1,$mindate)); print "Starting with $date:\n"; print "\nHit List (total):\n\n"; foreach $_ (sort alphanum keys(%namecount)) { printf("%-40s : %5d\n",$_,$namecount{$_}); } print "\nAlphabetic List (total):\n\n"; foreach $_ (sort ignore_case keys(%namecount)) { printf("%-40s : %5d\n",$_,$namecount{$_}); } #foreach $day (sort { $a <=> $b } (keys(%datecount))) for ( $day = $maxdate-2; $day <= $maxdate; $day++ ) { if (defined $datecount{$day}) { $name = $datecount{$day}; $date = date_to_short(calc_new_date(1,1,1,$day)); print "\nHit List $date:\n\n"; foreach $_ (sort alphanum2 keys(%{$name})) { printf("%-40s : %5d\n",$_,$name->{$_}); } print "\nAlphabetic List $date:\n\n"; foreach $_ (sort ignore_case keys(%{$name})) { printf("%-40s : %5d\n",$_,$name->{$_}); } } } } else { print "No entries.\n"; } } sub alphanum { my($result); $result = ( $namecount{$b} <=> $namecount{$a} ); if ($result == 0) { $result = ( lc($b) cmp lc($a) ); } return($result); } sub ignore_case { return( lc($a) cmp lc($b) ); } sub alphanum2 { my($result); $result = ( $name->{$b} <=> $name->{$a} ); if ($result == 0) { $result = ( lc($b) cmp lc($a) ); } return($result); } __END__