2014-11-30 17:49:52 +00:00
< div class = " row " >
< div class = " col-sm-12 " >
< span id = " message " ></ span >
</ div >
</ div >
< ? php
require_once ( 'includes/modal/new_alert_rule.inc.php' );
?>
< form method = " post " action = " " id = " result_form " >
< ? php
if ( isset ( $_POST [ 'results_amount' ]) && $_POST [ 'results_amount' ] > 0 ) {
$results = $_POST [ 'results' ];
} else {
$results = 50 ;
}
echo ' < div class = " table-responsive " >
< table class = " table table-hover table-condensed " width = " 100% " >
< tr >
< th > #</th>
< th > Rule </ th >
< th > Hostname </ th >
< th > Timestamp </ th >
< th > Severity </ th >
< th > Acknowledge </ th >
</ tr > ' ;
2014-12-22 20:31:52 +00:00
echo ( '<td colspan="5">' );
2015-02-16 23:45:28 +00:00
if ( $_SESSION [ 'userlevel' ] >= '10' ) {
2014-11-30 17:49:52 +00:00
echo ( '<button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#create-alert" data-device_id="' . $device [ 'device_id' ] . '">Create new alert rule</button>' );
}
echo ( ' </ td >
< td >< select name = " results " id = " results " class = " form-control input-sm " onChange = " updateResults(this); " > ' );
$result_options = array ( '10' , '50' , '100' , '250' , '500' , '1000' , '5000' );
foreach ( $result_options as $option ) {
echo " <option value=' $option ' " ;
if ( $results == $option ) {
echo " selected " ;
}
echo " > $option </option> " ;
}
echo ( '</select></td>' );
$rulei = 1 ;
$count_query = " SELECT COUNT(alerts.id) " ;
$full_query = " SELECT alerts.*, devices.hostname " ;
2014-12-16 20:49:55 +00:00
$sql = '' ;
$param = array ();
2014-11-30 17:49:52 +00:00
if ( isset ( $device [ 'device_id' ]) && $device [ 'device_id' ] > 0 ) {
$sql = 'AND `alerts`.`device_id`=?' ;
$param = array ( $device [ 'device_id' ]);
}
2015-01-26 22:07:42 +00:00
$query = " FROM `alerts` LEFT JOIN `devices` ON `alerts`.`device_id`=`devices`.`device_id` RIGHT JOIN alert_rules ON alerts.rule_id=alert_rules.id WHERE `state` IN (1,2,3,4) $sql ORDER BY `alerts`.`timestamp` DESC " ;
2014-11-30 17:49:52 +00:00
$count_query = $count_query . $query ;
$count = dbFetchCell ( $count_query , $param );
if ( ! isset ( $_POST [ 'page_number' ]) && $_POST [ 'page_number' ] < 1 ) {
$page_number = 1 ;
} else {
$page_number = $_POST [ 'page_number' ];
}
$start = ( $page_number - 1 ) * $results ;
$full_query = $full_query . $query . " LIMIT $start , $results " ;
foreach ( dbFetchRows ( $full_query , $param ) as $alert ) {
$rule = dbFetchRow ( " SELECT * FROM alert_rules WHERE id = ? LIMIT 1 " , array ( $alert [ 'rule_id' ]));
2015-02-26 12:08:42 +00:00
$log = dbFetchCell ( " SELECT details FROM alert_log WHERE rule_id = ? AND device_id = ? ORDER BY id DESC LIMIT 1 " , array ( $alert [ 'rule_id' ], $alert [ 'device_id' ]));
$log_detail = json_decode ( gzuncompress ( $log ), true );
foreach ( $log_detail [ 'rule' ][ 0 ] as $k => $v ) {
if ( ! empty ( $v ) && $k != 'device_id' && ( stristr ( $k , 'id' ) || stristr ( $k , 'desc' )) && substr_count ( $k , '_' ) <= 1 ) {
$fault_detail .= $k . ' => ' . $v . " ; " ;
}
}
2014-11-30 17:49:52 +00:00
$ico = " ok " ;
$col = " green " ;
$extra = " " ;
if ( ( int ) $alert [ 'state' ] === 0 ) {
$ico = " ok " ;
$col = " green " ;
} elseif ( ( int ) $alert [ 'state' ] === 1 ) {
2014-12-22 20:31:52 +00:00
$ico = " volume-up " ;
2014-11-30 17:49:52 +00:00
$col = " red " ;
$extra = " danger " ;
} elseif ( ( int ) $alert [ 'state' ] === 2 ) {
2014-12-22 20:31:52 +00:00
$ico = " volume-off " ;
2014-11-30 17:49:52 +00:00
$col = " #800080 " ;
$extra = " warning " ;
}
$alert_checked = '' ;
$orig_ico = $ico ;
$orig_col = $col ;
$orig_class = $extra ;
echo " <tr class=' " . $extra . " ' id='row_ " . $alert [ 'id' ] . " '> " ;
echo " <td><i># " . (( int ) $rulei ++ ) . " </i></td> " ;
2015-02-19 17:50:41 +01:00
echo " <td><i title= \" " . htmlentities ( $rule [ 'rule' ]) . " \" > " . htmlentities ( $rule [ 'name' ]) . " </i></td> " ;
2015-02-26 12:08:42 +00:00
echo " <td><a href= \" device/device= " . $alert [ 'device_id' ] . " \" ><i title=' " . htmlentities ( $fault_detail ) . " '> " . $alert [ 'hostname' ] . " </i></a></td> " ;
2014-11-30 17:49:52 +00:00
echo " <td> " . ( $alert [ 'timestamp' ] ? $alert [ 'timestamp' ] : " N/A " ) . " </td> " ;
2015-01-26 22:07:42 +00:00
echo " <td> " . $rule [ 'severity' ];
if ( $alert [ 'state' ] == 3 ) {
echo " <strong>+</strong> " ;
} elseif ( $alert [ 'state' ] == 4 ) {
echo " <strong>-</strong> " ;
}
echo " </td> " ;
2014-11-30 17:49:52 +00:00
echo " <td> " ;
2015-02-16 23:45:28 +00:00
if ( $_SESSION [ 'userlevel' ] >= '10' ) {
2014-12-22 20:31:52 +00:00
$ack_ico = 'volume-up' ;
$ack_col = 'success' ;
2015-01-26 22:07:42 +00:00
if ( in_array ( $alert [ 'state' ], array ( 2 , 3 , 4 ))) {
2014-12-22 20:31:52 +00:00
$ack_ico = 'volume-off' ;
$ack_col = 'danger' ;
}
echo " <button type='button' class='btn btn- " . $ack_col . " btn-sm' data-target='#ack-alert' data-state=' " . $alert [ 'state' ] . " ' data-alert_id=' " . $alert [ 'id' ] . " ' name='ack-alert' id='ack-alert'><span class='glyphicon glyphicon- " . $ack_ico . " ' aria-hidden='true'></span></button> " ;
2014-11-30 17:49:52 +00:00
}
echo " </td> " ;
echo " </tr> \r \n " ;
}
if ( $count % $results > 0 ) {
echo ( ' < tr >
2014-12-22 20:31:52 +00:00
< td colspan = " 6 " align = " center " > '. generate_pagination($count,$results,$page_number) .' </ td >
2014-11-30 17:49:52 +00:00
</ tr > ' );
}
echo ' </ table >
< input type = " hidden " name = " page_number " id = " page_number " value = " '. $page_number .' " >
< input type = " hidden " name = " results_amount " id = " results_amount " value = " '. $results .' " >
</ form >
</ div > ' ;
?>
< script >
2014-12-22 20:31:52 +00:00
$ ( " [name='ack-alert'] " ) . click ( '' , function ( e ) {
2015-02-25 20:38:38 +00:00
e . preventDefault ();
2014-11-30 17:49:52 +00:00
var alert_id = $ ( this ) . data ( " alert_id " );
2014-12-22 20:31:52 +00:00
var state = $ ( this ) . data ( " state " );
2014-11-30 17:49:52 +00:00
$ . ajax ({
type : " POST " ,
url : " /ajax_form.php " ,
2014-12-22 20:31:52 +00:00
data : { type : " ack-alert " , alert_id : alert_id , state : state },
2014-11-30 17:49:52 +00:00
success : function ( msg ){
$ ( " #message " ) . html ( '<div class="alert alert-info">' + msg + '</div>' );
if ( msg . indexOf ( " ERROR: " ) <= - 1 ) {
location . reload ();
}
},
error : function (){
$ ( " #message " ) . html ( '<div class="alert alert-info">An error occurred acking this alert.</div>' );
}
});
});
function updateResults ( results ) {
$ ( '#results_amount' ) . val ( results . value );
$ ( '#page_number' ) . val ( 1 );
$ ( '#result_form' ) . submit ();
}
function changePage ( page , e ) {
e . preventDefault ();
$ ( '#page_number' ) . val ( page );
$ ( '#result_form' ) . submit ();
}
</ script >