diff --git a/alerts.php b/alerts.php index 0615f587b0..c0210eb84d 100755 --- a/alerts.php +++ b/alerts.php @@ -163,6 +163,10 @@ function RunAlerts() { $updet = false; $noacc = false; } + if( IsMaintenance($device) > 0 ) { + $noiss = true; + $noacc = false; + } if( $updet ) { dbUpdate(array('details' => gzcompress(json_encode($alert['details']),9)),'alert_log','id = ?',array($alert['id'])); } diff --git a/includes/alerts.inc.php b/includes/alerts.inc.php index aa5c8687ce..40c58cc8f0 100644 --- a/includes/alerts.inc.php +++ b/includes/alerts.inc.php @@ -71,6 +71,22 @@ function GetRules($device) { return dbFetchRows('SELECT alert_rules.* FROM alert_rules LEFT JOIN alert_map ON alert_rules.id=alert_map.rule WHERE alert_rules.disabled = 0 && ( (alert_rules.device_id = -1 || alert_rules.device_id = ? ) || alert_map.target = ? '.$where.' )',$params); } +/** + * Check if device is under maintenance + * @param int $device Device-ID + * @return bool + */ +function IsMaintenance( $device ) { + $groups = GetGroupsFromDevice($device); + $params = array($device); + $where = ""; + foreach( $groups as $group ) { + $where .= " || alert_schedule_items.target = ?"; + $params[] = 'g'.$group; + } + return dbFetchCell('SELECT DISTINCT(alert_schedule.schedule_id) FROM alert_schedule LEFT JOIN alert_schedule_items ON alert_schedule.schedule_id=alert_schedule_items.schedule_id WHERE alert_schedule_items.target = ?'.$where.' LIMIT 1',$params); +} + /** * Run all rules for a device * @param int $device Device-ID @@ -78,8 +94,8 @@ function GetRules($device) { */ function RunRules($device) { global $debug; - $chk = dbFetchRow("SELECT id FROM alert_schedule WHERE alert_schedule.device_id = ? AND NOW() BETWEEN alert_schedule.start AND alert_schedule.end", array($device)); - if( $chk['id'] > 0 ) { + if( IsMaintenance($device) > 0 ) { + echo "Under Maintenance, Skipping alerts.\r\n"; return false; } foreach( GetRules($device) as $rule ) {