tbrehm
2009-10-28 66c3bc24f069a2854bdf1eeebb6dcb51f6ef0afb
server/cron_daily.php
@@ -48,13 +48,13 @@
$sql = "SELECT mailuser_id,maildir FROM mail_user WHERE server_id = ".$conf["server_id"];
$records = $app->db->queryAllRecords($sql);
foreach($records as $rec) {
   if(@is_file($rec["maildir"].'.ispconfig_mailsize')) {
   if(@is_file($rec["maildir"].'/ispconfig_mailsize')) {
      
      // rename file
      rename($rec["maildir"].'.ispconfig_mailsize',$rec["maildir"].'.ispconfig_mailsize_save');
      rename($rec["maildir"].'/ispconfig_mailsize',$rec["maildir"].'/ispconfig_mailsize_save');
      
      // Read the file
      $lines = file($rec["maildir"].'.ispconfig_mailsize_save');
      $lines = file($rec["maildir"].'/ispconfig_mailsize_save');
      $mail_traffic = 0;
      foreach($lines as $line) {
         $mail_traffic += intval($line);
@@ -62,13 +62,13 @@
      unset($lines);
      
      // Delete backup file
      if(@is_file($rec["maildir"].'.ispconfig_mailsize_save')) unlink($rec["maildir"].'.ispconfig_mailsize_save');
      if(@is_file($rec["maildir"].'/ispconfig_mailsize_save')) unlink($rec["maildir"].'/ispconfig_mailsize_save');
      
      // Save the traffic stats in the sql database
      $tstamp = date("Y-m");
      
      $sql = "SELECT * FROM mail_traffic WHERE month = '$tstamp' AND mailuser_id = ".$rec["mailuser_id"];
      $tr = $app->db->queryOneRecord($sql);
      $tr = $app->dbmaster->queryOneRecord($sql);
      
      $mail_traffic += $tr["traffic"];
      if($tr["traffic_id"] > 0) {
@@ -76,7 +76,7 @@
      } else {
         $sql = "INSERT INTO mail_traffic (month,mailuser_id,traffic) VALUES ('$tstamp',".$rec["mailuser_id"].",$mail_traffic)";
      }
      $app->db->query($sql);
      $app->dbmaster->query($sql);
      echo $sql;
      
   }
@@ -87,20 +87,63 @@
// Create webalizer statistics
#######################################################################################################
function setConfigVar( $filename, $varName, $varValue ) {
   if($lines = @file($filename)) {
      $out = '';
      $found = 0;
      foreach($lines as $line) {
         list($key, $value) = split("[\t= ]+", $line, 2);
         if($key == $varName) {
            $out .= $varName." ".$varValue."\n";
            $found = 1;
         } else {
            $out .= $line;
         }
      }
      if($found == 0) {
         //* add \n if the last line does not end with \n or \r
         if(substr($out,-1) != "\n" && substr($out,-1) != "\r") $out .= "\n";
         //* add the new line at the end of the file
         if($append == 1) $out .= $varName." ".$varValue."\n";
      }
      file_put_contents($filename,$out);
   }
}
$sql = "SELECT domain_id, domain, document_root FROM web_domain WHERE server_id = ".$conf["server_id"];
$records = $app->db->queryAllRecords($sql);
foreach($records as $rec) {
   $yesterday = date("mdY",time() - 86400);
   $yesterday = date("Ymd",time() - 86400);
   $logfile = escapeshellcmd($rec["document_root"].'/log/'.$yesterday.'-access.log');
   if(@is_file($logfile)) {
      $domain = escapeshellcmd($rec["domain"]);
      $statsdir = escapeshellcmd($rec["document_root"].'/web/stats');
      $webalizer = '/usr/bin/webalizer';
      $webalizer_conf = '/etc/webalizer/webalizer.conf';
      if(!@is_dir($statsdir)) mkdir($statsdir);
      exec("$webalizer -c $webalizer_conf -n $domain -s $domain -r $domain -q -T -o $statsdir $logfile");
   if(!@is_file($logfile)) {
      $logfile = escapeshellcmd($rec["document_root"].'/log/'.$yesterday.'-access.log.gz');
   if(!@is_file($logfile)) {
      continue;
   }
}
$domain = escapeshellcmd($rec["domain"]);
$statsdir = escapeshellcmd($rec["document_root"].'/web/stats');
$webalizer = '/usr/bin/webalizer';
$webalizer_conf_main = '/etc/webalizer/webalizer.conf';
$webalizer_conf = escapeshellcmd($rec["document_root"].'/log/webalizer.conf');
if(!@is_file($webalizer_conf)) {
   exec("cp $webalizer_conf_main $webalizer_conf");
}
if(@is_file($webalizer_conf)) {
   setConfigVar($webalizer_conf, 'Incremental', 'yes');
   setConfigVar($webalizer_conf, 'IncrementalName', $statsdir.'/webalizer.current');
   setConfigVar($webalizer_conf, 'HistoryName', $statsdir.'/webalizer.hist');
}
if(!@is_dir($statsdir)) mkdir($statsdir);
   exec("$webalizer -c $webalizer_conf -n $domain -s $domain -r $domain -q -T -p -o $statsdir $logfile");
}
#######################################################################################################
@@ -110,34 +153,62 @@
$sql = "SELECT domain_id, domain, document_root FROM web_domain WHERE server_id = ".$conf["server_id"];
$records = $app->db->queryAllRecords($sql);
foreach($records as $rec) {
   $yesterday = date("mdY",time() - 86400);
   $yesterday = date("Ymd",time() - 86400);
   $logfile = escapeshellcmd($rec["document_root"].'/log/'.$yesterday.'-access.log');
   if(@is_file($logfile)) {
      // Compress yesterdays logfile
      exec("gzip -c $logfile > $logfile.gz");
      unlink($logfile);
   }
   
   // delete logfiles after 30 days
   $month_ago = date("mdY",time() - 86400 * 30);
   $logfile = escapeshellcmd($rec["document_root"].'/log/'.$yesterday.'-access.log.gz');
   $month_ago = date("Ymd",time() - 86400 * 30);
   $logfile = escapeshellcmd($rec["document_root"].'/log/'.$month_ago.'-access.log.gz');
   if(@is_file($logfile)) {
      unlink($logfile);
   }
}
#######################################################################################################
// Cleanup logs in database
// Cleanup logs in master database (only the "master-server")
#######################################################################################################
//* Keep 7 days in sys_log
$tstamp = time() - (60*60*24*7);
$sql = "DELETE FROM sys_log WHERE tstamp < $tstamp AND server_id = ".$conf["server_id"];
$app->db->query($sql);
//* Keep 7 days in sys_datalog
$tstamp = time() - (60*60*24*7);
$sql = "DELETE FROM sys_datalog WHERE tstamp < $tstamp AND server_id = ".$conf["server_id"];
$app->db->query($sql);
if ($app->dbmaster == $app->db) {
   /** 7 days */
   $tstamp = time() - (60*60*24*7);
   /*
    *  Keep 7 days in sys_log
    * (we can delete the old items, because if they are OK, they don't interrest anymore
    * if they are NOT ok, the server will try to process them in 1 minute and so the
    * error appears again after 1 minute. So it is no problem to delete the old one!
    */
   $sql = "DELETE FROM sys_log WHERE tstamp < $tstamp AND server_id != 0";
   $app->dbmaster->query($sql);
   /*
    * The sys_datalog is more difficult.
    * 1) We have to keet ALL entries with
    *    server_id=0, because they depend on ALL servers (even if they are not
    *    actually in the system (and will be insered in 3 days or so).
    * 2) We have to keey ALL entries which are not actually precessed by the
    *    server never mind how old they are!
    */
   /* First we need all servers and the last sys_datalog-id they processed */
   $sql = "SELECT server_id, updated FROM server ORDER BY server_id";
   $records = $app->dbmaster->queryAllRecords($sql);
   /* Then delete server by server */
   foreach($records as $server) {
      $sql = "DELETE FROM sys_datalog WHERE tstamp < " . $tstamp .
         " AND server_id != 0 " . // to be more secure!
         " AND server_id = " . intval($server['server_id']) .
         " AND datalog_id < " . intval($server['updated']);
//      echo $sql . "\n";
      $app->dbmaster->query($sql);
   }
}
die("finished.\n");
?>