#!/local/std/bin/perl
#
# v 0.70
#
push @INC, "/home/discovery/simra/public_html/counter/";

require "counter.config";


print <<EOI;
Content-type: text/html

<HTML>
<head><title>Page Hit Statistics for http://www.cim.mcgill.ca/~simra/</title></head>
<body>
<h1>Page Hit Stats</h1>

<p>
These stats are collected using a modified verions of the <a
    href="http://freshmeat.net/projects/mwhcounter/">Milanovic, Wagner
    and Havlik web counter</a>. The source is available <a
    href="http://www.cim.mcgill.ca/~simra/counter.tgz">here</a>. 


<p>

EOI
;

&make_logfile;

#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#
# Hits per page - File format: page|hits%date
#                 File name:   hits_per_page.dat
#
open (HPP, "<$data_dir/hits_per_page.dat") && do {
    while (<HPP>) {
	@entry=split('\|',$_);
#	$entry[0]=~s/$strip_uri/~/;
#	$entry[0]=~s/~/$unstrip_uri/;
	$hpp{$entry[0]}=$entry[1];
    }
    close (HPP);
};
#foreach $key (keys %ENV) {
#  print "$key=$ENV{$key}<BR>\n";
#}

print <<EOI;
<TABLE BORDER WIDTH=100% NOSAVE>
<TR><TD>
  <B>Page</B></TD><TD><B>Hits</B></TD>
  <TD><B>Since</B></TD></TR>
<TR></TR>
EOI
;

foreach $var (sort { $hpp{$b} <=> $hpp{$a} } keys %hpp) {
    @hitday=split('%', $hpp{$var});
    $shrt=$var;
    $shrt=~s/~/$unstrip_uri/;
    if ($shrt eq "") {
	$var="Unknown";
	$shrt="http://www.cim.mcgill.ca/~simra";
    }
#    print STDERR "\"$shrt\"\n";
    if ($var=~/^~/ or $var eq "Unknown") {
	print "<TR><TD><A HREF=\"$shrt\"> $var </A></TD>";
	print "<TD>$hitday[0]</TD><TD>$hitday[1]</TD></TR>\n";
    }
}
print "</TABLE>\n";



