#!/usr/local/bin/perl
$ScriptDir = "/local/www/etc";
$BaseHtmlDir = "/local/www/htdocs/stats";
$BaseLogDir = "/local/logs";
$timeout = 30; # wait n Minutes
$Zcat="/usr/local/bin/gzip -cd";
# The next Line has to be always at this line (before calling the other subs)
&SetDates;
# ===================== Now you might change the lines ==================
# #
# First we wait, until access_log is compressed ...
#&CheckFile("access_log.${oldyear}${oldmonth}.gz","$BaseLogDir/WWW/SAVE");
# resolve unresolved entries in access_log
#&PreProcessAccessLog("$BaseLogDir/WWW/SAVE");
# Make all WWW related stuff
&SetupHtmlDirs("${BaseHtmlDir}/WWW");
&SetupHtmlDirs("${BaseHtmlDir}/elkner");
&MakeStats("www");
&CheckFile("referer_log.${oldyear}${oldmonth}.gz","$BaseLogDir/WWW/SAVE");
&MakeStats("referer");
&CheckFile("agent_log.${oldyear}${oldmonth}.gz","$BaseLogDir/WWW/SAVE");
&MakeStats("agent");
&CheckFile("proxy_log.${oldyear}${oldmonth}.gz","$BaseLogDir/WWW/SAVE");
&MakeStats("proxy");
system("${ScriptDir}/mkHtmlStatTable.pl -o index.html -p ${BaseHtmlDir}/WWW -s IRB.CS.Uni-Magdeburg.De");
system("${ScriptDir}/mkHtmlStatTable.pl -o index.html -p ${BaseHtmlDir}/elkner -s \"IRB.CS.Uni-Magdeburg.De
~elkner\"");
# Make all FTP related stuff
&SetupHtmlDirs("${BaseHtmlDir}/FTP");
&SetupHtmlDirs("${BaseHtmlDir}/FTP/gnu");
&SetupHtmlDirs("${BaseHtmlDir}/FTP/linux");
&SetupHtmlDirs("${BaseHtmlDir}/FTP/Java");
&CheckFile("xferlog.${oldyear}${oldmonth}.gz","$BaseLogDir/FTP/SAVE");
&MakeStats("ftp");
system("${ScriptDir}/mkHtmlStatTable.pl -o index.html -p ${BaseHtmlDir}/FTP -s IRB.CS.Uni-Magdeburg.De -t ftp -H ${BaseHtmlDir}/FTP/head.txt");
system("${ScriptDir}/mkHtmlStatTable.pl -o index.html -p ${BaseHtmlDir}/FTP/gnu -s \"IRB.CS.Uni-Magdeburg.De
GNU Mirror\" -t ftp");
system("${ScriptDir}/mkHtmlStatTable.pl -o index.html -p ${BaseHtmlDir}/FTP/linux -s \"IRB.CS.Uni-Magdeburg.De
Linux Mirror\" -t ftp");
system("${ScriptDir}/mkHtmlStatTable.pl -o index.html -p ${BaseHtmlDir}/FTP/Java -s \"IRB.CS.Uni-Magdeburg.De
Java Mirror\" -t ftp");
# #
# ====================== No further changes are necessary =================
sub SetupHtmlDirs {
$Dir = $_[0];
chdir "$Dir";
mkdir ("${thisyear}${thismonth}",22) if (! -d "${thisyear}${thismonth}" );
mkdir ("${oldyear}${oldmonth}",22) if (! -d "${oldyear}${oldmonth}" );
mkdir ("total${thisyear}",22) if (! -d "total${thisyear}" );
mkdir ("total${oldyear}",22) if (! -d "total${oldyear}" );
chmod 0755, "${thisyear}${thismonth}", "${oldyear}${oldmonth}", "total${thisyear}", "total${oldyear}";
rmdir "current" if (-d "current");
unlink "current" if (-l "current");
symlink("${thisyear}${thismonth}", "current");
}
sub CheckFile {
($file,$Dir) = $_[0,1];
chdir "$Dir";
$oldsize=0;
$newsize=1;
$count=0;
STEP: sleep (60);
if (! -r $file) {
$count++;
goto STEP if ($count < $timeout);
warn "timeout of $timeout minutes exceeded (no $file)!\n $0 aborted\n.";
return 0;
}
$count=0;
CHECK: sleep(60);
$newsize = (stat($file))[7];
if ( ($newsize == 0) || ($newsize != $oldsize)) {
$count++;
$oldsize = $newsize;
goto CHECK if ($count < $timeout);
warn "timeout of $timeout minutes exceeded ($file still grows)!\n $0 aborted\n.";
return 0;
}
1;
}
sub MakeStats {
$Type = $_[0];
system("$ScriptDir/makestats $Type ${oldyear}${oldmonth}");
system("$ScriptDir/makestats $Type total $oldyear");
system("$ScriptDir/makestats $Type current");
system("$ScriptDir/makestats $Type total $thisyear") if ( $oldyear != $thisyear);
}
sub PreProcessAccessLog {
$LogDir = $_[0];
chdir "$LogDir";
$myfile = "access_log.${oldyear}${oldmonth}";
system ("$ScriptDir/ppaccesslog.pl ${myfile}.gz");
if ( ! open(FILE,"$Zcat $myfile.gz |")) {
die "Can't open ${myfile}.gz\n $0 aborted!\n";
}
$count=0;
while () {
$count++;
}
close(FILE);
$oldsize=$count;
if ( ! open(FILE,"$Zcat ${myfile}.new.gz |")) {
die "Can't open ${myfile}.new.gz\n $0 aborted!\n";
}
$count=0;
while () {
$count++;
}
close(FILE);
if ( $oldsize == $count ) {
rename("${myfile}.new.gz", "${myfile}.gz");
}
else {
if ($count < $oldsize) {
die "New access_log is shorter than the old one!\n" ;
}
else {
die "New access_log is bigger than the old one!\n" ;
}
}
}
sub SetDates {
($thismonth,$thisyear) = (localtime(time))[4,5];
if ($thismonth == 0) {
$oldmonth = 12;
$oldyear = $thisyear -1 ;
}
else {
$oldmonth = $thismonth;
$oldyear = $thisyear ;
}
$thismonth++;
$thismonth = "0$thismonth" if ($thismonth < 10);
$oldmonth = "0$oldmonth" if ($oldmonth < 10);
$thisyear = $thisyear - 100 if ($thisyear > 99);
$oldyear = $oldyear - 100 if ($oldyear > 99);
$thisyear = "0$thisyear" if ($thisyear < 10);
$oldyear = "0$oldyear" if ($oldyear < 10);
}