#######################################################################
## webloganalysis.pl
## Anno Domini: march-17-2000
## Peter Tapolyai [email protected]
## 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;

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