#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#
# Hits per domain, per day per Browser and per OS
#
open (LOG, "$mwh_logfile");
open (UNKONOWN, ">$data_dir/unrecognized.log");
while (<LOG>)
{
    my @entry = ();
    @entry=split('#',$_);
    #address
    my $ignore=0;
    my $host;
    foreach $host (@ignore_hosts) {
	$ignore=1 if ($entry[2]=~/$host/i);
    }
    
    print STDERR "Entry5: $entry[5]\n";
    $ignore=1 if ($entry[5]=~/1/);

    if (!$ignore) {
	@addr = split(/[.]/, $entry[2]);
	if ($addr[$#addr] == 0) {
	    $count{$addr[$#addr]}++;
	    $domain_count{$addr[$#addr-1].".".$addr[$#addr]}++;
	} else {
	    $count{"??"}++;
	}
	$host_count{$entry[2]}++;
	
	
	#date
	@date_ent=split(',', $entry[0]);
	$date="$date_ent[0]-$date_ent[1]-$date_ent[2]"; 
	$day_count{$date}++;
	#OS
	$OS = OS_recognize($entry[3]);
	($OS eq "Unknown") && (print UNKONOWN "OS:\t$entry[3]\n");
	$OS_count{$OS}++;
	#Browser
	$BR = BR_recognize($entry[3]);
	($BR eq "Unknown") && (print UNKONOWN "browser:\t$entry[3]\n");
	$BR_count{$BR}++;
	
	$PG = $entry[1];
	$PG_count{$PG}++;
	
	$entry[4]=~s/(\%3A)/:/g;
	$entry[4]=~s/(\%3D)/=/g;
	$entry[4]=~s/(\%3F)/\&/g;
	my ($RF)=$entry[4]=~/(\S+)/;
	$RF||="None";
	$RF_count{$RF}++;
    }
}
close (LOG);
close (UNKONOWN);
#
#  Hits per tld
#
print "<br><TABLE border>\n";
print"<TR><TD><B>Top-Level Domain</B></TD><TD><B>Hits</B></TD>\n";
print "<TR></TR>\n";

foreach $var (sort { $count{$b} <=> $count{$a} } keys %count)	
{
    print "<TR><TD><FONT COLOR=#0033d0>$dns{$var}</FONT>";
    print " ($var)</TD><TD>$count{$var}</TD></TR> ";
    

}
print "</TABLE><br>\n"; 

#
#  Hits per domain
#
print "<br><TABLE border>\n";
print"<TR><TD><B>Domain</B></TD><TD><B>Hits</B></TD>\n";
print "<TR></TR>\n";

foreach $var (sort { $domain_count{$b} <=> $domain_count{$a} } keys %domain_count)	
{
    print "<TR><TD><FONT COLOR=#0033d0>$var</FONT>";
    print "</TD><TD>$domain_count{$var}</TD></TR> ";
}
print "</TABLE><br>\n"; 


#
#  Hits per host
#
print "<br><TABLE border>\n";
print"<TR><TD><B>Host</B></TD><TD><B>Hits</B></TD>\n";
print "<TR></TR>\n";

foreach $var (sort { $host_count{$b} <=> $host_count{$a} } keys %host_count)	
{
    if (!($var=~/sympatico/) && !($var=~/videotron/) && $host_count{$var}>1) {
	print "<TR><TD><FONT COLOR=#0033d0>$var</FONT>";
	print "</TD><TD>$host_count{$var}</TD></TR> ";
    }
}
print "</TABLE><br>\n"; 

#
# Hits per day
#

print <<EOI;
<TABLE BORDER>
<TR><TD><B>Day</B></TD><TD><B>Hits</B></TD></TR><TR></TR>
EOI
;
$cnt=0;
foreach $day (reverse sort keys %day_count) {
  if ($cnt >= $display_days) { last; }
	if($cnt!=0) {
	    print "<TR><TD>".$day."</TD><TD>".$day_count{$day}."</TD></TR>\n";
	} else {
	    print "<TR><TD><FONT COLOR=#E01010>".$day."</FONT></TD>";
	    print "<TD><FONT COLOR=#E01010>".$day_count{$day}."</FONT>";
	    print "</TD></TR>\n";
	}
	$cnt++;
}


#
# Hits per Page
#
#print <<EOI;
#</TABLE><br>
#<TABLE BORDER width="150">
#<TR><TD><B>Page</B></TD><TD><B>Hits</B></TD></TR><TR></TR>
#EOI
#;

#foreach $PG (sort { $PG_count{$b} <=> $PG_count{$a} } keys %PG_count) {
#    $pp=$PG;
#    $pp="Unknown" if $pp eq "";
#    $pp=~s/~/$unstrip_uri/;
#    print "<TR><TD>".$pp."</TD><TD>".$PG_count{$PG}."</TD></TR>\n";
#}

#
# Hits per Referrer
#
print <<EOI;
</TABLE><br>
<TABLE BORDER width="100%">
<COLGROUP span="1" width="80%"></COLGROUP>
<TR><TD width=80%><B>Referrer</B></TD><TD><B>Hits</B></TD></TR><TR></TR>
EOI
;

foreach $RF (sort { $RF_count{$b} <=> $RF_count{$a} } keys %RF_count) {
#    $RF=~s/%7E/\~/;
    $url=unescape($RF);
#    $url=~s/(.{120})(.*?)/$1<br>$2/;
    my @splurl=split //, $url;
    splice(@splurl, 40, $#splurl-80, "...") if $#splurl>80;
    my $jsplurl=join '', @splurl;
    print "<TR><TD width=\"80%\"><a href=\"".$url."\">".$jsplurl."</a></TD><TD align=right width=\"10%\">".$RF_count{$RF}."</TD></TR>\n"
	unless $url=~/porn/i;

}

#
# Hits per Browser
#
print <<EOI;
</TABLE><br>
<TABLE BORDER width="150">
<TR><TD><B>Browser</B></TD><TD><B>Hits</B></TD></TR><TR></TR>
EOI
;

foreach $BR (sort { $BR_count{$b} <=> $BR_count{$a} } keys %BR_count) {
    print "<TR><TD>".$BR."</TD><TD>".$BR_count{$BR}."</TD></TR>\n";
		
}
#
# Hits per OS
#
print <<EOI;
</TABLE>
<P></P>
<TABLE BORDER width="150">
<TR><TD><B>OS</B></TD><TD><B>Hits</B></TD></TR><TR></TR>
EOI
;
#print <<EOI;
#</TABLE></TD>
#<TD></TD><TD></TD>
#<TD><TABLE BORDER>
#<TR><TD><B>OS</B></TD><TD><B>Hits</B></TD></TR><TR></TR>
#EOI
#;

foreach $OS (sort { $OS_count{$b} <=> $OS_count{$a} } keys %OS_count) {
	    print "<TR><TD>".$OS."</TD><TD>".$OS_count{$OS}."</TD></TR>\n";
}

print "</TABLE>\n";
#print "</TD></TR></TABLE>\n";

#
#
#
print "</HTML>\n";



sub unescape {
    $url=shift;
    $url=~s/\%7E/\~/g;
    $url=~s/\%26/\&/g;
    $url=~s/\%20/ /g;
    $url=~s/\%25/\%/g;
    $url=~s/\%22/\"/g;
    my @codes= $url=~/\%(..)/g;
    foreach $code (@codes) {
	$unc=pack("c",unpack("H", $code));
	$url=~s/%$code/$unc/;
    }
    return $url;
}
