Observium_CE/html/pages/device/alert.inc.php

273 lines
10 KiB
PHP

<?php
/**
* Observium
*
* This file is part of Observium.
*
* @package observium
* @subpackage web
* @copyright (C) Adam Armstrong
*
*/
// User level 7-9 only can see config
$readonly = $_SESSION['userlevel'] < 8;
if ($entry = get_alert_entry_by_id($vars['alert_entry'])) {
if ($entry['device_id'] != $device['device_id']) {
print_error("This alert entry id does not match this device.");
return;
}
// Run actions
if ($vars['submit'] === 'update-alert-entry' && !$readonly) {
if (isset($vars['ignore_until_ok']) && ($vars['ignore_until_ok'] == '1' || $entry['ignore_until_ok'] == '1')) {
$update_state['ignore_until_ok'] = '1';
if ($entry['alert_status'] == 0) {
$update_state['alert_status'] = '3';
}
} else {
$update_state['ignore_until_ok'] = '0';
}
// 2019-12-05 23:30:00
if (isset($vars['ignore_until']) && $vars['ignore_until_enable']) {
$vars['ignore_unixtime'] = strtotime($vars['ignore_until']);
$update_state['ignore_until'] = $vars['ignore_until'];
if ($entry['alert_status'] == 0 && $vars['ignore_unixtime'] > time()) {
$update_state['alert_status'] = '3';
}
} else {
$update_state['ignore_until'] = ['NULL'];
}
if (is_array($update_state)) {
$up_s = dbUpdate($update_state, 'alert_table', '`alert_table_id` = ?', [$vars['alert_entry']]);
}
// Refresh array because we've changed the database.
$entry = get_alert_entry_by_id($vars['alert_entry']);
}
// End actions
humanize_alert_entry($entry);
$alert_rules = cache_alert_rules();
$alert = $alert_rules[$entry['alert_test_id']];
$state = safe_json_decode($entry['state']);
$conditions = safe_json_decode($alert['conditions']);
$entity = get_entity_by_id_cache($entry['entity_type'], $entry['entity_id']);
// r($entry);
// r($alert);
?>
<div class="row">
<div class="col-md-3">
<div class="box box-solid">
<div class="box-header with-border">
<h3 class="box-title">Alert Details</h3>
</div>
<div class="box-body no-padding">
<table class="table table-condensed table-striped ">
<tbody>
<tr>
<th>Type</th>
<td><?php echo get_icon($config['entities'][$alert['entity_type']]['icon']) . nicecase($entry['entity_type']); ?></td>
</tr>
<tr>
<th>Entity</th>
<td><?php echo generate_entity_link($entry['entity_type'], $entry['entity_id'], $entity['entity_name']); ?></td>
</tr>
<tr>
<th>Checker</th>
<td><a
href="<?php echo generate_url(['page' => 'alert_check', 'alert_test_id' => $alert['alert_test_id']]); ?>"><?php echo escape_html($alert['alert_name']); ?></a>
</td>
</tr>
<tr>
<th>Fail Msg</th>
<td><?php echo escape_html($alert['alert_message']); ?></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="col-md-4">
<div class="box box-solid">
<div class="box-header with-border">
<h3 class="box-title">Status</h3>
</div>
<div class="box-body no-padding">
<table class="table table-condensed">
<tr>
<th>Status</th>
<td><span class="<?php echo $entry['class']; ?>"><?php echo $entry['last_message']; ?></span></td>
</tr>
<tr>
<th>Last Changed</th>
<td><?php echo $entry['changed']; ?></td>
</tr>
<tr>
<td colspan=2>
<?php
$state = safe_json_decode($entry['state']);
$alert['state_popup'] = '';
// FIXME - rewrite this, it's shit
if ($alert['alert_status'] != '1' && safe_count($state['failed'])) {
$alert['state_popup'] .= '<table class="table table-striped table-condensed">';
$alert['state_popup'] .= '<thead><tr><th>Metric</th><th>Cond</th><th>Value</th><th>Measured</th></tr></thead>';
foreach ($state['failed'] as $test) {
$metric_def = $config['entities'][$alert['entity_type']]['metrics'][$test['metric']];
$format = NULL;
$symbol = '';
if (!safe_empty($test['value'])) {
if (isset($metric_def['format'])) {
$format = isset($entity[$metric_def['format']]) ? $entity[$metric_def['format']] : $metric_def['format'];
}
if (isset($metric_def['symbol'])) {
$symbol = isset($entity[$metric_def['symbol']]) ? $entity[$metric_def['symbol']] : $metric_def['symbol'];
}
}
$alert['state_popup'] .= '<tr><td><strong>' . $test['metric'] . '</strong></td><td>' . $test['condition'] . '</td><td>' .
format_value($test['value'], $entity['entity_format']) . $entity['entity_symbol'] . '</td><td><i class="red">' .
format_value($state['metrics'][$test['metric']], $entity['entity_format']) . $entity['entity_symbol'] . '</i></td></tr>';
}
$alert['state_popup'] .= '</table>';
} elseif (safe_count($state['metrics'])) {
$alert['state_popup'] .= '<table class="table table-striped table-condensed">';
$alert['state_popup'] .= '<thead><tr><th>Metric</th><th>Value</th></tr></thead>';
foreach ($state['metrics'] as $metric => $value) {
$alert['state_popup'] .= '<tr><td><strong>' . $metric . '</strong></td><td>' . format_value($value, $entity['entity_format']) . $entity['entity_symbol'] . '</td></tr>';
}
$alert['state_popup'] .= '</table>';
}
echo $alert['state_popup'];
?>
</td>
</tr>
<!-- <tr><th>Last Checked</th><td><?php echo $entry['checked']; ?></td></tr>
<tr><th>Last Changed</th><td><?php echo $entry['changed']; ?></td></tr>
<tr><th>Last Alerted</th><td><?php echo $entry['alerted']; ?></td></tr>
<tr><th>Last Recovered</th><td><?php echo $entry['recovered']; ?></td></tr> -->
</table>
</div>
</div>
</div>
<div class="col-md-5">
<?php
$form = [
'type' => 'horizontal',
'id' => 'update_alert_entry',
'title' => 'Alert Settings',
//'icon' => 'oicon-gear',
'fieldset' => ['edit' => ''],
];
$form['row'][0]['editing'] = [
'type' => 'hidden',
'value' => 'yes'
];
$form['row'][1]['ignore_until'] = [
'type' => 'datetime',
//'fieldset' => 'edit',
'name' => 'Ignore Until',
'placeholder' => '',
//'width' => '250px',
'readonly' => $readonly,
'disabled' => empty($entry['ignore_until']),
'min' => 'current',
'value' => $entry['ignore_until'] ?: ''
];
$form['row'][1]['ignore_until_enable'] = [
'type' => 'toggle',
'view' => 'toggle',
'size' => 'big',
'palette' => 'blue',
'readonly' => $readonly,
'onchange' => "toggleAttrib('disabled', 'ignore_until')",
'value' => !empty($entry['ignore_until'])
];
$form['row'][2]['ignore_until_ok'] = [
'type' => 'toggle',
'name' => 'Ignore Until OK',
//'fieldset' => 'edit',
'view' => 'toggle',
'size' => 'big',
'palette' => 'blue',
'readonly' => $readonly,
'value' => $entry['ignore_until_ok']
];
if (!$readonly) { // Hide button for readonly
$form['row'][7]['submit'] = [
'type' => 'submit',
'name' => 'Save Changes',
'icon' => 'icon-ok icon-white',
'div_style' => 'padding-top: 10px; padding-bottom: 10px;',
'right' => TRUE,
'class' => 'btn-primary',
'readonly' => $readonly,
'value' => 'update-alert-entry'
];
}
print_form($form);
unset($form);
?>
</div>
<div class="col-md-12">
<?php echo generate_box_open(['title' => 'Historical Availability']); ?>
<table class="table table-condensed table-striped">
<tr>
<td>
<?php
$graph_array['id'] = $entry['alert_table_id'];
$graph_array['type'] = 'alert_status';
print_graph_row($graph_array);
?>
</td>
</tr>
</table>
<?php
echo generate_box_close();
echo("</div></div>"); // end row
$vars['entity_type'] = $entry['entity_type'];
$vars['entity_id'] = $entry['entity_id'];
print_alert_log($vars);
} else {
print_error("Unfortunately, this alert entry id does not seem to exist in the database!");
}
// EOF