';
echo '';
ui_require_css_file('pandora_enterprise', ENTERPRISE_DIR.'/include/styles/');
ui_require_css_file('pandora_dashboard', ENTERPRISE_DIR.'/include/styles/');
ui_require_css_file('cluetip', 'include/styles/js/');
ui_require_jquery_file('countdown');
ui_require_javascript_file('pandora_dashboard', ENTERPRISE_DIR.'/include/javascript/');
ui_require_javascript_file('wz_jsgraphics');
ui_require_javascript_file('pandora_visual_console');
}
// Datatables list.
try {
$checkbox_all = html_print_checkbox(
'all_validate_box',
1,
false,
true
);
$columns = [
'status',
[
'text' => 'snmp_agent',
'class' => 'snmp-td',
],
[
'text' => 'enterprise_string',
'class' => 'snmp-td',
],
[
'text' => 'count',
'class' => 'snmp-td',
],
[
'text' => 'trap_subtype',
'class' => 'snmp-td',
],
[
'text' => 'user_id',
'class' => 'snmp-td',
],
[
'text' => 'timestamp',
'class' => 'snmp-td',
],
'alert',
'action',
[
'text' => 'm',
'class' => 'mw60px pdd_0px',
],
];
$column_names = [
__('Status'),
__('SNMP Agent'),
__('Enterprise String'),
__('Count'),
__('Trap subtype'),
__('User ID'),
__('Timestamp'),
__('Alert'),
__('Actions'),
[
'text' => 'm',
'extra' => $checkbox_all,
'class' => 'w20px no-text-imp',
],
];
$show_alerts = [
-1 => __('All'),
0 => __('Not triggered'),
1 => __('Triggered'),
];
$severities = get_priorities();
$severities[-1] = __('All');
$paginations = [
$config['block_size'] => __('Default'),
25 => '25',
50 => '50',
100 => '100',
200 => '200',
500 => '500',
];
$status_array = [
-1 => __('All'),
0 => __('Not validated'),
1 => __('Validated'),
];
$trap_types = [
-1 => __('None'),
0 => __('Cold start (0)'),
1 => __('Warm start (1)'),
2 => __('Link down (2)'),
3 => __('Link up (3)'),
4 => __('Authentication failure (4)'),
5 => __('Other'),
];
$tableId = 'snmp_console';
// Load datatables user interface.
ui_print_datatable(
[
'id' => $tableId,
'class' => 'info_table',
'style' => 'width: 99%',
'columns' => $columns,
'column_names' => $column_names,
'ajax_url' => $this->ajaxController,
'ajax_data' => ['method' => 'draw'],
'ajax_postprocces' => 'process_datatables_item(item)',
'search_button_class' => 'sub filter float-right',
'no_sortable_columns' => [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
],
'form' => [
'class' => 'flex-row',
'inputs' => [
[
'label' => __('Alert'),
'type' => 'select',
'id' => 'filter_alert',
'input_class' => 'filter_input_datatable',
'name' => 'filter_alert',
'fields' => $show_alerts,
'return' => true,
'selected' => $this->filter_alert,
'style' => 'widht:100% !important',
],
[
'label' => __('Severity'),
'type' => 'select',
'id' => 'filter_severity',
'input_class' => 'filter_input_datatable',
'name' => 'filter_severity',
'fields' => $severities,
'return' => true,
'selected' => $this->filter_severity,
'style' => 'widht:100%',
],
[
'label' => __('Free search'),
'type' => 'text',
'id' => 'filter_free_search',
'input_class' => 'filter_input_datatable',
'name' => 'filter_free_search',
'value' => $this->filter_free_search,
],
[
'label' => __('Status'),
'type' => 'select',
'id' => 'filter_status',
'input_class' => 'filter_input_datatable',
'name' => 'filter_status',
'fields' => $status_array,
'return' => true,
'selected' => $this->filter_status,
'style' => 'widht:100%',
],
[
'label' => __('Group by Enterprise String/IP'),
'type' => 'select',
'name' => 'filter_group_by',
'selected' => $this->filter_group_by,
'disabled' => false,
'return' => true,
'id' => 'filter_group_by',
'input_class' => 'filter_input_datatable',
'fields' => [
0 => __('No'),
1 => __('Yes'),
],
],
[
'label' => __('Max. hours old'),
'type' => 'text',
'id' => 'filter_hours_ago',
'input_class' => 'filter_input_datatable',
'name' => 'filter_hours_ago',
'value' => $this->filter_hours_ago,
],
[
'label' => __('Trap type'),
'type' => 'select',
'id' => 'filter_trap_type',
'input_class' => 'filter_input_datatable',
'name' => 'filter_trap_type',
'fields' => $trap_types,
'return' => true,
'selected' => $this->filter_trap_type,
],
],
],
'pagination_options' => [
[
$config['block_size'],
5,
10,
25,
100,
200,
500,
1000,
],
[
$config['block_size'],
5,
10,
25,
100,
200,
500,
1000,
],
],
'filter_main_class' => 'box-flat white_table_graph fixed_filter_bar',
]
);
} catch (Exception $e) {
echo $e->getMessage();
}
$buttons[] = html_print_submit_button(
__('Validate'),
'updatebt',
false,
'class="sub ok"',
true
);
$buttons[] = html_print_submit_button(
__('Delete'),
'deletebt',
false,
'class="sub delete" onClick="javascript:return confirm(\''.__('Are you sure?').'\')"',
true
);
html_print_action_buttons(
implode('', $buttons),
['type' => 'form_action']
);
echo '
';
echo '
'.__('Status').'
';
echo html_print_image(
'images/pixel_green.png',
true,
[
'width' => '20',
'height' => '20',
]
).' - '.__('Validated');
echo '
';
echo html_print_image(
'images/pixel_red.png',
true,
[
'width' => '20',
'height' => '20',
]
).' - '.__('Not validated');
echo '';
echo '
';
echo '
'.__('Alert').'
';
echo html_print_image(
'images/pixel_yellow.png',
true,
[
'width' => '20',
'height' => '20',
]
).' - '.__('Fired');
echo '
';
echo html_print_image(
'images/pixel_gray.png',
true,
[
'width' => '20',
'height' => '20',
]
).' - '.__('Not fired');
echo '';
echo '
';
echo '
'.__('Action').'
';
echo html_print_image('images/ok.png', true).' - '.__('Validate');
echo '
';
echo html_print_image('images/cross.png', true, ['class' => 'invert_filter']).' - '.__('Delete');
echo '';
echo '
';
echo '
'.__('Severity').'
';
foreach (get_priorities() as $num => $name) {
echo ''.$name.'';
echo '
';
}
echo '';
// Load own javascript file.
echo $this->loadJS();
}
/**
* Get the data for draw the table.
*
* @return void.
*/
public function draw()
{
global $config;
// Init data.
$data = [];
// Count of total records.
$count = 0;
// Catch post parameters.
$start = get_parameter('start', 0);
$length = get_parameter('length', $config['block_size']);
// There is a limit of (2^32)^2 (18446744073709551615) rows in a MyISAM table, show for show all use max nrows.
$length = ($length != '-1') ? $length : '18446744073709551615';
$order = get_datatable_order(true);
$filters = get_parameter('filter', []);
// Build ranges.
$now = new DateTime();
$ago = new DateTime();
$interval = new DateInterval(sprintf('PT%dH', $filters['filter_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');
try {
ob_start();
$data = [];
$user_groups = users_get_groups($config['id_user'], 'AR', false);
$prea = array_keys($user_groups);
$ids = join(',', $prea);
$user_in_group_wo_agents = db_get_value_sql('select count(DISTINCT(id_usuario)) from tusuario_perfil where id_usuario ="'.$config['id_user'].'" and id_perfil = 1 and id_grupo in (select id_grupo from tgrupo where id_grupo in ('.$ids.') and id_grupo not in (select id_grupo from tagente))');
if ($user_in_group_wo_agents == 0) {
$rows = db_get_all_rows_filter(
'tagente',
['id_grupo' => array_keys($user_groups)],
['id_agente']
);
$id_agents = [];
foreach ($rows as $row) {
$id_agents[] = $row['id_agente'];
}
if (!empty($id_agents)) {
$address_by_user_groups = agents_get_addresses($id_agents);
foreach ($address_by_user_groups as $i => $a) {
$address_by_user_groups[$i] = '"'.$a.'"';
}
}
} else {
$rows = db_get_all_rows_filter(
'tagente',
[],
['id_agente']
);
$id_agents = [];
foreach ($rows as $row) {
$id_agents[] = $row['id_agente'];
}
$all_address_agents = agents_get_addresses($id_agents);
foreach ($all_address_agents as $i => $a) {
$all_address_agents[$i] = '"'.$a.'"';
}
}
if (empty($address_by_user_groups)) {
$address_by_user_groups = [];
array_unshift($address_by_user_groups, '""');
}
if (empty($all_address_agents)) {
$all_address_agents = [];
array_unshift($all_address_agents, '""');
}
$sql = 'SELECT * FROM ttrap
WHERE (
`source` IN ('.implode(',', $address_by_user_groups).") OR
`source`='' OR
`source` NOT IN (".implode(',', $all_address_agents).')
)
%s
ORDER BY timestamp DESC
LIMIT %d,%d';
$whereSubquery = '';
if ($filters['filter_alert'] != -1) {
$whereSubquery .= ' AND alerted = '.$filters['filter_alert'];
}
if ($filters['filter_severity'] != -1) {
// There are two special severity values aimed to match two different trap standard severities
// in database: warning/critical and critical/normal.
if ($filters['filter_severity'] != EVENT_CRIT_OR_NORMAL
&& $filters['filter_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 = '.$filters['filter_severity'].') OR
(alerted = 1 AND priority = '.$filters['filter_severity'].'))';
} else {
$whereSubquery .= ' AND (
(alerted = 0 AND 1 = '.$filters['filter_severity'].') OR
(alerted = 1 AND priority = '.$filters['filter_severity'].'))';
}
} else if ($filters['filter_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 ($filters['filter_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 ($filters['filter_free_search'] !== '') {
$whereSubquery .= '
AND (source LIKE "%'.$filters['filter_free_search'].'%" OR
oid LIKE "%'.$filters['filter_free_search'].'%" OR
oid_custom LIKE "%'.$filters['filter_free_search'].'%" OR
type_custom LIKE "%'.$filters['filter_free_search'].'%" OR
value LIKE "%'.$filters['filter_free_search'].'%" OR
value_custom LIKE "%'.$filters['filter_free_search'].'%" OR
id_usuario LIKE "%'.$filters['filter_free_search'].'%" OR
text LIKE "%'.$filters['filter_free_search'].'%" OR
description LIKE "%'.$filters['filter_free_search'].'%")';
}
if ($filters['filter_status'] != -1) {
$whereSubquery .= ' AND status = '.$filters['filter_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 ($filters['filter_trap_type'] == 5) {
$whereSubquery .= ' AND type NOT IN (0, 1, 2, 3, 4)';
} else if ($filters['filter_trap_type'] != -1) {
$whereSubquery .= ' AND type = '.$filters['filter_trap_type'];
}
if ($filters['filter_group_by']) {
$where_without_group = $whereSubquery;
$whereSubquery .= ' GROUP BY source,oid';
}
$sql = sprintf($sql, $whereSubquery, $start, $length);
$sql_count = 'SELECT COUNT(id_trap) FROM ttrap
WHERE (
source IN ('.implode(',', $address_by_user_groups).") OR
source='' OR
source NOT IN (".implode(',', $all_address_agents).')
)
%s';
$sql_count = sprintf($sql_count, $whereSubquery);
$traps = db_get_all_rows_sql($sql, true);
$total = (int) db_get_value_sql($sql_count, false, true);
if (empty($traps) === false) {
$data = $traps;
$data = array_reduce(
$data,
function ($carry, $item) use ($filters, $where_without_group) {
global $config;
if (empty($carry) === true) {
$count = 0;
} else {
$count = count($carry);
}
// Transforms array of arrays $data into an array
// of objects, making a post-process of certain fields.
$tmp = (object) $item;
$severity_class = get_priority_class($tmp->severity);
$status = $tmp->status;
// Status.
if ($status == 0) {
$tmp->status = html_print_image(
'images/pixel_red.png',
true,
[
'title' => __('Not validated'),
'width' => '20',
'height' => '20',
]
);
} else {
$tmp->status = html_print_image(
'images/pixel_green.png',
true,
[
'title' => __('Validated'),
'width' => '20',
'height' => '20',
]
);
}
// SNMP Agent.
$agent = agents_get_agent_with_ip($tmp->source);
if ($agent === false) {
$tmp->snmp_agent .= '
'.$tmp->source.'';
} else {
$tmp->snmp_agent .= '
';
}
// Enterprise string.
if (empty($tmp->text) === false) {
$enterprise_string = $tmp->text;
} else if (empty($tmp->oid) === false) {
$enterprise_string = $tmp->oid;
} else {
$enterprise_string = __('N/A');
}
$tmp->enterprise_string = '
';
// Count.
if ($filters['filter_group_by']) {
$sql = 'SELECT count(*) FROM ttrap WHERE 1=1
'.$where_without_group.'
AND oid="'.$tmp->oid.'"
AND source="'.$tmp->source.'"';
$group_traps = db_get_value_sql($sql);
$tmp->count = '
'.$group_traps.'
';
}
// Trap subtype.
$tmp->trap_subtype = '
';
if (empty($tmp->value) === true) {
$tmp->trap_subtype .= __('N/A');
} else {
$tmp->trap_subtype .= ui_print_truncate_text($tmp->value, GENERIC_SIZE_TEXT, false);
}
$tmp->trap_subtype .= '
';
// User ID.
$tmp->user_id = '
';
if (empty($status) === false) {
$tmp->user_id .= '
'.substr($tmp->id_usuario, 0, 8).'';
if (!empty($tmp->id_usuario)) {
$tmp->user_id .= ui_print_help_tip(get_user_fullname($tmp->id_usuario), true);
}
} else {
$tmp->user_id .= '--';
}
$tmp->user_id .= '
';
// Timestamp.
$timestamp = $tmp->timestamp;
$tmp->timestamp = '
';
$tmp->timestamp .= '';
$tmp->timestamp .= ui_print_timestamp($timestamp, true);
$tmp->timestamp .= '
';
// Use alert severity if fired.
if (empty($tmp->alerted) === false) {
$tmp->alert = html_print_image('images/pixel_yellow.png', true, ['width' => '20', 'height' => '20', 'border' => '0', 'title' => __('Alert fired')]);
} else {
$tmp->alert = html_print_image('images/pixel_gray.png', true, ['width' => '20', 'height' => '20', 'border' => '0', 'title' => __('Alert not fired')]);
}
// Actions.
$tmp->action = '';
if ($status != 1) {
$tmp->action .= '
'.html_print_image(
'images/ok.png',
true,
[
'border' => '0',
'title' => __('Validate'),
'onclick' => 'validate_trap(\''.$tmp->id_trap.'\')',
]
).' ';
}
if ($tmp->source === '') {
if (\users_is_admin()) {
$tmp->action .= '
'.html_print_image(
'images/cross.png',
true,
[
'border' => '0',
'title' => __('Delete'),
'class' => 'invert_filter',
'onclick' => 'delete_trap(\''.$tmp->id_trap.'\')',
]
).' ';
}
} else {
$tmp->action .= '
'.html_print_image(
'images/cross.png',
true,
[
'border' => '0',
'title' => __('Delete'),
'class' => 'invert_filter',
'onclick' => 'delete_trap(\''.$tmp->id_trap.'\')',
]
).' ';
}
$tmp->action .= '
'.html_print_image(
'images/eye.png',
true,
[
'alt' => __('Show more'),
'title' => __('Show more'),
'class' => 'invert_filter',
]
).'';
$tmp->action .= '
'.html_print_image('images/edit.png', true, ['alt' => __('SNMP trap editor'), 'title' => __('SNMP trap editor')]).'';
$tmp->m = html_print_checkbox_extended('snmptrapid[]', $tmp->id_trap, false, false, '', 'class="chk"', true);
$carry[] = $tmp;
return $carry;
},
);
}
if (empty($data) === true) {
$total = 0;
$data = [];
}
echo json_encode(
[
'data' => $data,
'recordsTotal' => $total,
'recordsFiltered' => $total,
]
);
// Capture output.
$response = ob_get_clean();
} catch (Exception $e) {
echo json_encode(['error' => $e->getMessage()]);
exit;
}
// If not valid, show error with issue.
json_decode($response);
if (json_last_error() === JSON_ERROR_NONE) {
// If valid dump.
echo $response;
} else {
echo json_encode(
['error' => $response]
);
}
exit;
}
/**
* Checks if target method is available to be called using AJAX.
*
* @param string $method Target method.
*
* @return boolean True allowed, false not.
*/
public function ajaxMethod(string $method)
{
return in_array($method, $this->AJAXMethods);
}
/**
* Delete snmp trap.
*
* @return void
*/
public function deleteTrap()
{
$id_trap = get_parameter('id', 0);
$group_by = (bool) get_parameter('group_by', 0);
if ($id_trap > 0) {
if ($group_by === true) {
$sql_ids_traps = 'SELECT id_trap, source FROM ttrap WHERE oid IN (SELECT oid FROM ttrap WHERE id_trap = '.$id_trap.')
AND source IN (SELECT source FROM ttrap WHERE id_trap = '.$id_trap.')';
$ids_traps = db_get_all_rows_sql($sql_ids_traps);
foreach ($ids_traps as $key => $value) {
$result = db_process_sql_delete('ttrap', ['id_trap' => $value['id_trap']]);
enterprise_hook('snmp_update_forwarded_modules', [$value]);
}
} else {
$forward_info = db_get_row('ttrap', 'id_trap', $id_trap);
$result = db_process_sql_delete('ttrap', ['id_trap' => $id_trap]);
enterprise_hook('snmp_update_forwarded_modules', [$forward_info]);
}
}
}
/**
* Delete snmp traps.
*
* @return void
*/
public function deleteTraps()
{
$ids = get_parameter('ids', []);
$group_by = (bool) get_parameter('group_by', false);
if (empty($ids) === false) {
$string_ids = implode(',', $ids);
if ($group_by === true) {
$sql_ids_traps = 'SELECT id_trap, source FROM ttrap WHERE oid IN (SELECT oid FROM ttrap WHERE id_trap IN ('.$string_ids.'))
AND source IN (SELECT source FROM ttrap WHERE id_trap IN ('.$string_ids.'))';
$ids_traps = db_get_all_rows_sql($sql_ids_traps);
$array = array_column($ids_traps, 'id_trap');
$delete = sprintf(
'DELETE FROM `ttrap` WHERE id_trap IN (%s)',
implode(',', $array),
);
db_process_sql($delete);
foreach ($ids_traps as $key => $value) {
enterprise_hook('snmp_update_forwarded_modules', [$value]);
}
} else {
$delete = sprintf(
'DELETE FROM `ttrap` WHERE id_trap IN (%s)',
$string_ids,
);
db_process_sql($delete);
foreach ($ids as $id_trap) {
enterprise_hook('snmp_update_forwarded_modules', [$id_trap]);
}
}
}
}
/**
* Validate snmp trap.
*
* @return void
*/
public function validateTrap()
{
global $config;
$id_trap = get_parameter('id', 0);
$values = [
'status' => 1,
'id_usuario' => $config['id_user'],
];
$result = db_process_sql_update('ttrap', $values, ['id_trap' => $id_trap]);
enterprise_hook('snmp_update_forwarded_modules', [$id_trap]);
}
/**
* Validate snmp traps.
*
* @return void
*/
public function validateTraps()
{
global $config;
$ids = get_parameter('ids', []);
if (empty($ids) === false) {
$update = sprintf(
'UPDATE ttrap SET `status` = 1, `id_usuario` = "%s" WHERE id_trap IN (%s)',
$config['id_user'],
implode(',', $ids)
);
db_process_sql($update);
foreach ($ids as $id_trap) {
enterprise_hook('snmp_update_forwarded_modules', [$id_trap]);
}
}
}
/**
* VShow info trap.
*
* @return void
*/
public function showInfo()
{
global $config;
$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) {
$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
'.$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
'.$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;
$trap['first'] = $first_trap;
$trap['last'] = $last_trap;
}
echo json_encode($trap);
return;
}
/**
* Load Javascript code.
*
* @return string.
*/
public function loadJS()
{
// Nothing for this moment.
ob_start();
// Javascript content.
?>