From 20ee9f407906d2c0678c54e7ef321719e1339782 Mon Sep 17 00:00:00 2001
From: ftimme <ft@falkotimme.com>
Date: Thu, 11 Jul 2013 19:25:44 -0400
Subject: [PATCH] - Admins can now choose to be notified by email about debug, warning or error messages in the server process.

---
 interface/web/admin/lib/lang/de_server_config.lng           |    2 +
 server/server.php                                           |   10 +++++
 interface/web/admin/lib/lang/en_server_config.lng           |    2 +
 server/lib/app.inc.php                                      |   45 ++++++++++++++++------
 install/tpl/server.ini.master                               |    1 
 server/plugins-available/nginx_plugin.inc.php               |    7 ---
 interface/web/admin/form/server_config.tform.php            |    8 ++++
 interface/web/admin/templates/server_config_server_edit.htm |    6 +++
 8 files changed, 62 insertions(+), 19 deletions(-)

diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index bbdc0cf..f089260 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -13,6 +13,7 @@
 nameservers=8.8.8.8,8.8.4.4
 firewall=bastille
 loglevel=2
+admin_notify_events=1
 backup_dir=/var/backup
 backup_mode=rootgz
 
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index d0dc295..78995e3 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -152,6 +152,14 @@
 			'width' => '40',
 			'maxlength' => '255'
 		),
+		'admin_notify_events' => array(
+			'datatype' => 'INTEGER',
+			'formtype' => 'SELECT',
+			'default' => '1',
+			'value' => array('3' => 'no_notifications_txt', '0' => 'Debug', '1' => 'Warnings', '2' => 'Errors'),
+			'width' => '40',
+			'maxlength' => '255'
+		),
 		'backup_dir' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index d258c03..bc2c5ee 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -176,4 +176,6 @@
 $wb['overquota_notify_onok_txt'] = 'Meldung an den Kunden senden, wenn Belegung wieder ok';
 $wb['overquota_notify_freq_txt'] = 'Quota-Warnung alle X Tage versenden';
 $wb['overquota_notify_freq_note_txt'] = '0 = Meldung nur einmalig versenden, keine Wiederholung';
+$wb['admin_notify_events_txt'] = 'Sende E-Mail an Administrator ab folgendem Level';
+$wb['no_notifications_txt'] = 'Keine Benachrichtigungen';
 ?>
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index ab568b3..456ec15 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -176,4 +176,6 @@
 $wb["overquota_notify_onok_txt"] = 'Send quota ok message to client';
 $wb['overquota_notify_freq_txt'] = 'Send quota warning each X days';
 $wb['overquota_notify_freq_note_txt'] = '0 = send message just once, no repeated messages';
+$wb['admin_notify_events_txt'] = 'Send email to admin starting with the following level';
+$wb['no_notifications_txt'] = 'No Notifications';
 ?>
diff --git a/interface/web/admin/templates/server_config_server_edit.htm b/interface/web/admin/templates/server_config_server_edit.htm
index 6616f9f..48cc5ac 100644
--- a/interface/web/admin/templates/server_config_server_edit.htm
+++ b/interface/web/admin/templates/server_config_server_edit.htm
@@ -49,6 +49,12 @@
                     {tmpl_var name='loglevel'}
                 </select>
             </div>
+			<div class="ctrlHolder">
+                <label for="admin_notify_events">{tmpl_var name='admin_notify_events_txt'}</label>
+                <select name="admin_notify_events" id="admin_notify_events" class="selectInput">
+                    {tmpl_var name='admin_notify_events'}
+                </select>
+            </div>
             <div class="ctrlHolder">
                 <label for="backup_dir">{tmpl_var name='backup_dir_txt'}</label>
                 <input name="backup_dir" id="backup_dir" value="{tmpl_var name='backup_dir'}" size="40" maxlength="255" type="text" class="textInput" />
