#!/usr/local/bin/perl
############################################################
#
# LOCAL_COUNTER.CGI
# Kulisics, Joseph D.
# 31 July 2001
#
############################################################
##############################
#
# PACKAGES
#
##############################
use strict;
use Socket;
use CGI;
##############################
#
# GLOBAL VARIABLES
#
##############################
my $WWW="www";
my $HOME="/u/gs1/kulisics";
my $MAIL="/usr/ucb/mail";
my $MAILTO="kulisics\@cs.ucla.edu";
my $MAILFROM="-r kulisics\@cs.ucla.edu";
my $DB;
my $DBNAME;
my $COUNTERDATA;
my $COUNTERSTAMP;
my $VISITCOUNT=0;
my $HOSTCOUNT=0;
my $LOCALCGI=new CGI;
my $SILENT;
my $USERCLASS;
##############################
#
# IMMEDIATE DOCUMENTS
#
##############################
my $PREAMBLE= <<'PREAMBLE';
Hit Data
PREAMBLE
my $CONCLUSION= <<'CONCLUSION';
CONCLUSION
##############################
#
# FUNCTIONS
#
##############################
sub setup_variables {
if(defined $LOCALCGI->param('silent')){
$SILENT=$LOCALCGI->param('silent');
}
if(defined $LOCALCGI->param('db')){
$DB=$LOCALCGI->param('db');
$DBNAME="$HOME/$WWW/data/$DB";
$COUNTERDATA="$HOME/$WWW/data/$DB.data";
$COUNTERSTAMP="$HOME/$WWW/data/$DB.stamp";
}else{
$DB="counter";
$DBNAME="$HOME/$WWW/data/$DB";
$COUNTERDATA="$HOME/$WWW/data/$DB.data";
$COUNTERSTAMP="$HOME/$WWW/data/$DB.stamp";
}
if(defined $LOCALCGI->param('silent')){
$SILENT=$LOCALCGI->param('silent');
}
if(defined $LOCALCGI->param('userclass')){
$USERCLASS=$LOCALCGI->param('userclass');
}else{
$USERCLASS="adornment";
}
$PREAMBLE=~s/userclass/$USERCLASS/g;
}
sub hashed_update_data {
my %DBHASH;
my @KEYSTRUCT;
my $NAME;
my $KEY;
$NAME=gethostbyaddr(inet_aton($ENV{REMOTE_ADDR}),AF_INET);
$KEY="$ENV{REMOTE_ADDR}:$NAME:$ENV{HTTP_FROM}:$ENV{HTTP_USER_AGENT}";
dbmopen(%DBHASH,$DBNAME,0666) or die "Cannot open DBM file\n";
@KEYSTRUCT=keys(%DBHASH);
if($DBHASH{$KEY}){
$VISITCOUNT=scalar(@KEYSTRUCT);
++$DBHASH{$KEY};
$HOSTCOUNT=$DBHASH{$KEY};
if(open(MAIL,"|$MAIL $MAILFROM -s \"REPEAT VISIT: $DB from address $ENV{REMOTE_ADDR} name ($NAME)\" $MAILTO")){
print MAIL "DB:\t$DB\n";
print MAIL "HOST:\t($NAME)\n";
print MAIL "IP:\t$ENV{REMOTE_ADDR}\n";
print MAIL "CLIENT:\t$ENV{HTTP_USER_AGENT}\n";
print MAIL "USER:\t$ENV{REMOTE_USER}\n";
print MAIL "REF:\t$ENV{HTTP_REFERER}\n";
print MAIL "VISIT:\t$HOSTCOUNT\n";
close(MAIL);
}
}else{
$VISITCOUNT=scalar(@KEYSTRUCT)+1;
$HOSTCOUNT=1;
$DBHASH{$KEY}=1;
if(open(MAIL,"|$MAIL $MAILFROM -s \"NEW VISIT: $DB from address $ENV{REMOTE_ADDR} name ($NAME)\" $MAILTO")){
print MAIL "DB:\t$DB\n";
print MAIL "HOST:\t($NAME)\n";
print MAIL "IP:\t$ENV{REMOTE_ADDR}\n";
print MAIL "CLIENT:\t$ENV{HTTP_USER_AGENT}\n";
print MAIL "USER:\t$ENV{REMOTE_USER}\n";
print MAIL "REF:\t$ENV{HTTP_REFERER}\n";
close(MAIL);
}
}
dbmclose(%DBHASH);
return 0;
}
sub print_header {
print $LOCALCGI->header;
return 0;
}
sub print_output {
my $FILE=$_[0];
my $NUMBER=$_[1];
my @STATS;
my $TIME;
if(-e $FILE){
@STATS=stat($FILE);
}else{
open(FHIN,">$FILE");
close(FHIN);
@STATS=stat($FILE);
}
$TIME=localtime($STATS[9]);
print "\n";
print "
Hit Counter Information
\n";
print "Hit Trail Start Time: $TIME \n";
print "Hit Count: $NUMBER\n";
print "\n";
return 0;
}
sub print_userdata {
my $HOSTCOUNT=$_[0];
my $NAME;
$NAME=gethostbyaddr(inet_aton($ENV{REMOTE_ADDR}),AF_INET);
print "\n";
print "