#!/usr/local/bin/perl -s

# Usage: wwwac [-word=string] [access log file]

# This script searches the www access log for a string and reports various
# statistics on what it finds:
# 1. total number of hits containing that string
# 2. number of unique sources of hits that contained that string
# 3. the list of unique sources

# Without arguments, wwwac scans the default access log file for "detn_db".
# With a file name given as an argument, it searches that file.
# The -word option can be used to specify a string other than "detn_db" to
# search for.

if ($#ARGV>=0) {
  $log = $ARGV[0];
} else {
  $log = '/var/weblogs/access_log';
}

if (!$word) {
  $word="detn_db";
}

open(ACLOG, $log) || die
  "Couldn't open access log file.  You need to be on scram\n";

print "Searching access log...\n";
$naccesses = 0;
$ndbaccesses = 0;
$nunique = 1;

while($line = <ACLOG>) {
$naccesses++;
  if ($line =~ /$word/) {
     $ndbaccesses++;
     $line =~ /^([^\s]*)/;
     $src = $1;
     push(@srcs, $src);
  }
}

print "Scanning for unique sources...\n\n";
@uniqsrcs = ($srcs[0]);
foreach $src (@srcs) {
   $uniqsrc='';
   $match = 0;
   for ($i = 0; $i<=$#uniqsrcs && $match==0; $i++) {
      $uniqsrc = $uniqsrcs[$i];
      if ($uniqsrc eq $src) {
         $match=1;
      }
   }
   if ($match==0) {
      push(@uniqsrcs, $src);
      $nunique++;
   }
}

print $naccesses, " total accesses in log.\n";
print $ndbaccesses, " detn db accesses in log.\n";
print $nunique, " unique access sources.\n";
print "\nSources:\n";
print join("\n",@uniqsrcs);
print "\n";
