#!PERL.EXE -w
use strict;

print "Content-type: text/html\n\n";

### DATA Locale & Type
my $file="\\inetpub\\wwwroot\\projects\\telebot\\serv-sant\\tbLOG.txt";
my $TITLE="Telebot Office Explorer Guestbook";

### Filters
my $CAMPUS="\\.bradley\\.edu";
my $TESTERS="sant|sant\\.bradley\\.edu|tnt\\S+\.mtco\.com";

### Open data file
open (LOGFILE, "< $file") or die( "Couldn't Open LOG File");

### Variables
my $visits     =0;
my $offcampus  =0;
my $oncampus   =0;
my $tests      =0;

my $max =0;

my %guests     =();
my %campus     =();
my %olek       =();

my %domain     =();
my %country    =();

### Processing log file
while( <LOGFILE>) {

            # SAMPLE ENTRIES FORM THE LOG FILE
            #Sat Oct 30 15:14:46 CDT 1999 : reset requested  by tnt4-38.mtco.com/206.69.130.38
            #Sat Oct 30 15:14:46 CDT 1999 : server terminated
            #Sat Oct 30 15:14:48 CDT 1999 : server started
            #Sat Oct 30 15:20:13 CDT 1999 : connected  (1) from 205.237.61.148/205.237.61.148
            #Sat Oct 30 15:21:41 CDT 1999 : disconnect (1) from 205.237.61.148/205.237.61.148
            #Sat Oct 30 15:22:41 CDT 1999 : connected  (1) from tnt4-38.mtco.com/206.69.130.38
            #Sat Oct 30 15:23:43 CDT 1999 : disconnect (1) from tnt4-38.mtco.com/206.69.130.38

  #     1                        2               3      4
  #     date   : event           (cli#)   from   addr  /ipaddr
  if( /^(.+)\s+:\s+connected\s+\((.+)\)\s+from\s+(\S+)\/(\S+)$/o ) {
    my ($date, $cli, $addr, $ipaddr)=($1, $2, $3, $4);
    $visits++;
    $addr=lc($addr);

    if ( $addr !~ /^($TESTERS)$/io ) {
        # not testers nor Olek
        
        # simplifying address for domains
                    #   1
        if ( $addr =~ /^(\d+\.\d+)\.\d+\.\d+$/o) {
            $domain{"$1.*.*"}++;
            $country{"??"}++;
                         #   1      2
        } elsif ( $addr =~ /^(.*\.)?([^.]+\....)$/io) {
            $domain{$2}++;
            $country{"us"}++;
                         #   1      2              3
        } elsif ( $addr =~ /^(.*\.)?([^.]+\.[^.]+\.(..))$/io) {
            $domain{$2}++;
            $country{$3}++;
        } else {
            $domain{$addr}++;
            $country{"??"}++;
        }

        if ( $addr !~ /^\S+$CAMPUS$/io ) {
            # off campus
            $offcampus++;
            $guests{$addr}++;
        } else {
            # on campus
            $oncampus++;
            $campus{$addr}++;
        }
    } else {
        # testers and Olek
        $tests++;
        $olek{$addr}++;
    }
    #checking for max connections at a time
    if ($cli>$max) { $max=$cli; }
  }
}
close (LOGFILE);

my $key;
my @kguests=keys(%guests);
my @kcampus=keys(%campus);
my @kdomain=keys(%domain);
my @kcountr=keys(%country);



### Printing header
  print <<enough;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<!-- Created by Aleksander Olek Malinowski -->
<HTML>
<HEAD>
<TITLE>$TITLE</TITLE>
<META HTTP-EQUIV="Pragma" CONTENT="no cache">
<META HTTP-EQUIV="Refresh" CONTENT="600">
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">

<H1>
<FONT FACE="Arial,helvetica" COLOR="#CF0000">
$TITLE
</FONT>
</H1>
<PRE>
enough



########################
my $visitors=$#kguests+$#kcampus+2;
my $ofcators=$#kguests+1;
my $oncators=$#kcampus+1;
my $domators=$#kdomain+1;
my $countors=$#kcountr+1;
print  "<H3>VISITORS SUMMARY</H3>\n";
printf "Visitors:   %5d\n", $visitors;
printf "off campus: %5d\n", $ofcators;
printf "on  campus: %5d\n", $oncators;
print  "\n";
printf "Domains:    %5d\n", $domators;
printf "Countries:  %5d\n", $countors;
print  "\n";
printf "All Visits: %5d\n", $visits;
printf "off campus: %5d\n", $offcampus;
printf "on  campus: %5d\n", $oncampus;
printf "in peak:    %5d\n", $max;



### Printing statistics
print  "\n\n\n";
print  "<H3>VISITORS BY DOMAINS:</H3>\n";
print  "visitor". " "x43 ."visits\n";
print  "="x56 ."\n";
foreach $key (sort {$domain{$b} <=> $domain{$a}} @kdomain) {
  printf "%-50s %5d\n", $key, $domain{$key};
}

### Printing statistics
print  "\n\n\n";
print  "<H3>BY COUNTRY:</H3>\n";
print  "visitor". " "x43 ."visits\n";
print  "="x56 ."\n";
foreach $key (sort {$country{$b} <=> $country{$a}} @kcountr) {
  printf "%-50s %5d\n", $key, $country{$key};
}

### Printing statistics
print  "\n\n\n";
print  "<H3>OFF CAMPUS VISITOR LIST:</H3>\n";
print  "visitor". " "x43 ."visits\n";
print  "="x56 ."\n";
foreach $key (sort {$guests{$b} <=> $guests{$a}} @kguests) {
  printf "%-50s %5d\n", $key, $guests{$key};
}

### Printing statistics
print  "\n\n\n";
print  "<H3>ON CAMPUS VISITOR LIST:</H3>\n";
print  "visitor". " "x43 ."visits\n";
print  "="x56 ."\n";
foreach $key (sort {$campus{$b} <=> $campus{$a}} @kcampus) {
  printf "%-50s %5d\n", $key, $campus{$key};
}

### Printing statistics
#print  "\n\n\n";
#print  "<H3>TESTER LIST:</H3>\n";
#print  "visitor". " "x43 ."visits\n";
#print  "="x56 ."\n";
#foreach $key (sort {$olek{$b} <=> $olek{$a}} keys(%olek)) {
#  printf "%-50s %5d\n", $key, $olek{$key};
#}



### Printing HTML tailer
  print <<enough;
</PRE>
</BODY>
</HTML>
enough