From 632bf1231a3a1cc9ebd24af672bdbfb18c67b6ef Mon Sep 17 00:00:00 2001 From: f0o Date: Tue, 17 Feb 2015 20:52:50 +0000 Subject: [PATCH] Fix #474 Remove obsolete states for removed rules --- alerts.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/alerts.php b/alerts.php index 1ea98c7854..d90f934da0 100755 --- a/alerts.php +++ b/alerts.php @@ -63,7 +63,13 @@ unlink($config['install_dir']."/.alerts.lock"); function RunFollowUp() { global $config; foreach( dbFetchRows("SELECT alerts.device_id, alerts.rule_id, alerts.state FROM alerts WHERE alerts.state != 2 && alerts.open = 0") as $alert ) { + $tmp = array($alert['rule_id'],$alert['device_id']); $alert = dbFetchRow("SELECT alert_log.id,alert_log.rule_id,alert_log.device_id,alert_log.state,alert_log.details,alert_log.time_logged,alert_rules.rule,alert_rules.severity,alert_rules.extra,alert_rules.name FROM alert_log,alert_rules WHERE alert_log.rule_id = alert_rules.id && alert_log.device_id = ? && alert_log.rule_id = ? ORDER BY alert_log.id DESC LIMIT 1",array($alert['device_id'],$alert['rule_id'])); + if( empty($alert['rule']) ) { + // Alert-Rule does not exist anymore, let's remove the alert-state. + dbDelete('alerts','rule_id = ? && device_id = ?',array($tmp[0],$tmp[1])); + continue; + } $alert['details'] = json_decode(gzuncompress($alert['details']),true); $rextra = json_decode($alert['extra'],true); if( $rextra['invert'] ) { @@ -99,7 +105,13 @@ function RunAlerts() { global $config; $default_tpl = "%title\r\nSeverity: %severity\r\n{if %state == 0}Time elapsed: %elapsed\r\n{/if}Timestamp: %timestamp\r\nUnique-ID: %uid\r\nRule: {if %name}%name{else}%rule{/if}\r\n{if %faults}Faults:\r\n{foreach %faults} #%key: %value.string\r\n{/foreach}{/if}Alert sent to: {foreach %contacts}%value <%key> {/foreach}"; //FIXME: Put somewhere else? foreach( dbFetchRows("SELECT alerts.device_id, alerts.rule_id, alerts.state FROM alerts WHERE alerts.state != 2 && alerts.open = 1") as $alert ) { + $tmp = array($alert['rule_id'],$alert['device_id']); $alert = dbFetchRow("SELECT alert_log.id,alert_log.rule_id,alert_log.device_id,alert_log.state,alert_log.details,alert_log.time_logged,alert_rules.rule,alert_rules.severity,alert_rules.extra,alert_rules.name FROM alert_log,alert_rules WHERE alert_log.rule_id = alert_rules.id && alert_log.device_id = ? && alert_log.rule_id = ? ORDER BY alert_log.id DESC LIMIT 1",array($alert['device_id'],$alert['rule_id'])); + if( empty($alert['rule_id']) ) { + // Alert-Rule does not exist anymore, let's remove the alert-state. + dbDelete('alerts','rule_id = ? && device_id = ?',array($tmp[0],$tmp[1])); + continue; + } $alert['details'] = json_decode(gzuncompress($alert['details']),true); $noiss = false; $noacc = false;