#!/local/bin/perl # # Analyse the access logs # # Mark - demo (inefficient) # $cutoff = 100; $access = "/iu/nexus/local/iu/httpd/logs/access_log"; $save = "/iu/nexus/ud/mark/access-log-cache"; ############################################################# # Load cache ############################################################# open (CACHE, $save) || die "Can't open cache\n"; while () { ($type,$number,$url) = split; $cachedtraffic += $number; if ($type eq "HTML:") { $HTMLcache{$url} = $number; } elsif ($type eq "CGI:") { $CGIcache{$url}= $number; } else { $IMGcache{$url} = $number; } } close (CACHE); ############################################################# # Load logs ############################################################# open (ACCESS,$access) || die "Can't open $access\n"; open (SAVE,">$save") || die "Can't open $save\n"; while () { if (/POST/) { ($s1,$s2,$s3,$s4,$s5,$s6,$url) = split; $CGI{$url}++; next; } if (/GET/) { ($s1,$s2,$s3,$s4,$s5,$s6,$url) = split; if (!/gif/ && !/jpg/) { $HTML{$url}++; } else { $IMG{$url}++; } next; } } close(ACCESS); ############################################################# $tophtml = 0; foreach $k (keys %HTML) { if ($HTML{$k} > $cutoff) { $htmltraffic += $HTML{$k}; print SAVE "HTML: $HTML{$k} $k\n"; if ($HTML{$k} > $tophtml) { $tophtml = $HTML{$k}; } } else { delete $HTML{$k}; } } ############################################################# $topimg = 0; foreach $k (keys %IMG) { if ($IMG{$k} > $cutoff) { $imgtraffic+=$IMG{$k}; print SAVE "IMG: $IMG{$k} $k\n"; if ($IMG{$k} > $topimg) { $topimg = $IMG{$k}; } } else { delete $IMG{$k}; } } ############################################################# $topcgi = 0; foreach $k (keys %CGI) { if ($CGI{$k} > $cutoff) { $cgitraffic+=$CGI{$k}; print SAVE "CGI: $CGI{$k} $k\n"; if ($CGI{$k} > $topcgi) { $topimg = $CGI{$k}; } } else { delete $CGI{$k}; } } close(SAVE); #print "cached $cachedtraffic\n"; $traffic = $htmltraffic+$cgitraffic+$imgtraffic; $gradient = $traffic - $cachedtraffic; $lowlimit = 300; $mediumlimit = 1000; $highlimit = 2000; if ($gradient > $lowlimit) { print "+HTTPlowlimit\n"; } if ($gradient > $mediumlimit) { print "Traffic running at $gradient regular hits per hour + additional random hits\n"; print "+HTTPmediumlimit\n"; foreach $k (keys %HTTP) { if ($HTTP{$k} > $HTTPcache{$k}) { print "Active URL traffic: (", $HTTP{$k} - $HTTPcache{$k}, ") $k \n"; } } foreach $k (keys %IMG) { if ($IMG{$k} > $IMGcache{$k}) { print "Active IMG traffic: (", $IMG{$k} - $IMGcache{$k}, ") $k\n"; } } foreach $k (keys %CGI) { if ($CGI{$k} > $CGIcache{$k}) { print "Active CGI traffic: (", $CGI{$k} - $CGIcache{$k}, ") $k \n"; } } } if ($gradient > $highlimit) { print "+HTTPhighlimit\n"; }