#######################################################################
## webloganalysis.pl
## Anno Domini: march-17-2000
## Peter Tapolyai tinkershop@tinkershop.net
## http://www.tinkershop.net
##
## Written in Perl for NT
## This application executes Analog (web log analysis tool) to analyze each 
## website's weblogs. This application is called from the scheduler "AT" program 
## and is run at every night at 2:30 am.
##
## This script also dynamicaly makes each websites's config file from the original
## config file that I renamed to Analog1.cfg without the headers.
##
## Paths and file names are purposly hardcoded for security reasons!
##
## The scheduler command is:
## at 2:20 /every:M,T,W,Th,F d:\inetpub\websites\scpintranet\webloganalysis.pl
##

use File::Copy;
use File::DosGlob 'glob'; 
use Win32::Process;

@sSites = ("spectrum","spacecom","acts","wincom","acatm","scp");

foreach $site (@sSites) {
	if ($site eq "spectrum")     {
	  $iNum = 1
	}elsif ($site eq "spacecom") { 
	  $iNum = 2
	}elsif ($site eq "acts")     {
	  $iNum = 3
	}elsif ($site eq "wincom")   {
	  $iNum = 5
	}elsif ($site eq "acatm")    {
	  $iNum = 6
	}elsif ($site eq "scp")      {
	  $iNum = 7
	}

	@sFilesToDelete = glob "C:\\Analog\\*.log";
	map { unlink $_ } @sFilesToDelete;
	@sLogFiles = glob  "C:\\Winnt\\system32\\LogFiles\\W3svc" .$iNum . "\\*.log";
	map {copy($_,"C:\\Analog")}@sLogFiles;
	
	
        ## For each site analyzed I write a new config file. Only two variables, the 
        ## OUTFILENAME and HOSTNAME changes with each site
	$sConfigHeader  = "# Configuration file for analog 4.03\n";
	$sConfigHeader .= "# See http://www.statslab.cam.ac.uk/~sret1/analog/ \n";
	$sConfigHeader .= "# \n";
	$sConfigHeader .= "# Here are a couple of configuration commands to get you started. Add any more \n";
	$sConfigHeader .= "# you like from the Readme. \n";
	$sConfigHeader .= "# \n";
	$sConfigHeader .= "# There is a much more extensive configuration file in examples/big.cfg \n";
	$sConfigHeader .= "# \n";
	$sConfigHeader .= "# If you need a LOGFORMAT command it must go here, above the LOGFILE command. \n";
	$sConfigHeader .= "OUTFILE " . $site . ".html\n";
	$sConfigHeader .= "\nLOGFILE ex*.log \n";
	$sConfigHeader .= "HOSTNAME \U$site\n";

	$sConfFile = "C:\\Analog\\Analog1.cfg";
	open(CONFIGPATTERN, $sConfFile);
	@ConfFile = <CONFIGPATTERN>;
	close(CONFIGPATTERN);
	open(CONFIGFILE, "+>C:\\Analog\\Analog.cfg");
	print(CONFIGFILE $sConfigHeader);
	print(CONFIGFILE @ConfFile);
	close(CONFIGFILE);
	
	Win32::Process::Create($ProcessObj,
			   "C:\\Analog\\Analog.exe",
			   "",
			   0,
			   NORMAL_PRIORITY_CLASS,
			   "C:\\Analog")|| print "<font color=\"\#ff0000\"><b>Analog Execution Error</b></font>\n<p>\n";

	$Timeout = 1000;
	$ProcessObj->Wait($Timeout);
	$ProcessObj->GetExitCode($Exitcode);
	
	if ($site eq "spacecom") {
	  sleep 60;
	}elsif ($site eq "acts") {
	  sleep 120;
	}
	$sFilename = $site . ".html";
	unlink("D:\\Inetpub\\websites\\scpintranet\\wwwroot\\" . $sFilename);
	copy("C:\\Analog\\" . $sFilename,"D:\\Inetpub\\websites\\scpintranet\\wwwroot");
}

@sFilesToDelete = ();
push(@sFilesToDelete, glob "C:\\Analog\\*.html");
map { unlink $_ } @sFilesToDelete;

##
#######################################################################
