#9292 fixed issues 3

This commit is contained in:
Daniel Maya 2022-12-20 10:03:45 +01:00
parent 091dda3eea
commit 23407892b9
2 changed files with 292 additions and 30 deletions

View File

@ -64,14 +64,79 @@ class SnmpConsole extends HTML
*/
private $ajaxController;
/**
* Filter alert.
*
* @var integer
*/
private $filter_alert;
/**
* Filter severity.
*
* @var integer
*/
private $filter_severity;
/**
* Filter search.
*
* @var string
*/
private $filter_free_search;
/**
* Filter status.
*
* @var integer
*/
private $filter_status;
/**
* Filter group by.
*
* @var integer
*/
private $filter_group_by;
/**
* Filter hours.
*
* @var integer
*/
private $filter_hours_ago;
/**
* Filter trap type.
*
* @var integer
*/
private $filter_trap_type;
/**
* Refresh.
*
* @var integer
*/
private $refr;
/**
* Class constructor
*
* @param string $ajaxController Ajax controller.
*/
public function __construct(string $ajaxController)
{
public function __construct(
string $ajaxController,
int $filter_alert,
int $filter_severity,
string $filter_free_search,
int $filter_status,
int $filter_group_by,
int $filter_hours_ago,
int $filter_trap_type,
int $refr
) {
global $config;
check_login();
@ -89,6 +154,14 @@ class SnmpConsole extends HTML
// Set the ajax controller.
$this->ajaxController = $ajaxController;
$this->filter_alert = $filter_alert;
$this->filter_severity = $filter_severity;
$this->filter_free_search = $filter_free_search;
$this->filter_status = $filter_status;
$this->filter_group_by = $filter_group_by;
$this->filter_hours_ago = $filter_hours_ago;
$this->filter_trap_type = $filter_trap_type;
$this->refr = $refr;
}
@ -106,6 +179,8 @@ class SnmpConsole extends HTML
ui_require_css_file('wizard');
ui_require_css_file('discovery');
$default_refr = 300;
if (!isset($config['pure']) || $config['pure'] === false) {
$statistics['text'] = '<a href="index.php?sec=estado&sec2=operation/snmpconsole/snmp_statistics&pure='.$config['pure'].'">'.html_print_image(
'images/op_reporting.png',
@ -115,7 +190,7 @@ class SnmpConsole extends HTML
'class' => 'invert_filter',
]
).'</a>';
$list['text'] = '<a href="'.$this->ajaxController.'&pure='.$config['pure'].'">'.html_print_image(
$list['text'] = '<a href="index.php?sec=snmpconsole&sec2=operation/snmpconsole/snmp_view&pure=0">'.html_print_image(
'images/op_snmp.png',
true,
[
@ -125,7 +200,7 @@ class SnmpConsole extends HTML
).'</a>';
$list['active'] = true;
$screen['text'] = '<a href="index.php?sec=snmpconsole&sec2=operation/snmpconsole/snmp_view&pure=1">'.html_print_image(
$screen['text'] = '<a href="#" onClick="javascript:fullscreen(1)">'.html_print_image(
'images/full_screen.png',
true,
[
@ -158,17 +233,14 @@ class SnmpConsole extends HTML
]
);
} else {
echo '<div id="dashboard-controls">';
echo '<div id="dashboard-controls">';
echo '<div id="menu_tab">';
echo '<ul class="mn">';
// Normal view button.
echo '<li class="nomn">';
$normal_url = 'index.php?sec=snmpconsole&sec2=operation/snmpconsole/snmp_view&filter_severity='.$filter_severity.'&filter_fired='.$filter_fired.'&filter_status='.$filter_status.'&refresh='.((int) get_parameter('refresh', 0)).'&pure=0&trap_type='.$trap_type.'&group_by='.$group_by.'&free_search_string='.$free_search_string.'&date_from_trap='.$date_from_trap.'&date_to_trap='.$date_to_trap.'&time_from_trap='.$time_from_trap.'&time_to_trap='.$time_to_trap;
$urlPagination = $normal_url.'&pagination='.$pagination.'&offset='.$offset;
echo '<a href="'.$urlPagination.'">';
echo '<a href="#" onClick="javascript:fullscreen(0)">';
echo html_print_image(
'images/normal_screen.png',
true,
@ -188,14 +260,14 @@ class SnmpConsole extends HTML
echo '<form id="refr-form" method="get" action="'.$normal_url.'" >';
echo __('Refresh every').':';
echo html_print_select(get_refresh_time_array(), 'refresh', $refr, '', '', 0, true, false, false);
echo html_print_select(get_refresh_time_array(), 'refresh', $this->refr, '', '', 0, true, false, false);
echo '</form>';
echo '</li>';
html_print_input_hidden('sec', 'snmpconsole');
html_print_input_hidden('sec2', 'operation/snmpconsole/snmp_view');
html_print_input_hidden('pure', 1);
html_print_input_hidden('refresh', ($refr > 0 ? $refr : $default_refr));
html_print_input_hidden('refresh', (($this->refr > 0) ? $this->refr : $default_refr));
// Dashboard name.
echo '<li class="nomn">';
@ -348,7 +420,7 @@ class SnmpConsole extends HTML
'class' => 'w200px',
'fields' => $show_alerts,
'return' => true,
'selected' => -1,
'selected' => $this->filter_alert,
],
[
'label' => __('Severity'),
@ -358,7 +430,7 @@ class SnmpConsole extends HTML
'class' => 'w200px',
'fields' => $severities,
'return' => true,
'selected' => -1,
'selected' => $this->filter_severity,
],
[
'label' => __('Free search'),
@ -366,6 +438,7 @@ class SnmpConsole extends HTML
'class' => 'w400px',
'id' => 'filter_free_search',
'name' => 'filter_free_search',
'value' => $this->filter_free_search,
],
[
'label' => __('Status'),
@ -375,13 +448,13 @@ class SnmpConsole extends HTML
'class' => 'w200px',
'fields' => $status_array,
'return' => true,
'selected' => 0,
'selected' => $this->filter_status,
],
[
'label' => __('Group by Enterprise String/IP'),
'type' => 'select',
'name' => 'filter_group_by',
'selected' => 0,
'selected' => $this->filter_group_by,
'disabled' => false,
'return' => true,
'id' => 'filter_group_by',
@ -396,7 +469,7 @@ class SnmpConsole extends HTML
'class' => 'w200px',
'id' => 'filter_hours_ago',
'name' => 'filter_hours_ago',
'value' => '8',
'value' => $this->filter_hours_ago,
],
[
'label' => __('Trap type'),
@ -406,7 +479,7 @@ class SnmpConsole extends HTML
'class' => 'w200px',
'fields' => $trap_types,
'return' => true,
'selected' => -1,
'selected' => $this->filter_trap_type,
],
],
],
@ -1038,26 +1111,136 @@ class SnmpConsole extends HTML
$id_trap = get_parameter('id', 0);
$group_by = get_parameter('group_by', 0);
$alert = get_parameter('alert', -1);
$severity = get_parameter('severity', -1);
$search = get_parameter('search', '');
$status = get_parameter('status', 0);
$hours_ago = get_parameter('hours_ago', 8);
$trap_type = get_parameter('trap_type', -1);
$trap = db_get_row('ttrap', 'id_trap', $id_trap);
if ($group_by) {
$sql = "SELECT * FROM ttrap WHERE 1=1
AND oid='".$trap['oid']."'
AND source='".$trap['source']."'";
$now = new DateTime();
$ago = new DateTime();
$interval = new DateInterval(sprintf('PT%dH', $hours_ago));
$ago->sub($interval);
$date_from_trap = $ago->format('Y/m/d');
$date_to_trap = $now->format('Y/m/d');
$time_from_trap = $ago->format('H:i:s');
$time_to_trap = $now->format('H:i:s');
$whereSubquery = '';
if ($alert != -1) {
$whereSubquery .= ' AND alerted = '.$$alert;
}
if ($severity != -1) {
// There are two special severity values aimed to match two different trap standard severities
// in database: warning/critical and critical/normal.
if ($severity != EVENT_CRIT_OR_NORMAL
&& $severity != EVENT_CRIT_WARNING_OR_CRITICAL
) {
// Test if enterprise is installed to search oid in text or oid field in ttrap.
if ($config['enterprise_installed']) {
$whereSubquery .= ' AND (
(alerted = 0 AND severity = '.$severity.') OR
(alerted = 1 AND priority = '.$severity.'))';
} else {
$whereSubquery .= ' AND (
(alerted = 0 AND 1 = '.$severity.') OR
(alerted = 1 AND priority = '.$severity.'))';
}
} else if ($severity === EVENT_CRIT_WARNING_OR_CRITICAL) {
// Test if enterprise is installed to search oid in text or oid field in ttrap.
if ($config['enterprise_installed']) {
$whereSubquery .= ' AND (
(alerted = 0 AND (severity = '.EVENT_CRIT_WARNING.' OR severity = '.EVENT_CRIT_CRITICAL.')) OR
(alerted = 1 AND (priority = '.EVENT_CRIT_WARNING.' OR priority = '.EVENT_CRIT_CRITICAL.')))';
} else {
$whereSubquery .= ' AND (
(alerted = 1 AND (priority = '.EVENT_CRIT_WARNING.' OR priority = '.EVENT_CRIT_CRITICAL.')))';
}
} else if ($severity === EVENT_CRIT_OR_NORMAL) {
// Test if enterprise is installed to search oid in text or oid field in ttrap.
if ($config['enterprise_installed']) {
$whereSubquery .= ' AND (
(alerted = 0 AND (severity = '.EVENT_CRIT_NORMAL.' OR severity = '.EVENT_CRIT_CRITICAL.')) OR
(alerted = 1 AND (priority = '.EVENT_CRIT_NORMAL.' OR priority = '.EVENT_CRIT_CRITICAL.')))';
} else {
$whereSubquery .= ' AND (
(alerted = 1 AND (priority = '.EVENT_CRIT_NORMAL.' OR priority = '.EVENT_CRIT_CRITICAL.')))';
}
}
}
if ($search !== '') {
$whereSubquery .= '
AND (source LIKE "%'.$search.'%" OR
oid LIKE "%'.$search.'%" OR
oid_custom LIKE "%'.$search.'%" OR
type_custom LIKE "%'.$search.'%" OR
value LIKE "%'.$search.'%" OR
value_custom LIKE "%'.$search.'%" OR
id_usuario LIKE "%'.$search.'%" OR
text LIKE "%'.$search.'%" OR
description LIKE "%'.$search.'%")';
}
if ($status != -1) {
$whereSubquery .= ' AND status = '.$status;
}
if ($date_from_trap != '') {
if ($time_from_trap != '') {
$whereSubquery .= '
AND (UNIX_TIMESTAMP(timestamp) > UNIX_TIMESTAMP("'.$date_from_trap.' '.$time_from_trap.'"))
';
} else {
$whereSubquery .= '
AND (UNIX_TIMESTAMP(timestamp) > UNIX_TIMESTAMP("'.$date_from_trap.' 23:59:59"))
';
}
}
if ($date_to_trap != '') {
if ($time_to_trap) {
$whereSubquery .= '
AND (UNIX_TIMESTAMP(timestamp) < UNIX_TIMESTAMP("'.$date_to_trap.' '.$time_to_trap.'"))
';
} else {
$whereSubquery .= '
AND (UNIX_TIMESTAMP(timestamp) < UNIX_TIMESTAMP("'.$date_to_trap.' 23:59:59"))
';
}
}
if ($trap_type == 5) {
$whereSubquery .= ' AND type NOT IN (0, 1, 2, 3, 4)';
} else if ($trap_type != -1) {
$whereSubquery .= ' AND type = '.$trap_type;
}
$sql = 'SELECT * FROM ttrap WHERE 1=1
'.$whereSubquery.'
AND oid="'.$trap['oid'].'"
AND source="'.$trap['source'].'"';
$group_traps = db_get_all_rows_sql($sql);
$count_group_traps = count($group_traps);
$sql = "SELECT timestamp FROM ttrap WHERE 1=1
AND oid='".$trap['oid']."'
AND source='".$trap['source']."'
ORDER BY `timestamp` DESC";
$sql = 'SELECT timestamp FROM ttrap WHERE 1=1
'.$whereSubquery.'
AND oid="'.$trap['oid'].'"
AND source="'.$trap['source'].'"
ORDER BY `timestamp` DESC';
$last_trap = db_get_value_sql($sql);
$sql = "SELECT timestamp FROM ttrap WHERE 1=1
AND oid='".$trap['oid']."'
AND source='".$trap['source']."'
ORDER BY `timestamp` ASC";
$sql = 'SELECT timestamp FROM ttrap WHERE 1=1
'.$whereSubquery.'
AND oid="'.$trap['oid'].'"
AND source="'.$trap['source'].'"
ORDER BY `timestamp` ASC';
$first_trap = db_get_value_sql($sql);
$trap['count'] = $count_group_traps;
@ -1135,6 +1318,20 @@ class SnmpConsole extends HTML
}
}
function fullscreen(pure) {
let new_url = 'index.php?sec=snmpconsole&sec2=operation/snmpconsole/snmp_view&pure='+pure;
new_url += '&filter_severity='+$('#filter_severity').val();
new_url += '&filter_status='+$('#filter_status').val();
new_url += '&filter_alert='+$('#filter_alert').val();
new_url += '&filter_group_by=0&filter_free_search='+$('#text-filter_free_search').val();
new_url += '&filter_hours_ago='+$('#text-filter_hours_ago').val();
new_url += '&filter_trap_type='+$('#filter_trap_type').val();
window.location.href = new_url;
}
/**
* Show more information
*/
@ -1148,6 +1345,12 @@ class SnmpConsole extends HTML
method: 'showInfo',
id: id,
group_by : $('#filter_group_by').val(),
alert: $('#filter_alert').val(),
severity: $('#filter_severity').val(),
search: $('#text-filter_free_search').val(),
status: $('#filter_status').val(),
hours_ago: $('#text-filter_hours_ago').val(),
trap_type: $('#filter_trap_type').val()
},
datatype: "json",
success: function(data) {
@ -1223,7 +1426,9 @@ class SnmpConsole extends HTML
new_url += '&filter_severity='+$('#filter_severity').val();
new_url += '&filter_status='+$('#filter_status').val();
new_url += '&filter_alert='+$('#filter_alert').val();
new_url += '&group_by=0';
new_url += '&filter_group_by=0&filter_free_search='+$('#text-filter_free_search').val();
new_url += '&filter_hours_ago='+$('#text-filter_hours_ago').val();
new_url += '&filter_trap_type='+$('#filter_trap_type').val();
const string = '<a href="'+new_url+'"><?php echo __('See more details'); ?></a>';
@ -1318,6 +1523,44 @@ class SnmpConsole extends HTML
const c = this.checked;
$(':checkbox').prop('checked', c);
});
var controls = document.getElementById('dashboard-controls');
autoHideElement(controls, 1000);
var startCountDown = function (duration, cb) {
$('div.dashboard-countdown').countdown('destroy');
if (!duration) return;
var t = new Date();
t.setTime(t.getTime() + duration * 1000);
$('div.dashboard-countdown').countdown({
until: t,
format: 'MS',
layout: '(%M%nn%M:%S%nn%S <?php echo __('Until next'); ?>) ',
alwaysExpire: true,
onExpiry: function () {
var dt_snmp = $("#snmp_console").DataTable();
dt_snmp.draw();
startCountDown(duration);
throw "exit";
}
});
}
// Auto refresh select
$('form#refr-form').submit(function (event) {
event.preventDefault();
});
var handleRefrChange = function (event) {
event.preventDefault();
var url = $('form#refr-form').prop('action');
var refr = Number.parseInt(event.target.value, 10);
startCountDown(refr);
}
$('form#refr-form select').change(handleRefrChange).change();
});
</script>
<?php

View File

@ -33,10 +33,29 @@ require_once $config['homedir'].'/include/class/SnmpConsole.class.php';
$ajaxPage = $config['homedir'].'/operation/snmpconsole/snmp_view';
$filter_alert = get_parameter('filter_alert', -1);
$filter_severity = get_parameter('filter_severity', -1);
$filter_free_search = get_parameter('filter_free_search', '');
$filter_status = get_parameter('filter_status', 0);
$filter_group_by = get_parameter('filter_group_by', 0);
$filter_hours_ago = get_parameter('filter_hours_ago', 8);
$filter_trap_type = get_parameter('filter_trap_type', -1);
$refr = get_parameter('refr', 300);
// Control call flow.
try {
// User access and validation is being processed on class constructor.
$controller = new SnmpConsole($ajaxPage);
$controller = new SnmpConsole(
$ajaxPage,
$filter_alert,
$filter_severity,
$filter_free_search,
$filter_status,
$filter_group_by,
$filter_hours_ago,
$filter_trap_type,
$refr
);
} catch (Exception $e) {
if ((bool) is_ajax() === true) {
echo json_encode(['error' => '[SnmpConsole]'.$e->getMessage() ]);