ftimme
2013-07-11 20ee9f407906d2c0678c54e7ef321719e1339782
- Admins can now choose to be notified by email about debug, warning or error messages in the server process.
8 files modified
81 ■■■■ changed files
install/tpl/server.ini.master 1 ●●●● patch | view | raw | blame | history
interface/web/admin/form/server_config.tform.php 8 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/de_server_config.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/en_server_config.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/admin/templates/server_config_server_edit.htm 6 ●●●●● patch | view | raw | blame | history
server/lib/app.inc.php 45 ●●●● patch | view | raw | blame | history
server/plugins-available/nginx_plugin.inc.php 7 ●●●● patch | view | raw | blame | history
server/server.php 10 ●●●●● patch | view | raw | blame | history
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
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',
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';
?>
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';
?>
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" />
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
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 
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)
     */