Files

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

135 lines
5.1 KiB
PHP
Raw Permalink Normal View History

2015-04-01 00:21:56 +01:00
<?php
2017-12-24 21:55:24 +02:00
/*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version. Please see LICENSE.txt at the top level of
* the source code distribution for details.
*
* @package LibreNMS
* @subpackage graphs
2021-02-09 00:29:04 +01:00
* @link https://www.librenms.org
* @copyright 2018 LibreNMS
2017-12-24 21:55:24 +02:00
* @author LibreNMS Contributors
*/
2015-04-01 00:21:56 +01:00
$alert_severities = [
// alert_rules.status is enum('ok','warning','critical')
'ok' => 1,
'warning' => 2,
'critical' => 3,
'ok only' => 4,
'warning only' => 5,
'critical only' => 6,
];
2015-04-01 00:21:56 +01:00
$where = 1;
2020-01-02 17:07:45 +01:00
$param = [];
2015-04-01 00:21:56 +01:00
if (is_numeric($vars['device_id'])) {
2017-12-24 21:55:24 +02:00
$where .= ' AND E.device_id = ?';
$param[] = $vars['device_id'];
2015-04-01 00:21:56 +01:00
}
if ($vars['state'] >= 0) {
$where .= ' AND `E`.`state` = ?';
2021-03-28 17:25:30 -05:00
$param[] = $vars['state'];
}
if (isset($vars['min_severity'])) {
$where .= get_sql_filter_min_severity($vars['min_severity'], 'R');
}
2022-08-30 12:55:37 -05:00
if (isset($vars['device_group']) && is_numeric($vars['device_group'])) {
$where .= ' AND D.device_id IN (SELECT `device_id` FROM `device_group_device` WHERE `device_group_id` = ?)';
$param[] = $vars['device_group'];
}
2019-12-30 12:11:26 +01:00
if (! Auth::user()->hasGlobalRead()) {
$device_ids = Permissions::devicesForUser()->toArray() ?: [0];
2020-01-02 17:07:45 +01:00
$where .= ' AND `E`.`device_id` IN ' . dbGenPlaceholders(count($device_ids));
2019-12-30 12:11:26 +01:00
$param = array_merge($param, $device_ids);
2015-04-01 00:21:56 +01:00
}
if (isset($searchPhrase) && ! empty($searchPhrase)) {
2020-01-02 17:07:45 +01:00
$where .= ' AND (`D`.`hostname` LIKE ? OR `D`.`sysName` LIKE ? OR `E`.`time_logged` LIKE ? OR `name` LIKE ?)';
$param[] = "%$searchPhrase%";
$param[] = "%$searchPhrase%";
$param[] = "%$searchPhrase%";
$param[] = "%$searchPhrase%";
2015-04-01 00:21:56 +01:00
}
2020-01-02 17:07:45 +01:00
$sql = " FROM `alert_log` AS E LEFT JOIN devices AS D ON E.device_id=D.device_id RIGHT JOIN alert_rules AS R ON E.rule_id=R.id WHERE $where";
2015-04-01 00:21:56 +01:00
$count_sql = "SELECT COUNT(`E`.`id`) $sql";
2017-12-24 21:55:24 +02:00
$total = dbFetchCell($count_sql, $param);
if (empty($total)) {
$total = 0;
}
2015-04-01 00:21:56 +01:00
if (! isset($sort) || empty($sort)) {
$sort = 'time_logged DESC';
}
$sql .= " ORDER BY $sort";
if (isset($current)) {
2023-03-13 22:32:22 +01:00
$limit_low = (($current * $rowCount) - $rowCount);
2015-04-01 00:21:56 +01:00
$limit_high = $rowCount;
}
if ($rowCount != -1) {
$sql .= " LIMIT $limit_low,$limit_high";
}
2023-05-23 19:23:15 +02:00
if (session('preferences.timezone')) {
$sql = "SELECT R.severity, D.device_id,name AS alert,rule_id,state,time_logged,DATE_FORMAT(IFNULL(CONVERT_TZ(time_logged, @@global.time_zone, ?),time_logged), '" . \LibreNMS\Config::get('dateformat.mysql.compact') . "') as humandate,details $sql";
2023-05-23 19:23:15 +02:00
$param = array_merge([session('preferences.timezone')], $param);
} else {
$sql = "SELECT R.severity, D.device_id,name AS alert,rule_id,state,time_logged,DATE_FORMAT(time_logged, '" . \LibreNMS\Config::get('dateformat.mysql.compact') . "') as humandate,details $sql";
}
2015-04-01 00:21:56 +01:00
2015-05-17 11:44:33 +00:00
$rulei = 0;
2015-04-01 00:21:56 +01:00
foreach (dbFetchRows($sql, $param) as $alertlog) {
2017-12-24 21:55:24 +02:00
$dev = device_by_id_cache($alertlog['device_id']);
logfile($alertlog['rule_id']);
2017-12-24 21:55:24 +02:00
$log = dbFetchCell('SELECT details FROM alert_log WHERE rule_id = ? AND device_id = ? AND `state` = 1 ORDER BY id DESC LIMIT 1', [$alertlog['rule_id'], $alertlog['device_id']]);
$alert_log_id = dbFetchCell('SELECT id FROM alert_log WHERE rule_id = ? AND device_id = ? ORDER BY id DESC LIMIT 1', [$alertlog['rule_id'], $alertlog['device_id']]);
2021-10-05 21:35:51 +02:00
[$fault_detail, $max_row_length] = alert_details($log);
if (empty($fault_detail)) {
$fault_detail = 'Rule created, no faults found';
}
2017-12-24 21:55:24 +02:00
$alert_state = $alertlog['state'];
2015-04-01 00:21:56 +01:00
if ($alert_state == '0') {
2017-12-24 21:55:24 +02:00
$status = 'label-success';
2016-08-18 20:28:22 -05:00
} elseif ($alert_state == '1') {
2017-12-24 21:55:24 +02:00
$status = 'label-danger';
2016-08-18 20:28:22 -05:00
} elseif ($alert_state == '2') {
2017-12-24 21:55:24 +02:00
$status = 'label-info';
2016-08-18 20:28:22 -05:00
} elseif ($alert_state == '3') {
2017-12-24 21:55:24 +02:00
$status = 'label-warning';
2016-08-18 20:28:22 -05:00
} elseif ($alert_state == '4') {
2017-12-24 21:55:24 +02:00
$status = 'label-primary';
2015-04-01 00:21:56 +01:00
}//end if
2017-12-24 21:55:24 +02:00
2015-05-17 11:44:33 +00:00
$response[] = [
2017-12-24 21:55:24 +02:00
'id' => $rulei++,
2015-05-17 11:44:33 +00:00
'time_logged' => $alertlog['humandate'],
2023-03-13 22:32:22 +01:00
'details' => '<a class="fa fa-plus incident-toggle" style="display:none" data-toggle="collapse" data-target="#incident' . $rulei . '" data-parent="#alerts"></a>',
2022-11-04 23:13:36 -05:00
'verbose_details' => "<button type='button' class='btn btn-alert-details command-alert-details' style='display:none' aria-label='Details' id='alert-details' data-alert_log_id='{$alert_log_id}'><i class='fa-solid fa-circle-info'></i></button>",
2023-03-13 22:32:22 +01:00
'hostname' => '<div class="incident">' . generate_device_link($dev) . '<div id="incident' . $rulei . '" class="collapse">' . $fault_detail . '</div></div>',
2017-12-24 21:55:24 +02:00
'alert' => htmlspecialchars($alertlog['alert']),
2020-07-18 00:26:17 +02:00
'status' => "<i class='alert-status " . $status . "' title='" . ($alert_state ? 'active' : 'recovered') . "'></i>",
'severity' => $alertlog['severity'],
2015-04-01 00:21:56 +01:00
];
}//end foreach
$output = [
2017-12-24 21:55:24 +02:00
'current' => $current,
2015-04-01 00:21:56 +01:00
'rowCount' => $rowCount,
2017-12-24 21:55:24 +02:00
'rows' => $response,
'total' => $total,
2015-04-01 00:21:56 +01:00
];
2021-03-04 07:55:41 -06:00
echo json_encode($output, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);