0, 'alerted' => 1, 'acknowledged' => 2, 'worse' => 3, 'better' => 4, ]; $show_recovered = false; if (is_numeric($vars['alert_id']) && $vars['alert_id'] > 0) { $where .= ' AND `alerts`.`id` = ?'; $param[] = $vars['alert_id']; } if (is_numeric($vars['device_id']) && $vars['device_id'] > 0) { $where .= ' AND `alerts`.`device_id`=' . $vars['device_id']; } if (is_numeric($vars['acknowledged'])) { // I assume that if we are searching for acknowleged/not, we aren't interested in recovered $where .= ' AND `alerts`.`state`' . ($vars['acknowledged'] ? '=' : '!=') . $alert_states['acknowledged']; } if (is_numeric($vars['fired'])) { $where .= ' AND `alerts`.`alerted`=' . $alert_states['alerted']; } if (is_numeric($vars['state'])) { $where .= ' AND `alerts`.`state`=' . $vars['state']; if ($vars['state'] == $alert_states['recovered']) { $show_recovered = true; } } if (isset($vars['min_severity'])) { $where .= get_sql_filter_min_severity($vars['min_severity'], 'alert_rules'); } if (is_numeric($vars['group'])) { $where .= ' AND devices.device_id IN (SELECT `device_id` FROM `device_group_device` WHERE `device_group_id` = ?)'; $param[] = $vars['group']; } if (! $show_recovered) { $where .= ' AND `alerts`.`state`!=' . $alert_states['recovered']; } if (isset($searchPhrase) && ! empty($searchPhrase)) { $where .= ' AND (`alerts`.`timestamp` LIKE ? OR `rule` LIKE ? OR `name` LIKE ? OR `hostname` LIKE ? OR `sysName` LIKE ?)'; $param[] = "%$searchPhrase%"; $param[] = "%$searchPhrase%"; $param[] = "%$searchPhrase%"; $param[] = "%$searchPhrase%"; $param[] = "%$searchPhrase%"; } $sql = ' FROM `alerts` LEFT JOIN `devices` ON `alerts`.`device_id`=`devices`.`device_id`'; if (! Auth::user()->hasGlobalRead()) { $device_ids = Permissions::devicesForUser()->toArray() ?: [0]; $where .= ' AND `devices`.`device_id` IN ' . dbGenPlaceholders(count($device_ids)); $param = array_merge($param, $device_ids); } $sql .= ' LEFT JOIN `locations` ON `devices`.`location_id` = `locations`.`id`'; $sql .= " RIGHT JOIN `alert_rules` ON `alerts`.`rule_id`=`alert_rules`.`id` WHERE $where"; $count_sql = "SELECT COUNT(`alerts`.`id`) $sql"; $total = dbFetchCell($count_sql, $param); if (empty($total)) { $total = 0; } if (! isset($vars['sort']) || empty($vars['sort'])) { $sort = 'timestamp DESC'; } else { $sort = '`alert_rules`.`severity` DESC, timestamp DESC'; } $sql .= " ORDER BY $sort"; if (isset($current)) { $limit_low = (($current * $rowCount) - ($rowCount)); $limit_high = $rowCount; } if ($rowCount != -1) { $sql .= " LIMIT $limit_low,$limit_high"; } $sql = "SELECT `alerts`.*, `devices`.`hostname`, `devices`.`sysName`, `devices`.`os`, `devices`.`hardware`, `locations`.`location`, `alert_rules`.`rule`, `alert_rules`.`name`, `alert_rules`.`severity` $sql"; $rulei = 0; $format = $vars['format']; foreach (dbFetchRows($sql, $param) as $alert) { $log = dbFetchCell('SELECT details FROM alert_log WHERE rule_id = ? AND device_id = ? ORDER BY id DESC LIMIT 1', [$alert['rule_id'], $alert['device_id']]); $alert_log_id = dbFetchCell('SELECT id FROM alert_log WHERE rule_id = ? AND device_id = ? ORDER BY id DESC LIMIT 1', [$alert['rule_id'], $alert['device_id']]); [$fault_detail, $max_row_length] = alert_details($log); $info = json_decode($alert['info'], true); $alert_to_ack = ''; $alert_to_nack = ''; $alert_to_unack = ''; $ack_ico = $alert_to_ack; if ((int) $alert['state'] === 0) { $msg = ''; } elseif ((int) $alert['state'] === 1 || (int) $alert['state'] === 3 || (int) $alert['state'] === 4) { if ((int) $alert['state'] === 3) { $msg = ''; } elseif ((int) $alert['state'] === 4) { $msg = ''; } } elseif ((int) $alert['state'] === 2) { if ($info['until_clear'] === false) { $ack_ico = $alert_to_unack; } else { $ack_ico = $alert_to_nack; } } $hostname = '