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; } /** * Run view * * @return void */ public function run() { global $config; // Javascript. ui_require_jquery_file('pandora'); // CSS. ui_require_css_file('wizard'); ui_require_css_file('discovery'); $default_refr = 300; $statistics['text'] = ''.html_print_image( 'images/logs@svg.svg', true, [ 'title' => __('Statistics'), 'class' => 'main_menu_icon invert_filter', ] ).''; $list['text'] = ''.html_print_image( 'images/SNMP-network-numeric-data@svg.svg', true, [ 'title' => __('List'), 'class' => 'main_menu_icon invert_filter', ] ).''; $list['active'] = true; // Header. ui_print_standard_header( __('SNMP Console'), 'images/op_snmp.png', false, 'snmp_console', false, [ $screen, $list, $statistics, ], [ [ 'link' => '', 'label' => __('Monitoring'), ], [ 'link' => '', 'label' => __('SNMP'), ], ] ); // 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', [ 'text' => 'action', 'class' => 'table_action_buttons w120px', ], [ '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', 'icon' => 'next', ], true ); $buttons[] = html_print_submit_button( __('Delete'), 'deletebt', false, [ 'icon' => 'delete', 'mode' => 'secondary', 'onClick' => "javascript:return confirm('".__('Are you sure?')."')", ], true ); html_print_action_buttons( implode('', $buttons), ['type' => 'form_action'] ); $legend = ''; $legend .= ''; $legend .= ''; $legend .= ''; ui_toggle($legend, __('Legend')); // 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'] !== '') { $free_search_str = io_safe_output($filters['filter_free_search']); $whereSubquery .= ' AND (source LIKE "%'.$free_search_str.'%" OR oid LIKE "%'.$free_search_str.'%" OR oid_custom LIKE "%'.$free_search_str.'%" OR type_custom LIKE "%'.$free_search_str.'%" OR value LIKE "%'.$free_search_str.'%" OR value_custom LIKE "%'.$free_search_str.'%" OR id_usuario LIKE "%'.$free_search_str.'%" OR text LIKE "%'.$free_search_str.'%" OR description LIKE "%'.$free_search_str.'%")'; } 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 .= '
'; $tmp->snmp_agent .= ''.$agent['alias'].ui_print_help_tip($tmp->source, true); '
'; } // 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 = '
'.$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/validate.svg', true, [ 'border' => '0', 'title' => __('Validate'), 'onclick' => 'validate_trap(\''.$tmp->id_trap.'\')', 'class' => 'invert_filter main_menu_icon', ] ).' '; } if ($tmp->source === '') { if (\users_is_admin()) { $tmp->action .= ''.html_print_image( 'images/delete.svg', true, [ 'border' => '0', 'title' => __('Delete'), 'class' => 'invert_filter main_menu_icon', 'onclick' => 'delete_trap(\''.$tmp->id_trap.'\')', ] ).' '; } } else { $tmp->action .= ''.html_print_image( 'images/delete.svg', true, [ 'border' => '0', 'title' => __('Delete'), 'class' => 'invert_filter main_menu_icon', 'onclick' => 'delete_trap(\''.$tmp->id_trap.'\')', ] ).' '; } $tmp->action .= ''.html_print_image( 'images/see-details@svg.svg', true, [ 'id' => 'img_'.$tmp->id_trap, 'alt' => __('Show more'), 'title' => __('Show more'), 'class' => 'invert_filter main_menu_icon', ] ).' '.html_print_image( 'images/disable.svg', true, [ 'id' => 'img_hide_'.$tmp->id_trap, 'alt' => __('Hide details'), 'title' => __('Hide details'), 'class' => 'invert_filter main_menu_icon', 'style' => 'display:none', ] ).''; if ($config['enterprise_installed']) { $tmp->action .= ''; $tmp->action .= html_print_image( 'images/edit.svg', true, [ 'alt' => __('SNMP trap editor'), 'title' => __('SNMP trap editor'), 'class' => 'main_menu_icon invert_filter', ] ); $tmp->action .= ''; } $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. ?>
'; $legend .= '

'.__('Severity').'

'; $legend .= '
'; $priorities = get_priorities(); $half = (count($priorities) / 2); $count = 0; foreach ($priorities as $num => $name) { if ($count == $half) { $legend .= '
'; } $legend .= ''.$name.''; $legend .= '
'; $count++; } $legend .= '
'; $legend .= '

'.__('Status').'

'; $legend .= ''.__('Validated').''; $legend .= '
'; $legend .= ''.__('Not validated').''; $legend .= '
'; $legend .= '

'.__('Alert').'

'; $legend .= ''.__('Alert').''; $legend .= '
'; $legend .= ''.__('Not fired').''; $legend .= '
'; $legend .= '

'.__('Action').'

'; $legend .= '
'; $legend .= html_print_image('images/validate.svg', true, ['class' => 'main_menu_icon invert_filter']).' - '.__('Validate'); $legend .= '
'; $legend .= '
'; $legend .= '
'; $legend .= html_print_image('images/delete.svg', true, ['class' => 'main_menu_icon invert_filter']).' - '.__('Delete'); $legend .= '
'; $legend .= '