From 2332b2279d8a8599b4f041370315edc9544b1560 Mon Sep 17 00:00:00 2001 From: tbrehm <t.brehm@ispconfig.org> Date: Fri, 02 Aug 2013 10:48:38 -0400 Subject: [PATCH] Added support for mongodb. Many thanks to MaddinXx for the patch. http://www.howtoforge.com/forums/showthread.php?t=62691 --- server/cron_daily.php | 248 ++++++++++++++++++++++++++++--------------------- 1 files changed, 143 insertions(+), 105 deletions(-) diff --git a/server/cron_daily.php b/server/cron_daily.php index 9d7ca00..21d8f84 100644 --- a/server/cron_daily.php +++ b/server/cron_daily.php @@ -54,7 +54,7 @@ foreach($records as $rec) { if(@is_file($rec['maildir'].'/ispconfig_mailsize')) { $parse_mail_log = false; - + // rename file rename($rec['maildir'].'/ispconfig_mailsize',$rec['maildir'].'/ispconfig_mailsize_save'); @@ -92,15 +92,15 @@ $mailbox_traffic = array(); $mail_boxes = array(); $mail_rewrites = array(); // we need to read all mail aliases and forwards because the address in amavis is not always the mailbox address - + function parse_mail_log_line($line) { //Oct 31 17:35:48 mx01 amavis[32014]: (32014-05) Passed CLEAN, [IPv6:xxxxx] [IPv6:xxxxx] <xxx@yyyy> -> <aaaa@bbbb>, Message-ID: <xxxx@yyyyy>, mail_id: xxxxxx, Hits: -1.89, size: 1591, queued_as: xxxxxxx, 946 ms - + if(preg_match('/^(\w+\s+\d+\s+\d+:\d+:\d+)\s+[^ ]+\s+amavis.* <([^>]+)>\s+->\s+((<[^>]+>,)+) .*Message-ID:\s+<([^>]+)>.* size:\s+(\d+),.*$/', $line, $matches) == false) return false; - + $timestamp = strtotime($matches[1]); if(!$timestamp) return false; - + $to = array(); $recipients = explode(',', $matches[3]); foreach($recipients as $recipient) { @@ -108,15 +108,15 @@ if(!$recipient || $recipient == $matches[2]) continue; $to[] = $recipient; } - + return array('line' => $line, 'timestamp' => $timestamp, 'size' => $matches[6], 'from' => $matches[2], 'to' => $to, 'message-id' => $matches[5]); } function add_mailbox_traffic(&$traffic_array, $address, $traffic) { global $mail_boxes, $mail_rewrites; - + $address = strtolower($address); - + if(in_array($address, $mail_boxes) == true) { if(!isset($traffic_array[$address])) $traffic_array[$address] = 0; $traffic_array[$address] += $traffic; @@ -146,17 +146,17 @@ } } } - + $state_file = dirname(__FILE__) . '/mail_log_parser.state'; $prev_line = false; $last_line = false; $cur_line = false; - + if(file_exists($state_file)) { $prev_line = parse_mail_log_line(trim(file_get_contents($state_file))); //if($prev_line) echo "continuing from previous run, log position: " . $prev_line['message-id'] . " at " . strftime('%d.%m.%Y %H:%M:%S', $prev_line['timestamp']) . "\n"; } - + if(file_exists('/var/log/mail.log')) { $fp = fopen('/var/log/mail.log', 'r'); //echo "Parsing mail.log...\n"; @@ -166,7 +166,7 @@ //if($l % 1000 == 0) echo "\rline $l"; $cur_line = parse_mail_log_line($line); if(!$cur_line) continue; - + if($prev_line) { // check if this line has to be processed if($cur_line['timestamp'] < $prev_line['timestamp']) { @@ -178,7 +178,7 @@ continue; } } - + add_mailbox_traffic($mailbox_traffic, $cur_line['from'], $cur_line['size']); foreach($cur_line['to'] as $to) { add_mailbox_traffic($mailbox_traffic, $to, $cur_line['size']); @@ -188,7 +188,7 @@ fclose($fp); //echo "\n"; } - + if($parse_mail_log == true && file_exists('/var/log/mail.log.1')) { $fp = fopen('/var/log/mail.log.1', 'r'); //echo "Parsing mail.log.1...\n"; @@ -198,7 +198,7 @@ //if($l % 1000 == 0) echo "\rline $l"; $cur_line = parse_mail_log_line($line); if(!$cur_line) continue; - + if($prev_line) { // check if this line has to be processed if($cur_line['timestamp'] < $prev_line['timestamp']) continue; // already processed @@ -207,7 +207,7 @@ continue; } } - + add_mailbox_traffic($mailbox_traffic, $cur_line['from'], $cur_line['size']); foreach($cur_line['to'] as $to) { add_mailbox_traffic($mailbox_traffic, $to, $cur_line['size']); @@ -218,7 +218,7 @@ } unset($mail_rewrites); unset($mail_boxes); - + // Save the traffic stats in the sql database $tstamp = date('Y-m'); $sql = "SELECT mailuser_id,email FROM mail_user WHERE server_id = ".$conf['server_id']; @@ -238,7 +238,7 @@ //echo $sql; } } - + unset($mailbox_traffic); if($last_line) file_put_contents($state_file, $last_line); } @@ -278,7 +278,7 @@ foreach($records as $rec) { //$yesterday = date('Ymd',time() - 86400); $yesterday = date('Ymd',strtotime("-1 day", time())); - + $log_folder = 'log'; if($rec['type'] == 'vhostsubdomain') { $tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = '.intval($rec['parent_domain_id'])); @@ -330,7 +330,7 @@ foreach($records as $rec) { //$yesterday = date('Ymd',time() - 86400); $yesterday = date('Ymd',strtotime("-1 day", time())); - + $log_folder = 'log'; if($rec['type'] == 'vhostsubdomain') { $tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = '.intval($rec['parent_domain_id'])); @@ -452,7 +452,7 @@ //* create traffic statistics based on yesterdays access log file $yesterday = date('Ymd',time() - 86400); - + $log_folder = 'log'; if($rec['type'] == 'vhostsubdomain') { $tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = '.intval($rec['parent_domain_id'])); @@ -461,7 +461,7 @@ $log_folder .= '/' . $subdomain_host; unset($tmp); } - + $logfile = $rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log'; $total_bytes = 0; @@ -646,10 +646,10 @@ ######### function send_notification_email($template, $placeholders, $recipients) { global $conf; - + if(!is_array($recipients) || count($recipients) < 1) return false; if(!is_array($placeholders)) $placeholders = array(); - + if(file_exists($conf['rootpath'].'/conf-custom/mail/' . $template . '_'.$conf['language'].'.txt')) { $lines = file($conf['rootpath'].'/conf-custom/mail/' . $template . '_'.$conf['language'].'.txt'); } elseif(file_exists($conf['rootpath'].'/conf-custom/mail/' . $template . '_en.txt')) { @@ -659,7 +659,7 @@ } else { $lines = file($conf['rootpath'].'/conf/mail/' . $template . '_en.txt'); } - + //* get mail headers, subject and body $mailHeaders = ''; $mailBody = ''; @@ -680,12 +680,12 @@ } } $mailBody = trim($mailBody); - + //* Replace placeholders $mailHeaders = strtr($mailHeaders, $placeholders); $mailSubject = strtr($mailSubject, $placeholders); $mailBody = strtr($mailBody, $placeholders); - + for($r = 0; $r < count($recipients); $r++) { mail($recipients[$r], $mailSubject, $mailBody, $mailHeaders); } @@ -694,7 +694,7 @@ unset($mailHeaders); unset($mailBody); unset($lines); - + return true; } @@ -706,7 +706,7 @@ if ($app->dbmaster == $app->db) { $global_config = $app->getconf->get_global_config('mail'); - + $current_month = date('Y-m'); //* Check website traffic quota @@ -739,19 +739,19 @@ if($web_traffic_quota > 0 && $web_traffic > $web_traffic_quota) { $app->dbmaster->datalogUpdate('web_domain', "traffic_quota_lock = 'y',active = 'n'", 'domain_id', $rec['domain_id']); $app->log('Traffic quota for '.$rec['domain'].' exceeded. Disabling website.',LOGLEVEL_DEBUG); - + //* Send traffic notifications if($rec['traffic_quota_lock'] != 'y' && ($web_config['overtraffic_notify_admin'] == 'y' || $web_config['overtraffic_notify_client'] == 'y')) { - - $placeholders = array('{domain}' => $rec['domain'], - '{admin_mail}' => $global_config['admin_mail']); - + + $placeholders = array('{domain}' => $rec['domain'], + '{admin_mail}' => $global_config['admin_mail']); + $recipients = array(); - //* send email to admin + //* send email to admin if($global_config['admin_mail'] != '' && $web_config['overtraffic_notify_admin'] == 'y') { $recipients[] = $global_config['admin_mail']; } - + //* Send email to client if($web_config['overtraffic_notify_client'] == 'y') { $client_group_id = $rec["sys_groupid"]; @@ -760,11 +760,10 @@ $recipients[] = $client['email']; } } - - send_notification_email('web_traffic_notification', $placeholders, $recipients); + + send_notification_email('web_traffic_notification', $placeholders, $recipients); } - - + } else { //* unlock the website, if traffic is lower then quota if($rec['traffic_quota_lock'] == 'y') { @@ -791,7 +790,7 @@ $sql = "SELECT domain_id,sys_groupid,domain,system_user,last_quota_notification,DATEDIFF(CURDATE(), last_quota_notification) as `notified_before` FROM web_domain WHERE (type = 'vhost' OR type = 'vhostsubdomain')"; $records = $app->db->queryAllRecords($sql); if(is_array($records) && !empty($records)) { - + $tmp_rec = $app->db->queryAllRecords("SELECT data from monitor_data WHERE type = 'harddisk_quota' ORDER BY created DESC"); $monitor_data = array(); if(is_array($tmp_rec)) { @@ -799,18 +798,18 @@ $monitor_data = array_merge_recursive($monitor_data,unserialize($app->db->unquote($tmp_mon['data']))); } } - + foreach($records as $rec) { //$web_hd_quota = $rec['hd_quota']; $domain = $rec['domain']; - + $username = $rec['system_user']; $rec['used'] = $monitor_data['user'][$username]['used']; $rec['soft'] = $monitor_data['user'][$username]['soft']; $rec['hard'] = $monitor_data['user'][$username]['hard']; $rec['files'] = $monitor_data['user'][$username]['files']; - + if (!is_numeric($rec['used'])){ if ($rec['used'][0] > $rec['used'][1]){ $rec['used'] = $rec['used'][0]; @@ -821,22 +820,22 @@ if (!is_numeric($rec['soft'])) $rec['soft']=$rec['soft'][1]; if (!is_numeric($rec['hard'])) $rec['hard']=$rec['hard'][1]; if (!is_numeric($rec['files'])) $rec['files']=$rec['files'][1]; - + // used space ratio if($rec['soft'] > 0){ $used_ratio = $rec['used']/$rec['soft']; } else { $used_ratio = 0; } - + $rec['ratio'] = number_format($used_ratio * 100, 2, '.', '').'%'; - + if($rec['used'] > 1024) { $rec['used'] = round($rec['used'] / 1024,2).' MB'; } else { if ($rec['used'] != '') $rec['used'] .= ' KB'; } - + if($rec['soft'] > 1024) { $rec['soft'] = round($rec['soft'] / 1024,2).' MB'; } elseif($rec['soft'] == 0){ @@ -844,7 +843,7 @@ } else { $rec['soft'] .= ' KB'; } - + if($rec['hard'] > 1024) { $rec['hard'] = round($rec['hard'] / 1024,2).' MB'; } elseif($rec['hard'] == 0){ @@ -852,12 +851,12 @@ } else { $rec['hard'] .= ' KB'; } - + // send notifications only if 90% or more of the quota are used if($used_ratio < 0.9) { // reset notification date if($rec['last_quota_notification']) $app->dbmaster->datalogUpdate('web_domain', "last_quota_notification = NULL", 'domain_id', $rec['domain_id']); - + // send notification - everything ok again if($rec['last_quota_notification'] && $web_config['overquota_notify_onok'] == 'y' && ($web_config['overquota_notify_admin'] == 'y' || $web_config['overquota_notify_client'] == 'y')) { $placeholders = array('{domain}' => $rec['domain'], @@ -868,12 +867,12 @@ '{ratio}' => $rec['ratio']); $recipients = array(); - + //* send email to admin if($global_config['admin_mail'] != '' && $web_config['overquota_notify_admin'] == 'y') { $recipients[] = $global_config['admin_mail']; } - + //* Send email to client if($web_config['overquota_notify_client'] == 'y') { $client_group_id = $rec["sys_groupid"]; @@ -884,19 +883,19 @@ } send_notification_email('web_quota_ok_notification', $placeholders, $recipients); } - + continue; } - + // could a notification be sent? $send_notification = false; if(!$rec['last_quota_notification']) $send_notification = true; // not yet notified elseif($web_config['overquota_notify_freq'] > 0 && $rec['notified_before'] >= $web_config['overquota_notify_freq']) $send_notification = true; - + //* Send quota notifications if(($web_config['overquota_notify_admin'] == 'y' || $web_config['overquota_notify_client'] == 'y') && $send_notification == true) { $app->dbmaster->datalogUpdate('web_domain', "last_quota_notification = CURDATE()", 'domain_id', $rec['domain_id']); - + $placeholders = array('{domain}' => $rec['domain'], '{admin_mail}' => $global_config['admin_mail'], '{used}' => $rec['used'], @@ -905,12 +904,12 @@ '{ratio}' => $rec['ratio']); $recipients = array(); - + //* send email to admin if($global_config['admin_mail'] != '' && $web_config['overquota_notify_admin'] == 'y') { $recipients[] = $global_config['admin_mail']; } - + //* Send email to client if($web_config['overquota_notify_client'] == 'y') { $client_group_id = $rec["sys_groupid"]; @@ -939,7 +938,7 @@ $sql = "SELECT mailuser_id,sys_groupid,email,name,quota,last_quota_notification,DATEDIFF(CURDATE(), last_quota_notification) as `notified_before` FROM mail_user"; $records = $app->db->queryAllRecords($sql); if(is_array($records) && !empty($records)) { - + $tmp_rec = $app->db->queryAllRecords("SELECT data from monitor_data WHERE type = 'email_quota' ORDER BY created DESC"); $monitor_data = array(); if(is_array($tmp_rec)) { @@ -953,24 +952,24 @@ } } } - + foreach($records as $rec) { $email = $rec['email']; - + $rec['used'] = isset($monitor_data[$email]['used']) ? $monitor_data[$email]['used'] : array(1 => 0); - + if (!is_numeric($rec['used'])) $rec['used']=$rec['used'][1]; - + // used space ratio if($rec['quota'] > 0){ $used_ratio = $rec['used']/$rec['quota']; } else { $used_ratio = 0; } - + $rec['ratio'] = number_format($used_ratio * 100, 2, '.', '').'%'; - + if($rec['quota'] > 0){ $rec['quota'] = round($rec['quota'] / 1048576,4).' MB'; } else { @@ -981,8 +980,8 @@ $rec['used'] = round($rec['used'] / 1024,4).' KB'; } else { $rec['used'] = round($rec['used'] / 1048576,4).' MB'; - } - + } + // send notifications only if 90% or more of the quota are used if($used_ratio < 0.9) { // reset notification date @@ -996,13 +995,13 @@ '{name}' => $rec['name'], '{quota}' => $rec['quota'], '{ratio}' => $rec['ratio']); - + $recipients = array(); //* send email to admin if($global_config['admin_mail'] != '' && $mail_config['overquota_notify_admin'] == 'y') { $recipients[] = $global_config['admin_mail']; } - + //* Send email to client if($mail_config['overquota_notify_client'] == 'y') { $client_group_id = $rec["sys_groupid"]; @@ -1011,35 +1010,35 @@ $recipients[] = $client['email']; } } - + send_notification_email('mail_quota_ok_notification', $placeholders, $recipients); } continue; } - + //* Send quota notifications // could a notification be sent? $send_notification = false; if(!$rec['last_quota_notification']) $send_notification = true; // not yet notified elseif($mail_config['overquota_notify_freq'] > 0 && $rec['notified_before'] >= $mail_config['overquota_notify_freq']) $send_notification = true; - + if(($mail_config['overquota_notify_admin'] == 'y' || $mail_config['overquota_notify_client'] == 'y') && $send_notification == true) { $app->dbmaster->datalogUpdate('mail_user', "last_quota_notification = CURDATE()", 'mailuser_id', $rec['mailuser_id']); - + $placeholders = array('{email}' => $rec['email'], '{admin_mail}' => $global_config['admin_mail'], '{used}' => $rec['used'], '{name}' => $rec['name'], '{quota}' => $rec['quota'], '{ratio}' => $rec['ratio']); - + $recipients = array(); //* send email to admin if($global_config['admin_mail'] != '' && $mail_config['overquota_notify_admin'] == 'y') { $recipients[] = $global_config['admin_mail']; } - + //* Send email to client if($mail_config['overquota_notify_client'] == 'y') { $client_group_id = $rec["sys_groupid"]; @@ -1048,9 +1047,9 @@ $recipients[] = $client['email']; } } - + send_notification_email('mail_quota_notification', $placeholders, $recipients); - } + } } } } @@ -1081,7 +1080,7 @@ ####################################################################################################### function formatBytes($size, $precision = 2) { $base=log($size)/log(1024); - $suffixes=array('','k','M','G','T'); + $suffixes=array('','k','M','G','T'); return round(pow(1024,$base-floor($base)),$precision).$suffixes[floor($base)]; } @@ -1153,7 +1152,7 @@ } else { if(is_file($web_backup_dir.'/'.$web_backup_file)) unlink($web_backup_dir.'/'.$web_backup_file); } - + //* Remove old backups $backup_copies = intval($rec['backup_copies']); @@ -1187,7 +1186,7 @@ //* Remove backupdir symlink and create as directory instead $app->uses('system'); $app->system->web_folder_protection($web_path,false); - + if(is_link($web_path.'/backup')) { unlink($web_path.'/backup'); } @@ -1196,7 +1195,7 @@ chown($web_path.'/backup', $rec['system_user']); chgrp($web_path.'/backup', $rec['system_group']); } - + $app->system->web_folder_protection($web_path,true); } @@ -1232,33 +1231,72 @@ chown($db_backup_dir, 'root'); chgrp($db_backup_dir, 'root'); - //* Do the mysql database backup with mysqldump + //* Do the mysql database backup with mysqldump or mongodump $db_id = $rec['database_id']; $db_name = $rec['database_name']; - $db_backup_file = 'db_'.$db_name.'_'.date('Y-m-d_H-i').'.sql'; - $command = "mysqldump -h '".escapeshellcmd($clientdb_host)."' -u '".escapeshellcmd($clientdb_user)."' -p'".escapeshellcmd($clientdb_password)."' -c --add-drop-table --create-options --quick --result-file='".$db_backup_dir.'/'.$db_backup_file."' '".$db_name."'"; - exec($command, $tmp_output, $retval); - //* Compress the backup with gzip - if($retval == 0) exec("gzip -c '".escapeshellcmd($db_backup_dir.'/'.$db_backup_file)."' > '".escapeshellcmd($db_backup_dir.'/'.$db_backup_file).".gz'", $tmp_output, $retval); - - if($retval == 0){ - chmod($db_backup_dir.'/'.$db_backup_file.'.gz', 0750); - chown($db_backup_dir.'/'.$db_backup_file.'.gz', fileowner($db_backup_dir)); - chgrp($db_backup_dir.'/'.$db_backup_file.'.gz', filegroup($db_backup_dir)); + if ($rec['type'] == 'mysql') { + $db_backup_file = 'db_'.$db_name.'_'.date('Y-m-d_H-i').'.sql'; + $command = "mysqldump -h '".escapeshellcmd($clientdb_host)."' -u '".escapeshellcmd($clientdb_user)."' -p'".escapeshellcmd($clientdb_password)."' -c --add-drop-table --create-options --quick --result-file='".$db_backup_dir.'/'.$db_backup_file."' '".$db_name."'"; + exec($command, $tmp_output, $retval); - //* Insert web backup record in database - //$insert_data = "(server_id,parent_domain_id,backup_type,backup_mode,tstamp,filename) VALUES (".$conf['server_id'].",$web_id,'mysql','sqlgz',".time().",'".$app->db->quote($db_backup_file).".gz')"; - //$app->dbmaster->datalogInsert('web_backup', $insert_data, 'backup_id'); - $sql = "INSERT INTO web_backup (server_id,parent_domain_id,backup_type,backup_mode,tstamp,filename) VALUES (".$conf['server_id'].",$web_id,'mysql','sqlgz',".time().",'".$app->db->quote($db_backup_file).".gz')"; - $app->db->query($sql); - if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql); + //* Compress the backup with gzip + if($retval == 0) exec("gzip -c '".escapeshellcmd($db_backup_dir.'/'.$db_backup_file)."' > '".escapeshellcmd($db_backup_dir.'/'.$db_backup_file).".gz'", $tmp_output, $retval); - } else { - if(is_file($db_backup_dir.'/'.$db_backup_file.'.gz')) unlink($db_backup_dir.'/'.$db_backup_file.'.gz'); + if($retval == 0){ + chmod($db_backup_dir.'/'.$db_backup_file.'.gz', 0750); + chown($db_backup_dir.'/'.$db_backup_file.'.gz', fileowner($db_backup_dir)); + chgrp($db_backup_dir.'/'.$db_backup_file.'.gz', filegroup($db_backup_dir)); + + //* Insert web backup record in database + //$insert_data = "(server_id,parent_domain_id,backup_type,backup_mode,tstamp,filename) VALUES (".$conf['server_id'].",$web_id,'mysql','sqlgz',".time().",'".$app->db->quote($db_backup_file).".gz')"; + //$app->dbmaster->datalogInsert('web_backup', $insert_data, 'backup_id'); + $sql = "INSERT INTO web_backup (server_id,parent_domain_id,backup_type,backup_mode,tstamp,filename) VALUES (".$conf['server_id'].",$web_id,'mysql','sqlgz',".time().",'".$app->db->quote($db_backup_file).".gz')"; + $app->db->query($sql); + if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql); + + } else { + if(is_file($db_backup_dir.'/'.$db_backup_file.'.gz')) unlink($db_backup_dir.'/'.$db_backup_file.'.gz'); + } + //* Remove the uncompressed file + if(is_file($db_backup_dir.'/'.$db_backup_file)) unlink($db_backup_dir.'/'.$db_backup_file); + } else if ($rec['type'] == 'mongo') { + $db_backup_file = 'db_'.$db_name.'_'.date('Y-m-d_H-i'); + + try { + $connection = new MongoClient("mongodb://root:123456@127.0.0.1:27017/admin"); + $db = $connection->selectDB($db_name); + // exclude not supported by mongodump, only get user collections + $collections = $db->getCollectionNames(false); + + foreach ($collections as $collection) { + // mongodump -h 127.0.0.1 --port 27017 -u root -p 123456 --authenticationDatabase admin -d <db> -c <table> -o /tmp/test + $command = "mongodump -h 127.0.0.1 --port 27017 -u root -p 123456 --authenticationDatabase admin -d ".escapeshellcmd($db_name)." -c ".escapeshellcmd($collection)." -o ".escapeshellcmd($db_backup_dir.'/'.$db_backup_file); + exec($command); + } + + if (is_dir(escapeshellcmd($db_backup_dir.'/'.$db_backup_file))) { + //* Compress the backup with gzip + exec("cd ".escapeshellcmd($db_backup_dir)." && tar -pczf ".escapeshellcmd($db_backup_dir.'/'.$db_backup_file).".tar.gz ".escapeshellcmd($db_backup_file)); + chmod($db_backup_dir.'/'.$db_backup_file.'.tar.gz', 0750); + chown($db_backup_dir.'/'.$db_backup_file.'.tar.gz', fileowner($db_backup_dir)); + chgrp($db_backup_dir.'/'.$db_backup_file.'.tar.gz', filegroup($db_backup_dir)); + + //* Insert web backup record in database + $sql = "INSERT INTO web_backup (server_id,parent_domain_id,backup_type,backup_mode,tstamp,filename) VALUES (".$conf['server_id'].",$web_id,'mongodb','rootgz',".time().",'".$app->db->quote($db_backup_file).".tar.gz')"; + $app->db->query($sql); + + if ($app->db->dbHost != $app->dbmaster->dbHost) { + $app->dbmaster->query($sql); + } + + //* Remove the uncompressed file + exec("rm -rf ".escapeshellcmd($db_backup_dir.'/'.$db_backup_file)); + } + } catch (MongoConnnectionException $e) { + // connecting to MongoDB failed - cannot create backup + } } - //* Remove the uncompressed file - if(is_file($db_backup_dir.'/'.$db_backup_file)) unlink($db_backup_dir.'/'.$db_backup_file); //* Remove old backups $backup_copies = intval($rec['backup_copies']); @@ -1266,13 +1304,13 @@ $dir_handle = dir($db_backup_dir); $files = array(); while (false !== ($entry = $dir_handle->read())) { - if($entry != '.' && $entry != '..' && preg_match('/^db_(.*?)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.sql.gz$/', $entry, $matches) && is_file($db_backup_dir.'/'.$entry)) { + if($entry != '.' && $entry != '..' && (preg_match('/^db_(.*?)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.sql.gz$/', $entry, $matches) || preg_match('/^db_(.*?)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.tar.gz$/', $entry, $matches)) && is_file($db_backup_dir.'/'.$entry)) { if(array_key_exists($matches[1], $files) == false) $files[$matches[1]] = array(); $files[$matches[1]][] = $entry; } } $dir_handle->close(); - + reset($files); foreach($files as $db_name => $filelist) { rsort($filelist); -- Gitblit v1.9.1