Merge pull request #1096 from laf/issue-1095-web

Added support for interval for alerting for WebUI
This commit is contained in:
Neil Lathwood
2015-06-20 01:56:08 +01:00
4 changed files with 55 additions and 14 deletions

View File

@@ -197,20 +197,45 @@ function RunAlerts() {
if( $chk['alerted'] == $alert['state'] ) {
$noiss = true;
}
if( !empty($rextra['delay']) ) {
if( (time()-strtotime($alert['time_logged'])+$config['alert']['tolerance-window']) < $rextra['delay'] || (!empty($alert['details']['delay']) && (time()-$alert['details']['delay']+$config['alert']['tolerance-window']) < $rextra['delay']) ) {
if( !empty($rextra['count']) && empty($rextra['interval']) ) {
// This check below is for compat-reasons
if( !empty($rextra['delay']) ) {
if( (time()-strtotime($alert['time_logged'])+$config['alert']['tolerance-window']) < $rextra['delay'] || (!empty($alert['details']['delay']) && (time()-$alert['details']['delay']+$config['alert']['tolerance-window']) < $rextra['delay']) ) {
continue;
} else {
$alert['details']['delay'] = time();
} else {
$alert['details']['delay'] = time();
$updet = true;
}
}
if( $alert['state'] == 1 && !empty($rextra['count']) && ($rextra['count'] == -1 || $alert['details']['count']++ < $rextra['count']) ) {
if( $alert['details']['count'] < $rextra['count'] ) {
$noacc = true;
}
$updet = true;
$noiss = false;
}
}
if( $alert['state'] == 1 && !empty($rextra['count']) && ($rextra['count'] == -1 || $alert['details']['count']++ < $rextra['count']) ) {
if( $alert['details']['count'] < $rextra['count'] ) {
$noacc = true;
} else {
// This is the new way
if( !empty($rextra['delay']) && (time()-strtotime($alert['time_logged'])+$config['alert']['tolerance-window']) < $rextra['delay'] ) {
continue;
}
$updet = true;
$noiss = false;
if( !empty($rextra['interval']) ) {
if( !empty($alert['details']['interval']) && (time()-$alert['details']['interval']+$config['alert']['tolerance-window']) < $rextra['interval'] ) {
continue;
} else {
$alert['details']['interval'] = time();
$updet = true;
}
}
if( $alert['state'] == 1 && !empty($rextra['count']) && ($rextra['count'] == -1 || $alert['details']['count']++ < $rextra['count']) ) {
if( $alert['details']['count'] < $rextra['count'] ) {
$noacc = true;
}
$updet = true;
$noiss = false;
}
}
if( $chk['ignore'] == 1 || $chk['disabled'] == 1 ) {
$noiss = true;

View File

@@ -22,6 +22,7 @@ $rule = rtrim($rule,'||');
$alert_id = $_POST['alert_id'];
$count = mres($_POST['count']);
$delay = mres($_POST['delay']);
$interval = mres($_POST['interval']);
$mute = mres($_POST['mute']);
$invert = mres($_POST['invert']);
$name = mres($_POST['name']);
@@ -34,6 +35,7 @@ if(empty($rule)) {
$count='-1';
}
$delay_sec = convert_delay($delay);
$interval_sec = convert_delay($interval);
if($mute == 'on') {
$mute = true;
} else {
@@ -44,7 +46,7 @@ if(empty($rule)) {
} else {
$invert = false;
}
$extra = array('mute'=>$mute,'count'=>$count,'delay'=>$delay_sec,'invert'=>$invert);
$extra = array('mute'=>$mute,'count'=>$count,'delay'=>$delay_sec,'invert'=>$invert,'interval'=>$interval_sec);
$extra_json = json_encode($extra);
if(is_numeric($alert_id) && $alert_id > 0) {
if(dbUpdate(array('rule' => $rule,'severity'=>mres($_POST['severity']),'extra'=>$extra_json,'name'=>$name), 'alert_rules', 'id=?',array($alert_id)) >= 0) {

View File

@@ -93,10 +93,14 @@ if(is_admin() !== false) {
<div class='col-sm-2'>
<input type='text' id='count' name='count' class='form-control'>
</div>
<label for='delay' class='col-sm-3 control-label'>Alert delay: </label>
<label for='delay' class='col-sm-1 control-label'>Delay: </label>
<div class='col-sm-2'>
<input type='text' id='delay' name='delay' class='form-control'>
</div>
<label for='interval' class='col-sm-2 control-label'>Interval: </label>
<div class='col-sm-2'>
<input type='text' id='interval' name='interval' class='form-control'>
</div>
</div>
<div class='form-group'>
<label for='mute' class='col-sm-3 control-label'>Mute alerts: </label>
@@ -202,6 +206,16 @@ $('#create-alert').on('show.bs.modal', function (event) {
var delay = extra['delay'];
}
$('#delay').val(delay);
if((extra['interval'] / 86400) >= 1) {
var interval = extra['interval'] / 86400 + ' d';
} else if((extra['interval'] / 3600) >= 1) {
var interval = extra['interval'] / 3600 + ' h';
} else if((extra['interval'] / 60) >= 1) {
var interval = extra['interval'] / 60 + ' m';
} else {
var interval = extra['interval'];
}
$('#interval').val(interval);
$("[name='mute']").bootstrapSwitch('state',extra['mute']);
$("[name='invert']").bootstrapSwitch('state',extra['invert']);
$('#name').val(output['name']);

View File

@@ -122,7 +122,7 @@ foreach( dbFetchRows($full_query, $param) as $rule ) {
echo "<tr class='".$extra."' id='row_".$rule['id']."'>";
echo "<td><i>#".((int) $rulei++)."</i></td>";
echo "<td>".$rule['name']."</td>";
echo "<td>";
echo "<td class='col-sm-4'>";
if($rule_extra['invert'] === true) {
echo "<strong><em>Inverted</em></strong> ";
}
@@ -132,7 +132,7 @@ foreach( dbFetchRows($full_query, $param) as $rule ) {
if($rule_extra['mute'] === true) {
echo "<span class='glyphicon glyphicon-volume-off glyphicon-large text-primary' aria-hidden='true'></span></td>";
}
echo "<td><small>Max: ".$rule_extra['count']."<br />Delay: ".$rule_extra['delay']."</small></td>";
echo "<td><small>Max: ".$rule_extra['count']."<br />Delay: ".$rule_extra['delay']."<br />Interval: ".$rule_extra['interval']."</small></td>";
echo "<td>";
if ($_SESSION['userlevel'] >= '10') {
echo "<input id='".$rule['id']."' type='checkbox' name='alert-rule' data-orig_class='".$orig_class."' data-orig_colour='".$orig_col."' data-orig_state='".$orig_ico."' data-alert_id='".$rule['id']."' ".$alert_checked." data-size='small'>";