From 4765cebea0eb2f43cda30e5040b5f53bad52fcf0 Mon Sep 17 00:00:00 2001 From: laf Date: Wed, 20 May 2015 21:46:54 +0100 Subject: [PATCH 1/2] Added support for interval for alerting --- html/forms/create-alert-item.inc.php | 4 +++- html/includes/modal/new_alert_rule.inc.php | 16 +++++++++++++++- html/includes/print-alert-rules.php | 4 ++-- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/html/forms/create-alert-item.inc.php b/html/forms/create-alert-item.inc.php index e11c561242..91907e26fb 100644 --- a/html/forms/create-alert-item.inc.php +++ b/html/forms/create-alert-item.inc.php @@ -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) { diff --git a/html/includes/modal/new_alert_rule.inc.php b/html/includes/modal/new_alert_rule.inc.php index 59f464e3bc..3d952ea950 100644 --- a/html/includes/modal/new_alert_rule.inc.php +++ b/html/includes/modal/new_alert_rule.inc.php @@ -87,10 +87,14 @@ if(is_admin() !== false) {
- +
+ +
+ +
@@ -196,6 +200,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']); diff --git a/html/includes/print-alert-rules.php b/html/includes/print-alert-rules.php index 03b6707c48..08753ca618 100644 --- a/html/includes/print-alert-rules.php +++ b/html/includes/print-alert-rules.php @@ -122,7 +122,7 @@ foreach( dbFetchRows($full_query, $param) as $rule ) { echo ""; echo "#".((int) $rulei++).""; echo "".$rule['name'].""; - echo ""; + echo ""; if($rule_extra['invert'] === true) { echo "Inverted "; } @@ -132,7 +132,7 @@ foreach( dbFetchRows($full_query, $param) as $rule ) { if($rule_extra['mute'] === true) { echo ""; } - echo "Max: ".$rule_extra['count']."
Delay: ".$rule_extra['delay']."
"; + echo "Max: ".$rule_extra['count']."
Delay: ".$rule_extra['delay']."
Interval: ".$rule_extra['interval']."
"; echo ""; if ($_SESSION['userlevel'] >= '10') { echo ""; From 1e34fb0753f2a7a121c7edaa3d326901b157b6ef Mon Sep 17 00:00:00 2001 From: laf Date: Sat, 20 Jun 2015 01:49:03 +0100 Subject: [PATCH 2/2] Added f0os patch for using interval on alerts --- alerts.php | 45 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/alerts.php b/alerts.php index 56fd4ffdd7..726a8bb0c2 100755 --- a/alerts.php +++ b/alerts.php @@ -194,20 +194,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;