'.html_print_image( 'images/exit_fullscreen@svg.svg', true, [ 'title' => __('Normal screen'), 'class' => 'main_menu_icon invert_filter', ] ).''; } else { $fullscreen['text'] = ''.html_print_image( 'images/fullscreen@svg.svg', true, [ 'title' => __('Full screen'), 'class' => 'main_menu_icon invert_filter', ] ).''; } if ($config['pure'] === false) { // List. $list = []; $list['text'] = ''.html_print_image( 'images/SNMP-network-numeric-data@svg.svg', true, [ 'title' => __('List'), 'class' => 'main_menu_icon invert_filter', ] ).''; } // Statistics (This file) $statistics = []; $statistics['active'] = true; $statistics['text'] = ''.html_print_image( 'images/logs@svg.svg', true, [ 'title' => __('Statistics'), 'class' => 'main_menu_icon invert_filter', ] ).''; // Header ui_print_standard_header( __('SNMP Statistics'), 'images/op_snmp.png', false, '', false, [ $fullscreen, $list, $statistics, ], [ [ 'link' => '', 'label' => __('Monitoring'), ], [ 'link' => '', 'label' => __('SNMP'), ], ] ); // Retrieving the data $user_groups = users_get_groups($config['id_user'], 'AR', false); $user_groups_str = '0'; if (!empty($user_groups)) { $user_groups_str = implode(',', array_keys($user_groups)); } $last_month_timestamp = date('Y-m-d H:i:s', (time() - SECONDS_1MONTH)); switch ($config['dbtype']) { case 'mysql': case 'postgresql': $sql_traps_generated = "SELECT %s, COUNT(id_trap) AS num, MAX(timestamp) AS timestamp FROM ttrap WHERE timestamp >= '%s' AND (source = '' OR source NOT IN (SELECT direccion FROM tagente) OR source IN (SELECT direccion FROM tagente WHERE id_grupo IN (%s))) GROUP BY %s ORDER BY num DESC, timestamp DESC LIMIT 25"; break; case 'oracle': // MAX(timestamp) AS timestamp is needed to do the magic with oracle $sql_traps_generated = "SELECT %s, COUNT(id_trap) AS num, MAX(timestamp) AS timestamp FROM ttrap WHERE timestamp >= '%s' AND (source = '' OR source NOT IN (SELECT direccion FROM tagente) OR source IN (SELECT direccion FROM tagente WHERE id_grupo IN (%s))) GROUP BY %s ORDER BY num DESC, timestamp DESC"; $sql_traps_generated = "SELECT * FROM ($sql_traps_generated) WHERE rownum <= 25"; break; } $sql_traps_generated_by_source = sprintf($sql_traps_generated, 'source', $last_month_timestamp, $user_groups_str, 'source'); $sql_traps_generated_by_oid = sprintf($sql_traps_generated, 'oid', $last_month_timestamp, $user_groups_str, 'oid'); $traps_generated_by_source = db_get_all_rows_sql($sql_traps_generated_by_source); $traps_generated_by_oid = db_get_all_rows_sql($sql_traps_generated_by_oid); // No traps if (empty($traps_generated_by_source) || empty($traps_generated_by_oid)) { ui_print_info_message(['no_close' => true, 'message' => __('There are no SNMP traps in database') ]); return; } $water_mark = [ 'file' => $config['homedir'].'/images/logo_vertical_water.png', 'url' => ui_get_full_url('/images/logo_vertical_water.png'), ]; // By SOURCE $table_source = new StdClass(); $table_source->width = '100%'; $table_source->class = 'info_table'; $table_source->head[] = __('Traps received by source').' - '.sprintf(__('Top %d'), 25); $table_source->head_colspan[] = 2; $table_source->size = []; $table_source->size['table'] = '50%'; $table_source->size['graph'] = '50%'; $table_source->data = []; $table_source_row = []; $table_source_data = new StdClass(); $table_source_data->width = '100%'; $table_source_data->head = []; $table_source_data->head['source'] = __('Source IP'); $table_source_data->head['num'] = __('Number'); $table_source_data->data = []; $table_source_data->class = 'info_table'; $table_source_graph_data = []; $labels = []; foreach ($traps_generated_by_source as $trap) { $row = []; $agent = agents_get_agent_with_ip($trap['source']); if ($agent === false) { $row['source'] = ''.$trap['source'].''; } else { $agent_id = $agent['id_agente']; $agent_name = ui_print_truncate_text($agent['alias'], 'agent_medium', true, true, true, '[…]', ''); $row['source'] = "'; $row['source'] .= "$agent_name"; } $row['num'] = (int) $trap['num']; $table_source_data->data[] = $row; $labels[] = io_safe_output($trap['source']); $table_source_graph_data[] = (int) $trap['num']; } $table_source_row['table'] = html_print_table($table_source_data, true); unset($table_source_data); if (empty($table_source_graph_data)) { $table_source_graph = graph_nodata_image([]); } else { $options = [ 'height' => 200, 'waterMark' => $water_mark, 'legend' => [ 'display' => true, 'position' => 'right', 'align' => 'center', ], 'labels' => $labels, ]; $table_source_graph = pie_graph( $table_source_graph_data, $options ); } $table_source_row['graph'] = $table_source_graph; $table_source->data[] = $table_source_row; html_print_table($table_source); unset($table_source); // By OID $table_oid = new StdClass(); $table_oid->width = '100%'; $table_oid->class = 'info_table'; $table_oid->head[] = __('Traps received by Enterprise String').' - '.sprintf(__('Top %d'), 25); $table_oid->head_colspan[] = 2; $table_oid->size = []; $table_oid->size['table'] = '50%'; $table_oid->size['graph'] = '50%'; $table_oid->data = []; $table_oid_row = []; $table_oid_data = new StdClass(); $table_oid_data->width = '100%'; $table_oid_data->head = []; $table_oid_data->head['oid'] = __('Trap Enterprise String'); $table_oid_data->head['num'] = __('Number'); $table_oid_data->data = []; $table_oid_data->class = 'info_table'; $table_oid_graph_data = []; $labels = []; foreach ($traps_generated_by_oid as $trap) { $table_oid_data->data[] = [ 'oid' => $trap['oid'], 'num' => (int) $trap['num'], ]; $labels[] = io_safe_output($trap['oid']); $table_oid_graph_data[] = (int) $trap['num']; } $table_oid_row['table'] = html_print_table($table_oid_data, true); unset($table_oid_data); if (empty($table_oid_graph_data)) { $table_oid_graph = graph_nodata_image([]); } else { $options = [ 'height' => 200, 'waterMark' => $water_mark, 'legend' => [ 'display' => true, 'position' => 'right', 'align' => 'center', ], 'labels' => $labels, ]; $table_oid_graph = pie_graph( $table_oid_graph_data, $options ); } $table_oid_row['graph'] = $table_oid_graph; $table_oid->data[] = $table_oid_row; html_print_table($table_oid); unset($table_oid);