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
2018-03-25 22:50:09 +02:00
* @ copyright 2018 LibreNMS
2017-12-24 21:55:24 +02:00
* @ author LibreNMS Contributors
*/
2015-04-01 00:21:56 +01:00
2020-01-23 12:27:57 +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
2018-03-25 22:50:09 +02:00
if ( is_numeric ( $vars [ 'device_id' ])) {
2017-12-24 21:55:24 +02:00
$where .= ' AND E.device_id = ?' ;
2018-03-25 22:50:09 +02:00
$param [] = $vars [ 'device_id' ];
2015-04-01 00:21:56 +01:00
}
2018-03-25 22:50:09 +02:00
if ( $vars [ 'state' ] >= 0 ) {
2016-05-02 19:40:12 +00:00
$where .= ' AND `E`.`state` = ?' ;
2021-03-28 17:25:30 -05:00
$param [] = $vars [ 'state' ];
2016-05-02 19:40:12 +00:00
}
2019-12-16 23:58:54 +01:00
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' ])) {
2021-10-19 06:18:29 +03:00
$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 );
2015-04-12 11:47:21 +01:00
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 " ;
}
2020-07-18 00:26:17 +02:00
$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' ]);
2017-03-11 23:21:30 +00:00
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' ]]);
2021-03-06 20:57:06 +00:00
$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 );
2021-03-06 20:57:06 +00:00
2017-03-11 23:21:30 +00:00
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 );