diff --git a/server/lib/app.inc.php b/server/lib/app.inc.php
index 87f964dc..11bf8da 100755
--- a/server/lib/app.inc.php
+++ b/server/lib/app.inc.php
@@ -102,28 +102,31 @@
         function log($msg, $priority = 0) {
 				
 		global $conf;
+		
+		switch ($priority) {
+			case 0:
+				$priority_txt = 'DEBUG';
+				break;
+			case 1:
+				$priority_txt = 'WARNING';
+				break;
+			case 2:
+				$priority_txt = 'ERROR';
+				break;
+		}
+		$log_msg = @date('d.m.Y-H:i').' - '.$priority_txt.' - '. $msg;
 
 		if($priority >= $conf['log_priority']) {
                         //if (is_writable($conf["log_file"])) {
                             if (!$fp = fopen ($conf['log_file'], 'a')) {
                                 die('Unable to open logfile.');
                             }
-						switch ($priority) {
-							case 0:
-								$priority_txt = 'DEBUG';
-								break;
-							case 1:
-								$priority_txt = 'WARNING';
-								break;
-							case 2:
-								$priority_txt = 'ERROR';
-								break;
-						}
 							
-                            if (!fwrite($fp, @date('d.m.Y-H:i').' - '.$priority_txt.' - '. $msg."\r\n")) {
+                            if (!fwrite($fp, $log_msg."\r\n")) {
                                 die('Unable to write to logfile.');
                             }
-				echo @date('d.m.Y-H:i').' - '.$priority_txt.' - '. $msg."\n";
+				
+				echo $log_msg."\n";
 				fclose($fp);
 
 					// Log to database
@@ -149,8 +152,24 @@
                         //} else {
                         //    die("Unable to write to logfile.");
                         //}
+					
+    
                 } // if
+				
+				if($priority >= $conf['admin_notify_priority'] && $conf['admin_mail'] != '') {
+					// send notification to admin
+					$mailBody = $log_msg;
+					$mailSubject = substr($log_msg,0,50).'...';
+					$mailHeaders      = "MIME-Version: 1.0" . "\n";
+					$mailHeaders     .= "Content-type: text/plain; charset=utf-8" . "\n";
+					$mailHeaders     .= "Content-Transfer-Encoding: 8bit" . "\n";
+					$mailHeaders     .= "From: ". $conf['admin_mail'] . "\n";
+					$mailHeaders     .= "Reply-To: ". $conf['admin_mail'] . "\n";
+
+					mail($conf['admin_mail'], $mailSubject, $mailBody, $mailHeaders);
+				}
         } // func
+		
 
         /*
          0 = DEBUG
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index ecfe5e4..7defeb5 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -1583,12 +1583,7 @@
 			}
 		} else {
 			//* We do not check the nginx config after changes (is faster)
-			if($nginx_chrooted) {
-				$app->services->restartServiceDelayed('httpd','reload');
-			} else {
-				// request a httpd reload when all records have been processed
-				$app->services->restartServiceDelayed('httpd','reload');
-			}
+			$app->services->restartServiceDelayed('httpd','reload');
 		}
 		
 		//* The vhost is written and apache has been restarted, so we 
diff --git a/server/server.php b/server/server.php
index d728283..6e7489d 100644
--- a/server/server.php
+++ b/server/server.php
@@ -62,10 +62,20 @@
 
 	// Set the loglevel
 	$conf['log_priority'] = intval($conf['serverconfig']['server']['loglevel']);
+	
+	// Set level from which admin should be notified by email
+	if(!isset($conf['serverconfig']['server']['admin_notify_events']) || $conf['serverconfig']['server']['admin_notify_events'] == '') $conf['serverconfig']['server']['admin_notify_events'] = 3;
+	$conf['admin_notify_priority'] = intval($conf['serverconfig']['server']['admin_notify_events']);
 
 	// we do not need this variable anymore
 	unset($server_db_record);
 	
+	// retrieve admin email address for notifications
+	$sys_ini = $app->dbmaster->queryOneRecord("SELECT * FROM sys_ini WHERE sysini_id = 1");
+	$conf['sys_ini'] = $app->ini_parser->parse_ini_string(stripslashes($sys_ini['config']));
+	$conf['admin_mail'] = $conf['sys_ini']['mail']['admin_mail'];
+	unset($sys_ini);
+	
 	/*
 	 * Save the rescue-config, maybe we need it (because the database is down)
 	 */

--
Gitblit v1.9.1