diff --git a/pandora_console/images/module_event_critical.png b/pandora_console/images/module_event_critical.png new file mode 100644 index 0000000000..d92fd2cf07 Binary files /dev/null and b/pandora_console/images/module_event_critical.png differ diff --git a/pandora_console/images/module_event_ok.png b/pandora_console/images/module_event_ok.png new file mode 100644 index 0000000000..d92fd2cf07 Binary files /dev/null and b/pandora_console/images/module_event_ok.png differ diff --git a/pandora_console/images/module_event_unknown.png b/pandora_console/images/module_event_unknown.png new file mode 100644 index 0000000000..d92fd2cf07 Binary files /dev/null and b/pandora_console/images/module_event_unknown.png differ diff --git a/pandora_console/images/module_event_warning.png b/pandora_console/images/module_event_warning.png new file mode 100644 index 0000000000..d92fd2cf07 Binary files /dev/null and b/pandora_console/images/module_event_warning.png differ diff --git a/pandora_console/include/ajax/custom_fields.php b/pandora_console/include/ajax/custom_fields.php index a403f77748..9ceb89de5f 100644 --- a/pandora_console/include/ajax/custom_fields.php +++ b/pandora_console/include/ajax/custom_fields.php @@ -65,6 +65,7 @@ if (check_login()) { } } + if ($get_custom_fields_data) { $name_custom_fields = get_parameter('name_custom_fields', 0); $array_custom_fields_data = get_custom_fields_data($name_custom_fields); @@ -110,30 +111,51 @@ if (check_login()) { // Table temporary for save array in table // by order and search custom_field data. - $table_temporary = 'CREATE TEMPORARY TABLE temp_custom_fields ( - id_server int(10), - id_agent int(10), - name_custom_fields varchar(2048), - critical_count int, - warning_count int, - unknown_count int, - notinit_count int, - normal_count int, - total_count int, - `status` int(2), - KEY `data_index_temp_1` (`id_server`, `id_agent`) - )'; - db_process_sql($table_temporary); + if (is_metaconsole() === true) { + $table_temporary = 'CREATE TEMPORARY TABLE temp_custom_fields ( + id_server int(10), + id_agent int(10), + name_custom_fields varchar(2048), + critical_count int, + warning_count int, + unknown_count int, + notinit_count int, + normal_count int, + total_count int, + `status` int(2), + KEY `data_index_temp_1` (`id_server`, `id_agent`) + )'; + } else { + $table_temporary = 'CREATE TEMPORARY TABLE temp_custom_fields ( + id_agent int(10), + name_custom_fields varchar(2048), + critical_count int, + warning_count int, + unknown_count int, + notinit_count int, + normal_count int, + total_count int, + `status` int(2), + KEY `data_index_temp_1` ( `id_agent`) + )'; + } + + $resul_tab_temp = db_process_sql($table_temporary); // Insert values array in table temporary. $values_insert = []; foreach ($indexed_descriptions as $key => $value) { - $values_insert[] = '('.$value['id_server'].', '.$value['id_agente'].", '".$value['description']."', '".$value['critical_count']."', '".$value['warning_count']."', '".$value['unknown_count']."', '".$value['notinit_count']."', '".$value['normal_count']."', '".$value['total_count']."', ".$value['status'].')'; + if (is_metaconsole() === true) { + $values_insert[] = '('.$value['id_server'].', '.$value['id_agente'].", '".$value['description']."', '".$value['critical_count']."', '".$value['warning_count']."', '".$value['unknown_count']."', '".$value['notinit_count']."', '".$value['normal_count']."', '".$value['total_count']."', ".$value['status'].')'; + } else { + $values_insert[] = '('.$value['id_agente'].", '".$value['description']."', '".$value['critical_count']."', '".$value['warning_count']."', '".$value['unknown_count']."', '".$value['notinit_count']."', '".$value['normal_count']."', '".$value['total_count']."', ".$value['status'].')'; + } } $values_insert_implode = implode(',', $values_insert); $query_insert = 'INSERT INTO temp_custom_fields VALUES '.$values_insert_implode; - db_process_sql($query_insert); + + $result_temp = db_process_sql($query_insert); // Search table for alias, custom field data, server_name, direction. $search_query = ''; @@ -199,41 +221,17 @@ if (check_login()) { } // Query all fields result. - $query = sprintf( - 'SELECT - tma.id_agente, - tma.id_tagente, - tma.id_tmetaconsole_setup, - tma.alias, - tma.direccion, - tma.server_name, - temp.name_custom_fields, - temp.status - FROM tmetaconsole_agent tma - INNER JOIN temp_custom_fields temp - ON temp.id_agent = tma.id_tagente - AND temp.id_server = tma.id_tmetaconsole_setup - WHERE tma.disabled = 0 - %s - %s - %s - %s - LIMIT %d OFFSET %d - ', - $search_query, - $status_agent_search, - $status_module_search, - $order_by, - $length, - $start - ); - - $result = db_get_all_rows_sql($query); - - // Query count. - $query_count = sprintf( - 'SELECT - COUNT(tma.id_agente) AS `count` + if (is_metaconsole() === true) { + $query = sprintf( + 'SELECT + tma.id_agente, + tma.id_tagente, + tma.id_tmetaconsole_setup, + tma.alias, + tma.direccion, + tma.server_name, + temp.name_custom_fields, + temp.status FROM tmetaconsole_agent tma INNER JOIN temp_custom_fields temp ON temp.id_agent = tma.id_tagente @@ -242,16 +240,87 @@ if (check_login()) { %s %s %s + %s + LIMIT %d OFFSET %d ', - $search_query, - $status_agent_search, - $status_module_search - ); + $search_query, + $status_agent_search, + $status_module_search, + $order_by, + $length, + $start + ); + } else { + $query = sprintf( + 'SELECT + tma.id_agente, + tma.alias, + tma.direccion, + tma.server_name, + temp.name_custom_fields, + temp.status + FROM tagente as tma + INNER JOIN temp_custom_fields temp + ON temp.id_agent = tma.id_agente + WHERE tma.disabled = 0 + %s + %s + %s + %s + LIMIT %d OFFSET %d + ', + $search_query, + $status_agent_search, + $status_module_search, + $order_by, + $length, + $start + ); + } + + $result = db_get_all_rows_sql($query); + // Query count. + if (is_metaconsole() === true) { + $query_count = sprintf( + 'SELECT + COUNT(tma.id_agente) AS `count` + FROM tmetaconsole_agent tma + INNER JOIN temp_custom_fields temp + ON temp.id_agent = tma.id_tagente + AND temp.id_server = tma.id_tmetaconsole_setup + WHERE tma.disabled = 0 + %s + %s + %s + ', + $search_query, + $status_agent_search, + $status_module_search + ); + } else { + $query_count = sprintf( + 'SELECT + COUNT(tma.id_agente) AS `count` + FROM tagente tma + INNER JOIN temp_custom_fields temp + ON temp.id_agent = tma.id_agente + WHERE tma.disabled = 0 + %s + %s + %s + ', + $search_query, + $status_agent_search, + $status_module_search + ); + } $count = db_get_sql($query_count); - // For link nodes. - $array_nodes = metaconsole_get_connections(); + if (is_metaconsole() === true) { + $array_nodes = metaconsole_get_connections(); + } + if (isset($array_nodes) && is_array($array_nodes)) { $hash_array_nodes = []; foreach ($array_nodes as $key => $server) { @@ -280,19 +349,24 @@ if (check_login()) { $data = []; foreach ($result as $values) { $image_status = agents_get_image_status($values['status']); - // Link nodes. - $agent_link = ''; + if (is_metaconsole() === true) { + $agent_link = ''; + $agent_alias = ui_print_truncate_text( + $values['alias'], + 'agent_small', + false, + true, + true, + '[…]', + 'font-size:7.5pt;' + ); + } else { + $agent_link = ''; + $agent_alias = $values['alias']; + } + - $agent_alias = ui_print_truncate_text( - $values['alias'], - 'agent_small', - false, - true, - true, - '[…]', - 'font-size:7.5pt;' - ); if (can_user_access_node()) { $agent = $agent_link.''.$agent_alias.''; diff --git a/pandora_console/include/functions_custom_fields.php b/pandora_console/include/functions_custom_fields.php index 3632f9511c..9ce92a0c78 100644 --- a/pandora_console/include/functions_custom_fields.php +++ b/pandora_console/include/functions_custom_fields.php @@ -613,8 +613,198 @@ function agent_counters_custom_fields($filters) $final_result['indexed_descriptions'] = $data; } else { - // TODO. - $final_result = false; + $result_meta = []; + $data = []; + + $query = sprintf( + "SELECT tcd.description AS name_data, + SUM(IF($agent_state_total, 1, 0)) AS a_agents, + SUM(IF($agent_state_critical, 1, 0)) AS a_critical, + SUM(IF($agent_state_warning, 1, 0)) AS a_warning, + SUM(IF($agent_state_unknown, 1, 0)) AS a_unknown, + SUM(IF($agent_state_normal, 1, 0)) AS a_normal, + SUM(IF($agent_state_notinit, 1, 0)) AS a_not_init, + SUM(tagent_counters.mm_normal) AS m_normal, + SUM(tagent_counters.mm_critical) AS m_critical, + SUM(tagent_counters.mm_warning) AS m_warning, + SUM(tagent_counters.mm_unknown) AS m_unknown, + SUM(tagent_counters.mm_not_init) AS m_not_init, + SUM(tagent_counters.mm_total) AS m_total + FROM tagent_custom_data tcd + INNER JOIN tagent_custom_fields tcf + ON tcd.id_field = tcf.id_field + INNER JOIN ( + SELECT ta.id_agente, + ta.total_count AS c_m_total, + SUM( IF(tae.estado = 0, 1, 0) ) AS mm_normal, + SUM( IF(tae.estado = 1, 1, 0) ) AS mm_critical, + SUM( IF(tae.estado = 2, 1, 0) ) AS mm_warning, + SUM( IF(tae.estado = 3, 1, 0) ) AS mm_unknown, + SUM( IF(tae.estado = 4 OR tae.estado = 5, 1, 0) ) AS mm_not_init, + COUNT(tam.id_agente_modulo) AS mm_total + FROM tagente ta + LEFT JOIN tagent_secondary_group tasg + ON ta.id_agente = tasg.id_agent + INNER JOIN tagente_modulo tam + ON ta.id_agente = tam.id_agente + INNER JOIN tagente_estado tae + ON tam.id_agente = tae.id_agente + AND tam.id_agente_modulo = tae.id_agente_modulo + WHERE ta.disabled = 0 + AND tam.disabled = 0 + %s + %s + %s + %s + GROUP by ta.id_agente + %s + ) AS tagent_counters + ON tcd.id_agent = tagent_counters.id_agente + INNER JOIN tagente ta + ON ta.id_agente = tagent_counters.id_agente + WHERE tcf.name = '%s' + AND tcd.description <> '' + %s + GROUP BY tcd.description", + $groups_and, + $and_status, + $and_module_search, + $and_module_status, + $empty_agents_count, + $custom_field_name, + $custom_data_and + ); + + $result_meta[] = db_get_all_rows_sql($query); + + $query_data = sprintf( + "SELECT + tcd.description, + ta.id_agente, + %d AS id_server, + (CASE + WHEN ta.critical_count > 0 + THEN 1 + WHEN ta.critical_count = 0 + AND ta.warning_count > 0 + THEN 2 + WHEN ta.critical_count = 0 + AND ta.warning_count = 0 + AND ta.unknown_count > 0 + THEN 3 + WHEN ta.critical_count = 0 + AND ta.warning_count = 0 + AND ta.unknown_count = 0 + AND ta.notinit_count <> ta.total_count + THEN 0 + WHEN ta.total_count = ta.notinit_count + THEN 5 + ELSE 0 + END) AS `status`, + ta.critical_count, + ta.warning_count, + ta.unknown_count, + ta.notinit_count, + ta.normal_count, + ta.total_count + FROM tagente ta + LEFT JOIN tagent_secondary_group tasg + ON ta.id_agente = tasg.id_agent + INNER JOIN tagente_modulo tam + ON ta.id_agente = tam.id_agente + INNER JOIN tagente_estado tae + ON tam.id_agente = tae.id_agente + AND tam.id_agente_modulo = tae.id_agente_modulo + INNER JOIN tagent_custom_data tcd + ON tcd.id_agent = ta.id_agente + INNER JOIN tagent_custom_fields tcf + ON tcd.id_field = tcf.id_field + WHERE ta.disabled = 0 + AND tcf.name = '%s' + AND tcd.description <> '' + AND tam.disabled = 0 + %s + %s + %s + %s + %s + GROUP BY ta.id_agente + ", + $server_data['id'], + $custom_field_name, + $custom_data_and, + $groups_and, + $and_status, + $and_module_search, + $and_module_status + ); + + $node_result = db_get_all_rows_sql($query_data); + ; + if (empty($node_result)) { + $node_result = []; + } + + $data = array_merge($data, $node_result); + $final_result = []; + $array_data = []; + if (isset($result_meta) && is_array($result_meta)) { + // Initialize counters. + $final_result['counters_total'] = [ + 't_m_normal' => 0, + 't_m_critical' => 0, + 't_m_warning' => 0, + 't_m_unknown' => 0, + 't_m_not_init' => 0, + 't_m_alerts' => 0, + 't_m_total' => 0, + 't_a_critical' => 0, + 't_a_warning' => 0, + 't_a_unknown' => 0, + 't_a_normal' => 0, + 't_a_not_init' => 0, + 't_a_agents' => 0, + ]; + foreach ($result_meta as $k => $nodo) { + if (isset($nodo) && is_array($nodo)) { + foreach ($nodo as $key => $value) { + // Sum counters total. + $final_result['counters_total']['t_m_normal'] += $value['m_normal']; + $final_result['counters_total']['t_m_critical'] += $value['m_critical']; + $final_result['counters_total']['t_m_warning'] += $value['m_warning']; + $final_result['counters_total']['t_m_unknown'] += $value['m_unknown']; + $final_result['counters_total']['t_m_not_init'] += $value['m_not_init']; + $final_result['counters_total']['t_m_alerts'] += $value['m_alerts']; + $final_result['counters_total']['t_m_total'] += $value['m_total']; + $final_result['counters_total']['t_a_critical'] += $value['a_critical']; + $final_result['counters_total']['t_a_warning'] += $value['a_warning']; + $final_result['counters_total']['t_a_unknown'] += $value['a_unknown']; + $final_result['counters_total']['t_a_normal'] += $value['a_normal']; + $final_result['counters_total']['t_a_not_init'] += $value['a_not_init']; + $final_result['counters_total']['t_a_agents'] += $value['a_agents']; + + // Sum counters for data. + $array_data[$value['name_data']]['m_normal'] += $value['m_normal']; + $array_data[$value['name_data']]['m_critical'] += $value['m_critical']; + $array_data[$value['name_data']]['m_warning'] += $value['m_warning']; + $array_data[$value['name_data']]['m_unknown'] += $value['m_unknown']; + $array_data[$value['name_data']]['m_not_init'] += $value['m_not_init']; + $array_data[$value['name_data']]['m_alerts'] += $value['m_alerts']; + $array_data[$value['name_data']]['m_total'] += $value['m_total']; + $array_data[$value['name_data']]['a_critical'] += $value['a_critical']; + $array_data[$value['name_data']]['a_warning'] += $value['a_warning']; + $array_data[$value['name_data']]['a_unknown'] += $value['a_unknown']; + $array_data[$value['name_data']]['a_normal'] += $value['a_normal']; + $array_data[$value['name_data']]['a_not_init'] += $value['a_not_init']; + $array_data[$value['name_data']]['a_agents'] += $value['a_agents']; + } + } + } + + $final_result['counters_name'] = $array_data; + } + + $final_result['indexed_descriptions'] = $data; } return $final_result; diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index d4fec36d08..892c6fa40a 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -12341,3 +12341,71 @@ tr[id^="network_component-plugin-wmi-fields-dynamicMacroRow-"] input, tr[id^="network_component-plugin-snmp-fields-dynamicMacroRow-"] input { width: 100% !important; } + +form.cfv_status_agent { + margin: 0 auto; + display: flex; + justify-content: space-around; +} + +form.cfv_status_agent label { + display: block; + line-height: 35px; + height: 40px; + width: 19%; + -webkit-font-smoothing: antialiased; + margin-top: 10px; + color: #ffffff; + text-align: center; + cursor: pointer; + opacity: 0.3; + font-size: 13pt; +} + +form.cfv_status_agent label img { + vertical-align: middle; + margin-right: 8px; +} + +form.cfv_status_agent input[type="checkbox"] { + display: none; +} + +form.cfv_status_agent input:checked + label { + opacity: 1; +} + +form.cfv_status_agent input:checked + label:before { + content: "✓ "; +} + +/* --- Custom fields view --- */ +.custom_fields_view_layout { + margin-top: 15px; +} + +.custom_fields_view { + width: 30%; + float: left; + margin-left: 10px; + padding-right: 10px; + max-height: 890px; + overflow: auto; + background-color: #f9f9f9; +} + +.agents_custom_fields { + width: 100%; + + margin-bottom: 15px; + padding: 25px 5px; +} +div.agents_custom_fields #datatables_wrapper div.top, +div.agents_custom_fields #datatables_wrapper div.bottom { + background-color: #414141; + color: #ffffff; + border: none; + padding: 5px; + height: 38px; + width: 99%; +} diff --git a/pandora_console/operation/custom_fields/custom_fields_view.php b/pandora_console/operation/custom_fields/custom_fields_view.php new file mode 100644 index 0000000000..eb6184528f --- /dev/null +++ b/pandora_console/operation/custom_fields/custom_fields_view.php @@ -0,0 +1,1257 @@ + 'index.php?sec=estado&sec2=operation/custom_fields/custom_fields_view', + 'label' => __('Monitoring'), + ], + ] +); + +// ===================================================================== +// Includes +// ===================================================================== +enterprise_include_once('include/functions_metaconsole.php'); +require_once $config['homedir'].'/include/functions_custom_fields.php'; + +// ===================================================================== +// parameters +// ===================================================================== +$info_user = get_user_info($config['id_user']); +$group = get_parameter('group', 0); +$id_custom_fields = get_parameter('id_custom_fields', 0); +$id_custom_fields_data = get_parameter('id_custom_fields_data', -1); +$id_status = get_parameter('id_status', AGENT_MODULE_STATUS_NOT_NORMAL); +$module_search = get_parameter('module_search', ''); +$search = get_parameter('uptbutton', ''); +$id_filter = get_parameter('id_name', 0); +$recursion = get_parameter('recursion', 0); +$module_status = get_parameter('module_status', AGENT_MODULE_STATUS_NOT_NORMAL); + +// ===================================================================== +// Custom filter search +// ===================================================================== +if ($search != 'Show') { + if ($id_filter || $info_user['default_custom_view']) { + if ($id_filter) { + $filter_array = array_shift( + get_filters_custom_fields_view($id_filter) + ); + } else { + if ($info_user['default_custom_view']) { + $filter_array = array_shift( + get_filters_custom_fields_view( + $info_user['default_custom_view'] + ) + ); + } + } + + $group = $filter_array['id_group']; + $id_custom_fields = io_safe_input($filter_array['id_custom_field']); + $id_custom_fields_data = json_decode( + $filter_array['id_custom_fields_data'] + ); + $id_status = json_decode($filter_array['id_status']); + $module_search = $filter_array['module_search']; + $recursion = $filter_array['recursion']; + $module_status = json_decode($filter_array['module_status']); + } +} + +// ===================================================================== +// filters for search +// ===================================================================== +$filters = [ + 'group' => $group, + 'id_custom_fields' => $id_custom_fields, + 'id_custom_fields_data' => $id_custom_fields_data, + 'id_status' => $id_status, + 'module_search' => $module_search, + 'module_status' => $module_status, + 'block_size' => $config['block_size'], + 'recursion' => $recursion, +]; + +// ===================================================================== +// Table filters custom field +// ===================================================================== +$table = new StdClass(); +$table->width = '100%'; +$table->class = 'databox filters'; +$table->data = []; +$table->rowspan = []; +$table->colspan = []; + + +$array_custom_fields = get_custom_fields(false, true, true); + +if ($id_custom_fields) { + $array_custom_fields_data = get_custom_fields_data($id_custom_fields); +} else { + $array_custom_fields_data = []; +} + +$table->data[0][0] = __('Group'); +$table->data[0][1] = html_print_select_groups( + $config['id_user'], + 'AR', + true, + 'group', + $group, + '', + '', + '0', + true, + false, + false, + '', + false, + 'width:180px;', + false, + false, + 'id_grupo', + false +); + +$table->data[0][2] = ' '.__('Recursion').' '; +$table->data[0][3] = html_print_checkbox( + 'recursion', + 1, + $recursion, + true, + false, + '' +); + +$array_status = []; +$array_status[AGENT_MODULE_STATUS_NORMAL] = __('Normal'); +$array_status[AGENT_MODULE_STATUS_WARNING] = __('Warning'); +$array_status[AGENT_MODULE_STATUS_CRITICAL_BAD] = __('Critical'); +$array_status[AGENT_MODULE_STATUS_UNKNOWN] = __('Unknown'); +$array_status[AGENT_MODULE_STATUS_NOT_NORMAL] = __('Not normal'); +// Default. +$array_status[AGENT_MODULE_STATUS_NOT_INIT] = __('Not init'); + +$table->data[1][0] = __('Status agents'); +$table->data[1][1] = html_print_select( + $array_status, + 'id_status[]', + $id_status, + '', + __('All'), + -1, + true, + true, + true, + '', + false, + 'min-width:150px' +); + +$table->data[1][2] = __('Status module'); +$table->data[1][3] = html_print_select( + $array_status, + 'module_status[]', + $module_status, + '', + __('All'), + -1, + true, + true, + true, + '', + false, + 'min-width:150px' +); + +$table->data[1][4] = '
'; + echo ' | '.$array_custom_fields[$id_custom_fields].' | '; + echo ''.__('Agent').' | '; + echo ''.__('I.P').' | '; + echo ''.__('Server').' | '; + echo ''.__('Status').' | '; + echo '
---|