#!/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 (<CACHE>)
   {
   ($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 (<ACCESS>)
   {
   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";
   }

