#\perl\bin\perl.exe -wprint "Content-type: text/html\n\n";### DATA Locale & Type$file="\\home\\httpd\\html\\log\\tbLOG.txt";$TITLE="Telerobotics Log File";### Filters$CAMPUS="\\.bradley\\.edu";$TESTERS="webbot|webbot\\.bradley\\.edu|tnt\\S+\.mtco\.com";### Open data fileopen (LOGFILE, "< $file") or die( "Couldn't Open LOG File");### Variables$visits     =0;$offcampus  =0;$oncampus   =0;$tests      =0;$max =0;%guests     =();%campus     =();%olek       =();%domain     =();%country    =();### Processing log filewhile( <LOGFILE>) {            #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);@kguests=keys(%guests);@kcampus=keys(%campus);@kdomain=keys(%domain);@kcountr=keys(%country);### Printing header  print <<enough;<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"><!-- Created by Greg Harmon --><HTML><HEAD><TITLE>$TITLE</TITLE><META HTTP-EQUIV="Pragma" CONTENT="no cache"><META HTTP-EQUIV="Refresh" CONTENT="600"><LINK REV="made" HREF="mailto:webbot\@webbot.bradley.edu"></HEAD><BODY BGCOLOR="#FFFFFF" TEXT="#000000"><H1><FONT FACE="Arial,helvetica" COLOR="#CF0000">$TITLE</FONT></H1><PRE>enough########################$visitors=$#kguests+$#kcampus+2;$ofcators=$#kguests+1;$oncators=$#kcampus+1;$domators=$#kdomain+1;$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 statisticsprint  "\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 statisticsprint  "\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 statisticsprint  "\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 statisticsprint  "\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

syntax highlighted by Code2HTML, v. 0.8.11