From 0b1e60b8cf5bf0080020df90105c4625083f755f Mon Sep 17 00:00:00 2001 From: Calvo Date: Tue, 6 Apr 2021 18:18:17 +0200 Subject: [PATCH 01/93] Fixed view icon on report and custom graphs --- pandora_console/godmode/reporting/graph_builder.php | 2 +- pandora_console/godmode/reporting/reporting_builder.php | 2 +- pandora_console/operation/reporting/graph_viewer.php | 2 +- pandora_console/operation/reporting/reporting_viewer.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pandora_console/godmode/reporting/graph_builder.php b/pandora_console/godmode/reporting/graph_builder.php index 79fdfde250..27cbc9354d 100644 --- a/pandora_console/godmode/reporting/graph_builder.php +++ b/pandora_console/godmode/reporting/graph_builder.php @@ -319,7 +319,7 @@ if ($edit_graph) { 'view' => [ 'active' => false, 'text' => ''.html_print_image( - 'images/operation.png', + 'images/eye.png', true, [ 'title' => __('View graph'), diff --git a/pandora_console/godmode/reporting/reporting_builder.php b/pandora_console/godmode/reporting/reporting_builder.php index d4967be810..e758f6ac0b 100755 --- a/pandora_console/godmode/reporting/reporting_builder.php +++ b/pandora_console/godmode/reporting/reporting_builder.php @@ -3209,7 +3209,7 @@ if ($enterpriseEnable) { $buttons['view'] = [ 'active' => false, 'text' => ''.html_print_image( - 'images/operation.png', + 'images/eye.png', true, [ 'title' => __('View report'), diff --git a/pandora_console/operation/reporting/graph_viewer.php b/pandora_console/operation/reporting/graph_viewer.php index 000179fe4e..5e2de125e0 100644 --- a/pandora_console/operation/reporting/graph_viewer.php +++ b/pandora_console/operation/reporting/graph_viewer.php @@ -196,7 +196,7 @@ if ($view_graph) { } $options['view']['text'] = ''.html_print_image( - 'images/operation.png', + 'images/eye.png', true, [ 'title' => __('View graph'), diff --git a/pandora_console/operation/reporting/reporting_viewer.php b/pandora_console/operation/reporting/reporting_viewer.php index 5434553aea..7dfecce0b9 100755 --- a/pandora_console/operation/reporting/reporting_viewer.php +++ b/pandora_console/operation/reporting/reporting_viewer.php @@ -125,7 +125,7 @@ if (check_acl_restricted_all($config['id_user'], $report_group, 'RW')) { $options['view'] = [ 'active' => true, 'text' => ''.html_print_image( - 'images/operation.png', + 'images/eye.png', true, [ 'title' => __('View report'), From 420960ed9ee001936e807583e309d150e09d366a Mon Sep 17 00:00:00 2001 From: Calvo Date: Wed, 7 Apr 2021 10:14:27 +0200 Subject: [PATCH 02/93] Changed search bar text --- pandora_console/include/class/OrderInterpreter.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_console/include/class/OrderInterpreter.class.php b/pandora_console/include/class/OrderInterpreter.class.php index 947c70c953..e5b347d58f 100644 --- a/pandora_console/include/class/OrderInterpreter.class.php +++ b/pandora_console/include/class/OrderInterpreter.class.php @@ -424,7 +424,7 @@ class OrderInterpreter extends Wizard } if ($iterator === 0) { - echo __('No results found'); + echo __('Press enter to search'); } echo ''; From ee858280e11b7ef599ccc4fcb171075c6572745b Mon Sep 17 00:00:00 2001 From: Jose Gonzalez Date: Fri, 9 Apr 2021 13:30:31 +0200 Subject: [PATCH 03/93] Changed CSRF hidden function for allow return --- pandora_console/include/functions_html.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php index a5b4eb4448..ed8bc0922e 100644 --- a/pandora_console/include/functions_html.php +++ b/pandora_console/include/functions_html.php @@ -4298,10 +4298,14 @@ function html_print_sort_arrows($params, $order_tag, $up='up', $down='down') /** * Print an input hidden with a new csrf token generated + * + * @param boolean $return If it is true return a string with the output instead to echo the output. + * + * @return void */ -function html_print_csrf_hidden() +function html_print_csrf_hidden(bool $return=false) { - html_print_input_hidden('csrf_code', generate_csrf_code()); + return html_print_input_hidden('csrf_code', generate_csrf_code(), $return); } From 9f92a4b6c526770667e5c828447ae874a752bba0 Mon Sep 17 00:00:00 2001 From: Jose Gonzalez Date: Fri, 9 Apr 2021 13:31:11 +0200 Subject: [PATCH 04/93] Added CSRF token input for PrintForms --- pandora_console/include/class/HTML.class.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pandora_console/include/class/HTML.class.php b/pandora_console/include/class/HTML.class.php index d55aebb924..d5bf6dfc97 100644 --- a/pandora_console/include/class/HTML.class.php +++ b/pandora_console/include/class/HTML.class.php @@ -867,6 +867,7 @@ class HTML } $output .= '
    '.$output_submit.'
'; + $output .= html_print_csrf_hidden(true); $output .= ''; $output .= ''; if ($rawjs) { @@ -1002,6 +1003,7 @@ class HTML $output .= ''; $output .= '
    '.$output_submit.'
'; + $output .= html_print_csrf_hidden(true); $output .= ''; $output .= ''; if ($rawjs) { @@ -1073,6 +1075,7 @@ class HTML $output .= ''; $output .= '
    '.$output_submit.'
'; + $output .= html_print_csrf_hidden(true); $output .= ''; $output .= ''; if ($rawjs) { From 93f355132626d25baa51c0180cafd4f7a710ab26 Mon Sep 17 00:00:00 2001 From: "alejandro.campos@artica.es" Date: Mon, 12 Apr 2021 18:17:09 +0200 Subject: [PATCH 05/93] Create interface views --- pandora_console/include/ajax/agent.php | 16 + .../agentes/interface_view.functions.php | 738 ++++++++++++++++++ .../operation/agentes/interface_view.php | 259 ++++++ .../operation/agentes/ver_agente.php | 32 + pandora_console/operation/menu.php | 3 + 5 files changed, 1048 insertions(+) create mode 100644 pandora_console/operation/agentes/interface_view.functions.php create mode 100644 pandora_console/operation/agentes/interface_view.php diff --git a/pandora_console/include/ajax/agent.php b/pandora_console/include/ajax/agent.php index 9386dfa7e9..c593a35240 100644 --- a/pandora_console/include/ajax/agent.php +++ b/pandora_console/include/ajax/agent.php @@ -27,12 +27,28 @@ ob_clean(); // * q // * id_group $search_agents = (bool) get_parameter('search_agents'); +$get_agents_interfaces = (bool) get_parameter('get_agents_interfaces'); +$id_agents = get_parameter('id_agents', []); $get_agents_group = (bool) get_parameter('get_agents_group', false); $force_local = (bool) get_parameter('force_local', false); if (https_is_running()) { header('Content-type: application/json'); } +if ($get_agents_interfaces) { + $agents_interfaces = agents_get_network_interfaces($id_agents); + + // Include alias per agent. + foreach ($agents_interfaces as $key => $value) { + $agent_alias = agents_get_alias($key); + $agents_interfaces[$key]['agent_alias'] = $agent_alias; + } + + echo json_encode($agents_interfaces); + + return; +} + if ($get_agents_group) { $id_group = (int) get_parameter('id_group', -1); $mode = (string) get_parameter('mode', 'json'); diff --git a/pandora_console/operation/agentes/interface_view.functions.php b/pandora_console/operation/agentes/interface_view.functions.php new file mode 100644 index 0000000000..df0371c8fe --- /dev/null +++ b/pandora_console/operation/agentes/interface_view.functions.php @@ -0,0 +1,738 @@ +width = '100%'; + $table->cellspacing = 0; + $table->cellpadding = 0; + $table->class = 'databox filters'; + + if ($sec === 'view') { + $table->style[0] = 'font-weight: bold;'; + $table->style[1] = 'font-weight: bold;'; + $table->style[2] = 'font-weight: bold;'; + $table->style[3] = 'font-weight: bold;'; + $table->style[4] = 'font-weight: bold;'; + + $table->data[0][0] = __('Group'); + $table->data[0][1] .= html_print_select_groups( + $config['id_user'], + 'AR', + true, + 'group_id', + $ag_group, + '', + '', + '0', + true, + false, + false, + '', + false, + '', + false, + false, + 'id_grupo', + false + ); + + $table->data[0][2] = __('Recursion'); + + $table->data[0][2] .= html_print_input( + [ + 'type' => 'checkbox', + 'name' => 'recursion', + 'return' => true, + 'checked' => $recursion, + 'value' => 1, + ] + ); + + $table->data[1][0] = __('Agents'); + + if (empty($agents) === true || $agents == -1) { + $agents = []; + } + + $table->data[1][1] = html_print_select( + [], + 'selected_agents[]', + '', + '', + '', + 0, + true, + true, + true, + '', + false, + 'min-width: 180px; max-width: 200px;' + ); + + // Interfaces. + $table->data[1][3] = ''.__('Interfaces').''; + $table->data[1][4] = html_print_select( + [], + 'selected_interfaces[]', + $selected_interfaces, + '', + '', + 0, + true, + true, + true, + '', + false, + 'min-width: 180px; max-width: 200px;' + ); + + $table->data[2][4] = html_print_submit_button( + __('Show'), + 'uptbutton', + false, + 'class="sub search mgn_tp_0"', + true + ); + + $filters = '
'; + + $filters .= html_print_table($table, true); + $filters .= '
'; + } else { + $table->style[0] = 'font-weight: bold;'; + + $table->data[0][0] = ''.__('Interfaces').''; + $table->data[0][1] = html_print_select( + [], + 'selected_interfaces[]', + $selected_interfaces, + '', + '', + 0, + true, + true, + true, + '', + false, + 'min-width: 180px; max-width: 200px;' + ); + + $table->data[1][1] = html_print_submit_button( + __('Show'), + 'uptbutton', + false, + 'class="sub search mgn_tp_0"', + true + ); + + $filters = '
'; + + $filters .= html_print_table($table, true); + $filters .= '
'; + } + + ui_toggle( + $filters, + __('Interface filter'), + __('Interface filter'), + 'ui_toggle_if_filter' + ); + unset($table); +} + + +/** + * Print interfaces table. + * + * @param array data Array containing data of interfaces. + * @param array selected_agents Selected agents. + * @param array selected_interfaces Selected interfaces. + * @param string sort_field Field used to sort table. + * @param string sort Direction used to sort by field. + * @param int pagination_index Active page (used for pagination). + * @param string sec Active section of page. + */ +function print_table( + $data, + $selected_agents, + $selected_interfaces, + $sort_field, + $sort, + $pagination_index, + $sec +) { + global $config; + + $selected = true; + $select_if_name_up = false; + $select_if_name_down = false; + $select_if_speed_data_up = false; + $select_if_speed_data_down = false; + $select_if_in_octets_up = false; + $select_if_in_octets_down = false; + $select_if_out_octets_up = false; + $select_if_out_octets_down = false; + $select_if_usage_module_data_in_up = false; + $select_if_usage_module_data_in_down = false; + $select_if_usage_module_data_out_up = false; + $select_if_usage_module_data_out_down = false; + $select_if_last_data_up = false; + $select_if_last_data_down = false; + $order = null; + + switch ($sort_field) { + case 'if_agent_name': + switch ($sort) { + case 'up': + $select_if_agent_name_up = $selected; + $order = [ + 'field' => 'if_agent_name', + 'order' => 'ASC', + ]; + break; + + case 'down': + default: + $select_if_agent_name_down = $selected; + $order = [ + 'field' => 'if_agent_name', + 'order' => 'DESC', + ]; + break; + } + break; + + case 'if_name': + switch ($sort) { + case 'up': + $select_if_name_up = $selected; + $order = [ + 'field' => 'if_name', + 'order' => 'ASC', + ]; + break; + + case 'down': + default: + $select_if_name_down = $selected; + $order = [ + 'field' => 'if_name', + 'order' => 'DESC', + ]; + break; + } + break; + + case 'if_speed_data': + switch ($sort) { + case 'up': + $select_if_speed_data_up = $selected; + $order = [ + 'field' => 'if_speed_data', + 'order' => 'ASC', + ]; + break; + + case 'down': + default: + $select_if_speed_data_down = $selected; + $order = [ + 'field' => 'if_speed_data', + 'order' => 'DESC', + ]; + break; + } + break; + + case 'if_in_octets': + switch ($sort) { + case 'up': + $select_if_in_octets_up = $selected; + $order = [ + 'field' => 'if_in_octets', + 'order' => 'ASC', + ]; + break; + + case 'down': + default: + $select_if_in_octets_down = $selected; + $order = [ + 'field' => 'if_in_octets', + 'order' => 'DESC', + ]; + break; + } + break; + + case 'if_out_octets': + switch ($sort) { + case 'up': + $select_if_out_octets_up = $selected; + $order = [ + 'field' => 'if_out_octets', + 'order' => 'ASC', + ]; + break; + + case 'down': + default: + $select_if_out_octets_down = $selected; + $order = [ + 'field' => 'if_out_octets', + 'order' => 'DESC', + ]; + break; + } + break; + + case 'if_usage_module_data_in': + switch ($sort) { + case 'up': + $select_if_usage_module_data_in_up = $selected; + $order = [ + 'field' => 'if_usage_module_data_in', + 'order' => 'ASC', + ]; + break; + + case 'down': + default: + $select_if_usage_module_data_in_down = $selected; + $order = [ + 'field' => 'if_usage_module_data_in', + 'order' => 'DESC', + ]; + break; + } + break; + + case 'if_usage_module_data_out': + switch ($sort) { + case 'up': + $select_if_usage_module_data_out_up = $selected; + $order = [ + 'field' => 'if_usage_module_data_out', + 'order' => 'ASC', + ]; + break; + + case 'down': + default: + $select_if_usage_module_data_out_down = $selected; + $order = [ + 'field' => 'if_usage_module_data_out', + 'order' => 'DESC', + ]; + break; + } + break; + + case 'if_last_data': + switch ($sort) { + case 'up': + $select_if_last_data_up = $selected; + $order = [ + 'field' => 'if_last_data', + 'order' => 'ASC', + ]; + break; + + case 'down': + default: + $select_if_last_data_down = $selected; + $order = [ + 'field' => 'if_last_data', + 'order' => 'DESC', + ]; + break; + } + break; + + default: + $select_if_agent_name = ($sec === 'view') ? true : false; + $select_if_name_up = ($sec === 'estado') ? true : false; + $select_if_name_down = false; + $select_if_speed_data_up = false; + $select_if_speed_data_down = false; + $select_if_in_octets_up = false; + $select_if_in_octets_down = false; + $select_if_out_octets_up = false; + $select_if_out_octets_down = false; + $select_if_usage_module_data_in_up = false; + $select_if_usage_module_data_in_down = false; + $select_if_usage_module_data_out_up = false; + $select_if_usage_module_data_out_down = false; + $select_if_last_data_up = false; + $select_if_last_data_down = false; + break; + } + + if ($sec === 'estado') { + $agent_id = (int) get_parameter('id_agente', 0); + + $sort_url_page = 'ver_agente'; + $sec = 'estado'; + $query_params = '&id_agente='.$agent_id.'&tab=interface'; + } else { + $sort_url_page = 'interface_view'; + $sec = 'view'; + $query_params = ''; + } + + // Build URLs to sort the table. + $url_if_agent_name = 'index.php?sec='.$sec.'&sec2=operation/agentes/'.$sort_url_page.$query_params; + $url_if_name = 'index.php?sec='.$sec.'&sec2=operation/agentes/'.$sort_url_page.$query_params; + $url_if_speed = 'index.php?sec='.$sec.'&sec2=operation/agentes/'.$sort_url_page.$query_params; + $url_if_in_octets = 'index.php?sec='.$sec.'&sec2=operation/agentes/'.$sort_url_page.$query_params; + $url_if_out_octets = 'index.php?sec='.$sec.'&sec2=operation/agentes/'.$sort_url_page.$query_params; + $url_if_bandwidth_usage_in = 'index.php?sec='.$sec.'&sec2=operation/agentes/'.$sort_url_page.$query_params; + $url_if_bandwidth_usage_out = 'index.php?sec='.$sec.'&sec2=operation/agentes/'.$sort_url_page.$query_params; + $last_data = 'index.php?sec='.$sec.'&sec2=operation/agentes/'.$sort_url_page.$query_params; + + $selected_agents_query_str = ''; + $selected_interfaces_query_str = ''; + + foreach ($selected_agents as $key => $agent) { + $selected_agents_query_str .= '&selected_agents['.$key.']='.$agent; + } + + foreach ($selected_interfaces as $key => $interface) { + $selected_interfaces_query_str .= '&selected_interfaces['.$key.']='.$interface; + } + + $url_if_agent_name .= $selected_agents_query_str.'&'.$selected_interfaces_query_str; + $url_if_name .= $selected_agents_query_str.'&'.$selected_interfaces_query_str; + $url_if_speed .= $selected_agents_query_str.'&'.$selected_interfaces_query_str; + $url_if_in_octets .= $selected_agents_query_str.'&'.$selected_interfaces_query_str; + $url_if_out_octets .= $selected_agents_query_str.'&'.$selected_interfaces_query_str; + $url_if_bandwidth_usage_in .= $selected_agents_query_str.'&'.$selected_interfaces_query_str; + $url_if_bandwidth_usage_out .= $selected_agents_query_str.'&'.$selected_interfaces_query_str; + $last_data .= $selected_agents_query_str.'&'.$selected_interfaces_query_str; + + $url_if_agent_name .= '&recursion='.$recursion; + $url_if_name .= '&recursion='.$recursion; + $url_if_speed .= '&recursion='.$recursion; + $url_if_in_octets .= '&recursion='.$recursion; + $url_if_out_octets .= '&recursion='.$recursion; + $url_if_bandwidth_usage_in .= '&recursion='.$recursion; + $url_if_bandwidth_usage_out .= '&recursion='.$recursion; + $last_data .= '&recursion='.$recursion; + + $url_if_agent_name .= '&sort_field=if_agent_name&sort='; + $url_if_name .= '&sort_field=if_name&sort='; + $url_if_speed .= '&sort_field=if_speed_data&sort='; + $url_if_in_octets .= '&sort_field=if_in_octets&sort='; + $url_if_out_octets .= '&sort_field=if_out_octets&sort='; + $url_if_bandwidth_usage_in .= '&sort_field=if_usage_module_data_in&sort='; + $url_if_bandwidth_usage_out .= '&sort_field=if_usage_module_data_out&sort='; + $last_data .= '&sort_field=if_last_data&sort='; + + if (empty($data) === false) { + $table = new StdClass(); + $table->cellpadding = 0; + $table->cellspacing = 0; + $table->width = '100%'; + $table->class = 'info_table'; + $table->head = []; + $table->data = []; + $table->size = []; + $table->align = []; + + $show_fields = explode(',', $config['status_monitor_fields']); + + if ($sec === 'view') { + $table->head[0] = __('Agent'); + $table->head[0] .= ui_get_sorting_arrows( + $url_if_agent_name.'up', + $url_if_agent_name.'down', + $select_if_agent_name_up, + $select_if_agent_name_down + ); + } + + $table->head[1] = __('IfName'); + $table->head[1] .= ui_get_sorting_arrows( + $url_if_name.'up', + $url_if_name.'down', + $select_if_name_up, + $select_if_name_down + ); + + $table->head[2] = __('Status'); + + $table->head[3] = __('IfSpeed'); + $table->head[3] .= ui_get_sorting_arrows( + $url_if_speed.'up', + $url_if_speed.'down', + $select_if_speed_data_up, + $select_if_speed_data_down + ); + + $table->head[4] = __('IfInOctets'); + $table->head[4] .= ui_get_sorting_arrows( + $url_if_in_octets.'up', + $url_if_in_octets.'down', + $select_if_in_octets_up, + $select_if_in_octets_down + ); + + $table->head[5] = __('IfOutOctets'); + $table->head[5] .= ui_get_sorting_arrows( + $url_if_out_octets.'up', + $url_if_out_octets.'down', + $select_if_out_octets_up, + $select_if_out_octets_down + ); + + $table->head[6] = __('% Bandwidth usage (in)'); + $table->head[6] .= ui_get_sorting_arrows( + $url_if_bandwidth_usage_in.'up', + $url_if_bandwidth_usage_in.'down', + $select_if_usage_module_data_in_up, + $select_if_usage_module_data_in_down + ); + + $table->head[7] = __('% Bandwidth usage (out)'); + $table->head[7] .= ui_get_sorting_arrows( + $url_if_bandwidth_usage_out.'up', + $url_if_bandwidth_usage_out.'down', + $select_if_usage_module_data_out_up, + $select_if_usage_module_data_out_down + ); + + $table->head[8] = __('Last data'); + $table->head[8] .= ui_get_sorting_arrows( + $last_data.'up', + $last_data.'down', + $select_if_last_data_up, + $select_if_last_data_down + ); + + $loop_index = 0; + $table_data = []; + + $interfaces_array = array_column($data, 'interfaces'); + $agents = array_column($data, 'name'); + + $all_interfaces = []; + + foreach ($data as $value) { + $agent_alias = agents_get_alias($value['name']); + + foreach ($value['interfaces'] as $if_name => $interface) { + $interface['agent_id'] = $value['name']; + $interface['agent_alias'] = $agent_alias; + $interface['if_name'] = $if_name; + $all_interfaces[$if_name] = $interface; + } + } + + if ($sec === 'estado' + && is_array($selected_interfaces) === true + && empty($selected_interfaces) === true + ) { + $filtered_interfaces = $all_interfaces; + } else { + // Filter interfaces array. + $filtered_interfaces = array_filter( + $all_interfaces, + function ($interface) use ($selected_interfaces) { + return in_array( + $interface['status_module_id'], + $selected_interfaces + ) === true; + } + ); + } + + $data = []; + + foreach ($filtered_interfaces as $if_name => $agent_interfaces) { + // Get usage modules. + $usage_module_in = db_get_row( + 'tagente_modulo', + 'nombre', + $if_name.'_inUsage' + ); + $usage_module_out = db_get_row( + 'tagente_modulo', + 'nombre', + $if_name.'_outUsage' + ); + + $usage_module_id_in = $usage_module_in['id_agente_modulo']; + $usage_module_id_out = $usage_module_out['id_agente_modulo']; + $usage_module_description = $usage_module_in['descripcion']; + + // Get usage modules data. + $usage_module_data_in = modules_get_previous_data( + $usage_module_id_in, + time() + ); + + $usage_module_data_out = modules_get_previous_data( + $usage_module_id_out, + time() + ); + + // Extract ifSpeed from description of usage module. + $if_speed_str = strstr($usage_module_description, 'Speed:'); + $if_speed_str = substr($if_speed_str, 0, -1); + $if_speed_str = explode(':', $if_speed_str)[1]; + + $matches = []; + preg_match_all('/\d+/', $if_speed_str, $matches); + + $if_speed_value = $matches[0][0]; + + // Transform ifSpeed unit. + $divisor = 1000; + $counter = 0; + while ($if_speed_value >= $divisor) { + if ($if_speed_value >= $divisor) { + $if_speed_value = ($if_speed_value / $divisor); + } + + $counter++; + } + + $if_speed_unit = 'bps'; + + switch ($counter) { + case 1: + $if_speed_unit = 'Kbps'; + break; + + case 2: + $if_speed_unit = 'Mbps'; + break; + + case 3: + $if_speed_unit = 'Gbps'; + break; + + case 4: + $if_speed_unit = 'Tbps'; + break; + + default: + $if_speed_unit = 'bps'; + break; + } + + // Get in and out traffic. + $ifInOctets = modules_get_previous_data( + $agent_interfaces['traffic']['in'], + time() + ); + $ifOutOctets = modules_get_previous_data( + $agent_interfaces['traffic']['out'], + time() + ); + + // Get last data timestamp. + $timestamps_array = array_merge( + array_column(ifInOctets, 'utimestamp'), + array_column(ifOutOctets, 'utimestamp') + ); + + if ($sec === 'view') { + $table_data[$loop_index]['if_agent_name'] = '
'.$agent_interfaces['agent_alias'].''; + } + + $table_data[$loop_index]['if_name'] = $agent_interfaces['if_name']; + $table_data[$loop_index]['if_status_image'] = $agent_interfaces['status_image']; + $table_data[$loop_index]['if_speed_data'] = ($if_speed_value === null) ? __('N/A') : $if_speed_value.' '.$if_speed_unit; + $table_data[$loop_index]['if_in_octets'] = ($ifInOctets['datos'] === null) ? __('N/A') : $ifInOctets['datos']; + $table_data[$loop_index]['if_out_octets'] = ($ifOutOctets['datos'] === null) ? __('N/A') : $ifOutOctets['datos']; + $table_data[$loop_index]['if_usage_module_data_in'] = ($usage_module_data_in['datos'] === null) ? __('N/A') : $usage_module_data_in['datos']; + $table_data[$loop_index]['if_usage_module_data_out'] = ($usage_module_data_out['datos'] === null) ? __('N/A') : $usage_module_data_out['datos']; + $table_data[$loop_index]['if_last_data'] = human_time_comparation( + max( + $ifInOctets['utimestamp'], + $ifOutOctets['utimestamp'] + ) + ); + + $loop_index++; + } + + // Sort array of previously processed table values. + if ($sort === 'up') { + $res = usort( + $table_data, + function ($a, $b) use ($sort_field) { + if ($a[$sort_field] > $b[$sort_field]) { + return 1; + } else { + return -1; + } + } + ); + } + + if ($sort === 'down') { + $res = usort( + $table_data, + function ($a, $b) use ($sort_field) { + if ($b[$sort_field] > $a[$sort_field]) { + return 1; + } else { + return -1; + } + } + ); + } + + $sliced_table_data = array_slice( + $table_data, + $pagination_index, + $config['block_size'] + ); + + foreach ($sliced_table_data as $value) { + array_push($table->data, array_values($value)); + } + + html_print_table($table); + + if (count($selected_interfaces) > $config['block_size']) { + ui_pagination(count($selected_interfaces), false, $pagination_index, 0, false, 'offset', true, 'pagination-bottom'); + } + } else { + ui_print_info_message(['no_close' => true, 'message' => __('No search parameters')]); + } +} diff --git a/pandora_console/operation/agentes/interface_view.php b/pandora_console/operation/agentes/interface_view.php new file mode 100644 index 0000000000..a24788edd0 --- /dev/null +++ b/pandora_console/operation/agentes/interface_view.php @@ -0,0 +1,259 @@ + $agent_id]; + +// Autosearch if search parameters are different from those by default. +if (empty($selected_agents) === false || empty($selected_interfaces) === false + || $sort_field !== '' || $sort !== 'none' || $sec === 'estado' +) { + $autosearch = true; +} + +print_filters($sec); + +$result = false; + +if ($autosearch === true) { + if ($sec === 'estado') { + $result = agents_get_network_interfaces(false, $agent_filter); + } else { + $result = agents_get_network_interfaces($selected_agents); + } + + if ($result === false) { + $result = []; + } else { + ui_pagination( + count($selected_interfaces), + false, + $offset, + 0, + false, + 'offset', + true + ); + } +} + +print_table( + $result, + $selected_agents, + $selected_interfaces, + $sort_field, + $sort, + $offset, + $sec +); + +?> + diff --git a/pandora_console/operation/agentes/ver_agente.php b/pandora_console/operation/agentes/ver_agente.php index 01a21bf19d..b220362a37 100644 --- a/pandora_console/operation/agentes/ver_agente.php +++ b/pandora_console/operation/agentes/ver_agente.php @@ -1231,7 +1231,30 @@ if ($tab == 'main') { $maintab['active'] = false; } +// Interfaces tab. +$agent_interfaces = agents_get_network_interfaces( + false, + ['id_agente' => $id_agente] +); +$agent_interfaces_count = count($agent_interfaces[$id_agente]['interfaces']); + +if ($agent_interfaces_count > 0) { + $interfacetab['text'] = ''.html_print_image( + 'images/link.png', + true, + [ + 'title' => __('Interfaces'), + 'class' => 'invert_filter', + ] + ).''; + + if ($tab == 'interface') { + $interfacetab['active'] = true; + } else { + $interfacetab['active'] = false; + } +} // Alert tab. $alerttab['text'] = ''.html_print_image( @@ -1512,6 +1535,7 @@ $onheader = [ 'manage' => $managetab, 'main' => $maintab, 'alert' => $alerttab, + 'interface' => $interfacetab, 'inventory' => $inventorytab, 'collection' => $collectiontab, 'gis' => $gistab, @@ -1630,6 +1654,10 @@ switch ($tab) { $tab_name = ''; break; + case 'interface': + $tab_name = 'Interfaces'; + break; + case 'alert': $tab_name = 'Alerts'; break; @@ -1760,6 +1788,10 @@ switch ($tab) { include 'datos_agente.php'; break; + case 'interface': + include 'interface_view.php'; + break; + case 'alert': include 'alerts_status.php'; break; diff --git a/pandora_console/operation/menu.php b/pandora_console/operation/menu.php index d43829b753..9013cd7c32 100644 --- a/pandora_console/operation/menu.php +++ b/pandora_console/operation/menu.php @@ -58,6 +58,9 @@ if (check_acl($config['id_user'], 0, 'AR')) { $sub2['operation/agentes/status_monitor']['text'] = __('Monitor detail'); $sub2['operation/agentes/status_monitor']['refr'] = 0; + $sub2['operation/agentes/interface_view']['text'] = __('Interface view'); + $sub2['operation/agentes/interface_view']['refr'] = 0; + enterprise_hook('tag_view_submenu'); $sub2['operation/agentes/alerts_status']['text'] = __('Alert detail'); From 3ab970ced9a2e49a65ecb6654c9a3f62398cc968 Mon Sep 17 00:00:00 2001 From: marcos Date: Tue, 20 Apr 2021 12:41:21 +0200 Subject: [PATCH 06/93] fixed visual error on tm --- pandora_console/include/styles/pandora.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index 740e5c6053..2e9b46cc8d 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -8500,3 +8500,6 @@ div.stat-win-spinner img { .font_11pt { font-size: 11pt; } +.align-left-important { + text-align: left !important; +} From b922de7a8ea46528ae53eb5def50cb1adf4c18eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Gonz=C3=A1lez?= Date: Thu, 22 Apr 2021 17:10:59 +0200 Subject: [PATCH 07/93] Fixed visual issues --- pandora_console/include/styles/agent_alerts.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pandora_console/include/styles/agent_alerts.css b/pandora_console/include/styles/agent_alerts.css index 7a140a1704..8726228b33 100644 --- a/pandora_console/include/styles/agent_alerts.css +++ b/pandora_console/include/styles/agent_alerts.css @@ -26,6 +26,10 @@ justify-content: center; } +#img-full-screen { + width: 12em; +} + #full_screen_refresh_box, #slc-refresh-rate, #img-full-screen { @@ -45,6 +49,7 @@ .agent_alerts_header_pure { position: absolute; + z-index: 500; } .agents_alerts_header form > ul > li { From 1d472ec4806b47387a551d3673d5a77b864cb4ee Mon Sep 17 00:00:00 2001 From: Daniel Maya Date: Thu, 29 Apr 2021 08:55:16 +0200 Subject: [PATCH 08/93] #7455 Fixed check_process --- pandora_console/godmode/servers/modificar_server.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandora_console/godmode/servers/modificar_server.php b/pandora_console/godmode/servers/modificar_server.php index 90c9130d4d..d1ac51b279 100644 --- a/pandora_console/godmode/servers/modificar_server.php +++ b/pandora_console/godmode/servers/modificar_server.php @@ -386,10 +386,10 @@ function check_process (id_server) { parameters, function (data) { if (data['correct']) { - $("#check_exec_server img").attr("src", ); + $("#check_exec_server img").attr("src", "images/dot_green.png"); } else { - $("#check_exec_server img").attr("src", ); + $("#check_exec_server img").attr("src", "images/dot_red.png"); $("#check_error_message").empty(); $("#check_error_message").append("" + data['message'] + ""); } From 4aea645735fb45c3eec63a6fe6409a695be14e8d Mon Sep 17 00:00:00 2001 From: Calvo Date: Thu, 29 Apr 2021 11:15:20 +0200 Subject: [PATCH 09/93] Fixed visual bug on user creation error --- pandora_console/godmode/users/configure_user.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pandora_console/godmode/users/configure_user.php b/pandora_console/godmode/users/configure_user.php index 6948368eb1..31ca0897d0 100644 --- a/pandora_console/godmode/users/configure_user.php +++ b/pandora_console/godmode/users/configure_user.php @@ -439,6 +439,12 @@ if ($create_user) { if ($result) { $res = save_pass_history($id, $password_new); + } else { + $is_err = true; + $user_info = $values; + $password_new = ''; + $password_confirm = ''; + $new_user = true; } db_pandora_audit( From 588e06d35721f25cddabaf5403b1904d40b6b675 Mon Sep 17 00:00:00 2001 From: Daniel Maya Date: Thu, 29 Apr 2021 12:45:35 +0200 Subject: [PATCH 10/93] #7344 fixed select --- pandora_console/include/styles/meta_dashboards.css | 8 ++++++++ pandora_console/views/dashboard/header.php | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/pandora_console/include/styles/meta_dashboards.css b/pandora_console/include/styles/meta_dashboards.css index 1b24b3bce5..d2d7f902a3 100644 --- a/pandora_console/include/styles/meta_dashboards.css +++ b/pandora_console/include/styles/meta_dashboards.css @@ -22,3 +22,11 @@ div#page { right: 50px; top: 20px; } + +.select-dashboard-width { + width: 110%; +} + +#menu_tab li.nomn form#form-select-dashboard { + margin-top: 0px !important; +} diff --git a/pandora_console/views/dashboard/header.php b/pandora_console/views/dashboard/header.php index 64626056dd..c828740565 100644 --- a/pandora_console/views/dashboard/header.php +++ b/pandora_console/views/dashboard/header.php @@ -189,7 +189,7 @@ $combo_dashboard['text'] .= html_print_select( true, false, true, - '', + 'select-dashboard-width', false, '' ); From 9ab027b2868ae6d9476a42bf692f431c63825dd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Gonz=C3=A1lez?= Date: Thu, 29 Apr 2021 13:28:03 +0200 Subject: [PATCH 11/93] WIP: Upload --- pandora_console/extensions/agents_modules.php | 50 +++++++--- pandora_console/extensions/module_groups.php | 16 +++- .../extensions/realtime_graphs.php | 15 ++- .../extensions/resource_registration.php | 9 +- .../general/first_task/cluster_builder.php | 14 ++- .../godmode/agentes/modificar_agente.php | 53 ++++++++--- .../godmode/agentes/module_manager.php | 1 - .../agentes/module_manager_editor_common.php | 7 +- .../godmode/reporting/map_builder.php | 62 ++++++++---- .../reporting/visual_console_favorite.php | 65 +++++++++---- .../godmode/snmpconsole/snmp_filters.php | 27 +++++- .../snmpconsole/snmp_trap_generator.php | 17 +++- .../include/class/AgentsAlerts.class.php | 39 +++----- pandora_console/include/functions_ui.php | 95 +++++++++++++++++++ .../operation/agentes/alerts_status.php | 19 +++- .../operation/agentes/estado_agente.php | 54 ++++++++--- .../operation/agentes/group_view.php | 56 ++++++++--- .../operation/agentes/status_monitor.php | 60 ++++++++---- .../operation/agentes/tactical.php | 55 ++++++++--- .../operation/dashboard/dashboard.php | 4 +- .../operation/snmpconsole/snmp_browser.php | 22 +++-- .../snmpconsole/snmp_mib_uploader.php | 61 +++++++++--- 22 files changed, 598 insertions(+), 203 deletions(-) diff --git a/pandora_console/extensions/agents_modules.php b/pandora_console/extensions/agents_modules.php index 0abde09010..f93dec02a4 100644 --- a/pandora_console/extensions/agents_modules.php +++ b/pandora_console/extensions/agents_modules.php @@ -1,16 +1,29 @@ '', + 'label' => __('Monitoring'), + ], + [ + 'link' => '', + 'label' => __('Views'), + ], + ] ); + echo ''; echo ''; echo "'; diff --git a/pandora_console/extensions/module_groups.php b/pandora_console/extensions/module_groups.php index 3b9670a8e0..4e1f0e791c 100644 --- a/pandora_console/extensions/module_groups.php +++ b/pandora_console/extensions/module_groups.php @@ -196,7 +196,6 @@ function mainModuleGroups() ON ta.id_agente = tam.id_agente WHERE ta.disabled = 0 AND tam.disabled = 0 - AND tam.id_modulo <> 0 AND tam.delete_pending = 0 AND ta.id_grupo IN (%s) GROUP BY tam.id_agente_modulo @@ -246,13 +245,24 @@ function mainModuleGroups() $array_data[$value['id_grupo']][$value['id_mg']] = $value; } - ui_print_page_header( + // Header. + ui_print_standard_header( __('Combined table of agent group and module group'), 'images/module_group.png', false, '', false, - '' + [], + [ + [ + 'link' => '', + 'label' => __('Monitoring'), + ], + [ + 'link' => '', + 'label' => __('Views'), + ], + ] ); echo "
".$fullscreen['text'].'
diff --git a/pandora_console/extensions/realtime_graphs.php b/pandora_console/extensions/realtime_graphs.php index 86fcfc4f0e..51d987ae25 100644 --- a/pandora_console/extensions/realtime_graphs.php +++ b/pandora_console/extensions/realtime_graphs.php @@ -49,13 +49,24 @@ function pandora_realtime_graphs() $hide_header = get_parameter('hide_header', 0); if ($hide_header === 0) { - ui_print_page_header( + // Header. + ui_print_standard_header( __('Realtime graphs'), 'images/extensions.png', false, 'real_time_view', false, - $onheader + $onheader, + [ + [ + 'link' => '', + 'label' => __('Monitoring'), + ], + [ + 'link' => '', + 'label' => __('Views'), + ], + ] ); } diff --git a/pandora_console/extensions/resource_registration.php b/pandora_console/extensions/resource_registration.php index 950f4e2b81..2f904dbf9f 100755 --- a/pandora_console/extensions/resource_registration.php +++ b/pandora_console/extensions/resource_registration.php @@ -1096,13 +1096,8 @@ function resource_registration_extension_main() } $xml = simplexml_load_file($_FILES['resource_upload']['tmp_name'], null, LIBXML_NOCDATA); - if ($xml === false) { - ui_print_error_message( - __('Error uploading resource. Check if the selected file is a valid resource template in .ptr format') - ); - } else { - process_upload_xml($xml); - } + + process_upload_xml($xml); } diff --git a/pandora_console/general/first_task/cluster_builder.php b/pandora_console/general/first_task/cluster_builder.php index 08ea618cce..157bdce0d7 100644 --- a/pandora_console/general/first_task/cluster_builder.php +++ b/pandora_console/general/first_task/cluster_builder.php @@ -24,12 +24,20 @@ if (! check_acl($config['id_user'], 0, 'AR') && ! check_acl($config['id_user'], return; } -\ui_print_page_header( - __('Monitoring').' » '.__('Clusters'), +// Header. +ui_print_standard_header( + __('Clusters'), 'images/chart.png', false, '', - false + false, + [], + [ + [ + 'link' => '', + 'label' => __('Monitoring'), + ], + ] ); ui_require_css_file('first_task'); diff --git a/pandora_console/godmode/agentes/modificar_agente.php b/pandora_console/godmode/agentes/modificar_agente.php index 6d9516bad7..807635bd80 100644 --- a/pandora_console/godmode/agentes/modificar_agente.php +++ b/pandora_console/godmode/agentes/modificar_agente.php @@ -1,17 +1,32 @@ $viewtab]; // Header. -ui_print_page_header( +ui_print_standard_header( __('Agents defined in %s', get_product_name()), 'images/agent.png', false, '', true, - $onheader + $onheader, + [ + [ + 'link' => '', + 'label' => __('Resources'), + ], + [ + 'link' => '', + 'label' => __('Manage agents'), + ], + ] ); if (is_central_policies_on_node()) { diff --git a/pandora_console/godmode/agentes/module_manager.php b/pandora_console/godmode/agentes/module_manager.php index d8dd0eeef2..91c6395b96 100644 --- a/pandora_console/godmode/agentes/module_manager.php +++ b/pandora_console/godmode/agentes/module_manager.php @@ -1072,7 +1072,6 @@ foreach ($modules as $module) { [ 'alt' => __('Enable module'), 'title' => __('Enable module'), - 'class' => 'invert_filter_important', ] ).''; } else { diff --git a/pandora_console/godmode/agentes/module_manager_editor_common.php b/pandora_console/godmode/agentes/module_manager_editor_common.php index 1a4577c4ee..7e9f29f2eb 100644 --- a/pandora_console/godmode/agentes/module_manager_editor_common.php +++ b/pandora_console/godmode/agentes/module_manager_editor_common.php @@ -115,12 +115,7 @@ function add_component_selection($id_network_component_type) '', '---'.__('Manual setup').'---', 0, - true, - false, - true, - '', - false, - 'width: 460px; ' + true ); $data[1] .= ''; $data[1] .= '