diff --git a/pandora_console/ChangeLog b/pandora_console/ChangeLog index 31490c6156..868fb7be12 100644 --- a/pandora_console/ChangeLog +++ b/pandora_console/ChangeLog @@ -1,3 +1,12 @@ +2012-06-07 Dario Rodriguez + + * include/functions_os.php: Created this file. + include/functions_groups, + operation/tree.php: Fixed a bug related to search + improved performance of OS tab for tree view. + + MERGED FROM 4.0.2 + 2012-06-07 Hirofumi Kosaka * include/functions_ui.php: Merged from 4.0.x: Fixed bug: diff --git a/pandora_console/include/functions_groups.php b/pandora_console/include/functions_groups.php index b9557d6519..203defda6e 100644 --- a/pandora_console/include/functions_groups.php +++ b/pandora_console/include/functions_groups.php @@ -852,6 +852,8 @@ function groups_agent_unknown ($group_array) { $group_clause = implode (",", $group_array); $group_clause = "(" . $group_clause . ")"; + //TODO REVIEW ORACLE AND POSTGRES + return db_get_sql ("SELECT COUNT( DISTINCT tagente_estado.id_agente) FROM tagente_estado, tagente, tagente_modulo WHERE tagente.disabled = 0 AND tagente_estado.utimestamp != 0 AND tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo AND tagente_modulo.disabled = 0 AND estado = 3 AND tagente_estado.id_agente = tagente.id_agente AND tagente.id_grupo IN $group_clause"); } @@ -877,6 +879,8 @@ function groups_agent_ok ($group_array) { //If MAX(estado) is 0 it means all modules has status 0 => OK //Then we count the agents of the group selected to know how many agents are in OK status + //TODO REVIEW ORACLE AND POSTGRES + return db_get_sql ("SELECT COUNT(max_estado) FROM (SELECT MAX(tagente_estado.estado) as max_estado FROM tagente_estado, tagente, tagente_modulo WHERE tagente.disabled = 0 AND tagente_estado.utimestamp != 0 AND tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo AND tagente_modulo.disabled = 0 AND tagente_estado.id_agente = tagente.id_agente AND tagente.id_grupo IN $group_clause GROUP BY tagente.id_agente HAVING max_estado = 0) AS S1"); } @@ -901,6 +905,8 @@ function groups_agent_critical ($group_array) { //If estado = 1 it means at leas 1 module is in critical status so the agent is critical //Then we count the agents of the group selected to know how many agents are in critical status + //TODO REVIEW ORACLE AND POSTGRES + return db_get_sql ("SELECT COUNT( DISTINCT tagente_estado.id_agente) FROM tagente_estado, tagente, tagente_modulo WHERE tagente.disabled = 0 AND tagente_estado.utimestamp != 0 AND tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo AND tagente_modulo.disabled = 0 AND estado = 1 AND tagente_estado.id_agente = tagente.id_agente AND tagente.id_grupo IN $group_clause"); } @@ -926,6 +932,8 @@ function groups_agent_warning ($group_array) { //If MIN(estado) is 2 it means at least one module is warning and there is no critical modules //Then we count the agents of the group selected to know how many agents are in warning status + //TODO REVIEW ORACLE AND POSTGRES + return db_get_sql ("SELECT COUNT(min_estado) FROM (SELECT MIN(tagente_estado.estado) as min_estado FROM tagente_estado, tagente, tagente_modulo WHERE tagente.disabled = 0 AND tagente_estado.utimestamp != 0 AND tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo AND tagente_modulo.disabled = 0 AND tagente_estado.id_agente = tagente.id_agente AND tagente.id_grupo IN $group_clause GROUP BY tagente.id_agente HAVING min_estado = 2) AS S1"); } @@ -947,6 +955,8 @@ function groups_monitor_not_init ($group_array) { $group_clause = implode (",", $group_array); $group_clause = "(" . $group_clause . ")"; + //TODO REVIEW ORACLE AND POSTGRES + return db_get_sql ("SELECT COUNT(tagente_estado.id_agente_estado) FROM tagente_estado, tagente, tagente_modulo WHERE tagente.id_grupo IN $group_clause AND tagente.disabled = 0 @@ -973,6 +983,8 @@ function groups_monitor_ok ($group_array) { $group_clause = implode (",", $group_array); $group_clause = "(" . $group_clause . ")"; + //TODO REVIEW ORACLE AND POSTGRES + return db_get_sql ("SELECT COUNT(tagente_estado.id_agente_estado) FROM tagente_estado, tagente, tagente_modulo WHERE tagente.id_grupo IN $group_clause AND tagente.disabled = 0 @@ -996,6 +1008,8 @@ function groups_monitor_critical ($group_array) { $group_clause = implode (",", $group_array); $group_clause = "(" . $group_clause . ")"; + //TODO REVIEW ORACLE AND POSTGRES + return db_get_sql ("SELECT COUNT(tagente_estado.id_agente_estado) FROM tagente_estado, tagente, tagente_modulo WHERE tagente.id_grupo IN $group_clause AND tagente.disabled = 0 @@ -1020,6 +1034,8 @@ function groups_monitor_warning ($group_array) { $group_clause = implode (",", $group_array); $group_clause = "(" . $group_clause . ")"; + //TODO REVIEW ORACLE AND POSTGRES + return db_get_sql ("SELECT COUNT(tagente_estado.id_agente_estado) FROM tagente_estado, tagente, tagente_modulo WHERE tagente.id_grupo IN $group_clause AND tagente.disabled = 0 @@ -1044,6 +1060,8 @@ function groups_monitor_unknown ($group_array) { $group_clause = implode (",", $group_array); $group_clause = "(" . $group_clause . ")"; + //TODO REVIEW ORACLE AND POSTGRES + return db_get_sql ("SELECT COUNT(tagente_estado.id_agente_estado) FROM tagente_estado, tagente, tagente_modulo WHERE tagente.id_grupo IN $group_clause AND tagente.disabled = 0 @@ -1068,6 +1086,8 @@ function groups_monitor_alerts ($group_array) { $group_clause = implode (",", $group_array); $group_clause = "(" . $group_clause . ")"; + //TODO REVIEW ORACLE AND POSTGRES + return db_get_sql ("SELECT COUNT(talert_template_modules.id) FROM talert_template_modules, tagente_modulo, tagente_estado, tagente WHERE tagente.id_grupo IN $group_clause AND tagente_modulo.id_agente = tagente.id_agente @@ -1094,6 +1114,8 @@ function groups_monitor_fired_alerts ($group_array) { $group_clause = implode (",", $group_array); $group_clause = "(" . $group_clause . ")"; + //TODO REVIEW ORACLE AND POSTGRES + return db_get_sql ("SELECT COUNT(talert_template_modules.id) FROM talert_template_modules, tagente_modulo, tagente_estado, tagente WHERE tagente.id_grupo IN $group_clause AND tagente_modulo.id_agente = tagente.id_agente diff --git a/pandora_console/include/functions_os.php b/pandora_console/include/functions_os.php new file mode 100755 index 0000000000..7dc3069d28 --- /dev/null +++ b/pandora_console/include/functions_os.php @@ -0,0 +1,69 @@ + OK + //Then we count the agents of the group selected to know how many agents are in OK status + + //TODO REVIEW ORACLE AND POSTGRES + + return db_get_sql ("SELECT COUNT(max_estado) FROM (SELECT MAX(tagente_estado.estado) as max_estado FROM tagente_estado, tagente, tagente_modulo WHERE tagente.disabled = 0 AND tagente_estado.utimestamp != 0 AND tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo AND tagente_modulo.disabled = 0 AND tagente_estado.id_agente = tagente.id_agente AND tagente.id_os = $id_os GROUP BY tagente.id_agente HAVING max_estado = 0) AS S1"); +} + +// Get warning agents by using the status code in modules. + +function os_agents_warning ($id_os) { + + //!!!Query explanation!!! + //An agent is Warning when has at least one module in warning status and nothing more in critical status + //The status values are: 0 OK; 1 Critical; 2 Warning; 3 Unkown + //This query grouped all modules by agents and select the MIN value for status which has the value 0 + //If MIN(estado) is 2 it means at least one module is warning and there is no critical modules + //Then we count the agents of the group selected to know how many agents are in warning status + + //TODO REVIEW ORACLE AND POSTGRES + + return db_get_sql ("SELECT COUNT(min_estado) FROM (SELECT MIN(tagente_estado.estado) as min_estado FROM tagente_estado, tagente, tagente_modulo WHERE tagente.disabled = 0 AND tagente_estado.utimestamp != 0 AND tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo AND tagente_modulo.disabled = 0 AND tagente_estado.id_agente = tagente.id_agente AND tagente.id_os = $id_os GROUP BY tagente.id_agente HAVING min_estado = 2) AS S1"); + +} + +// Get unknown agents by using the status code in modules. + +function os_agents_unknown ($id_os) { + + //TODO REVIEW ORACLE AND POSTGRES + + return db_get_sql ("SELECT COUNT( DISTINCT tagente_estado.id_agente) FROM tagente_estado, tagente, tagente_modulo WHERE tagente.disabled = 0 AND tagente_estado.utimestamp != 0 AND tagente_modulo.id_agente_modulo = tagente_estado.id_agente_modulo AND tagente_modulo.disabled = 0 AND estado = 3 AND tagente_estado.id_agente = tagente.id_agente AND tagente.id_os = $id_os"); + +} + +?> diff --git a/pandora_console/operation/tree.php b/pandora_console/operation/tree.php index ee6ede95de..a035f9d773 100644 --- a/pandora_console/operation/tree.php +++ b/pandora_console/operation/tree.php @@ -248,7 +248,7 @@ if (is_ajax ()) $groups_sql = implode(', ', $avariableGroupsIds); if ($search_free != '') { - $search_sql = " AND nombre LIKE '%$search_free%'"; + $search_sql = " AND nombre COLLATE utf8_general_ci LIKE '%$search_free%'"; } else { $search_sql = ''; } @@ -289,7 +289,7 @@ if (is_ajax ()) WHERE id_agente IN ( SELECT id_agente FROM tagente_modulo - WHERE nombre LIKE \'%s\' + WHERE nombre COLLATE utf8_general_ci LIKE \'%s\' ) AND (%s id_grupo IN (%s))', $name, $extra_sql, $groups_sql); break; @@ -321,6 +321,7 @@ if (is_ajax ()) $count++; switch ($type) { case 'group': + case 'os': $agent_info["monitor_alertsfired"] = agents_get_alerts_fired ($row["id_agente"]); $agent_info["monitor_critical"] = agents_monitor_critical ($row["id_agente"]); @@ -336,11 +337,6 @@ if (is_ajax ()) //Count all modules $agent_info["modules"] = $agent_info["monitor_critical"] + $agent_info["monitor_warning"] + $agent_info["monitor_unknown"] + $agent_info["monitor_normal"]; - - - break; - case 'os': - $agent_info = reporting_get_agent_module_info ($row["id_agente"]); break; case 'module_group': $agent_info = reporting_get_agent_module_info ($row["id_agente"], ' id_module_group = ' . $id); @@ -355,11 +351,11 @@ if (is_ajax ()) case 'module': switch ($config["dbtype"]) { case "mysql": - $agent_info = reporting_get_agent_module_info ($row["id_agente"], ' nombre LIKE "' . $name . '"'); + $agent_info = reporting_get_agent_module_info ($row["id_agente"], ' nombre COLLATE utf8_general_ci LIKE "' . $name . '"'); break; case "postgresql": case "oracle": - $agent_info = reporting_get_agent_module_info ($row["id_agente"], ' nombre LIKE \'' . $name . '\''); + $agent_info = reporting_get_agent_module_info ($row["id_agente"], ' nombre COLLATE utf8_general_ci LIKE \'' . $name . '\''); break; } break; @@ -487,14 +483,14 @@ if (is_ajax ()) $sql = 'SELECT * FROM tagente_modulo AS t1 INNER JOIN tagente_estado AS t2 ON t1.id_agente_modulo = t2.id_agente_modulo - WHERE t1.id_agente = ' . $id . ' AND nombre LIKE \'' . io_safe_input($name) . '\''; + WHERE t1.id_agente = ' . $id . ' AND nombre COLLATE utf8_general_ci LIKE \'' . io_safe_input($name) . '\''; break; case "postgresql": case "oracle": $sql = 'SELECT * FROM tagente_modulo AS t1 INNER JOIN tagente_estado AS t2 ON t1.id_agente_modulo = t2.id_agente_modulo - WHERE t1.id_agente = ' . $id . ' AND nombre LIKE \'' . io_safe_input($name) . '\''; + WHERE t1.id_agente = ' . $id . ' AND nombre COLLATE utf8_general_ciLIKE \'' . io_safe_input($name) . '\''; break; } break; @@ -635,6 +631,7 @@ if (is_ajax ()) include_once($config['homedir'] . "/include/functions_groups.php"); +include_once($config['homedir'] . "/include/functions_os.php"); include_once($config['homedir'] . "/include/functions_servers.php"); include_once($config['homedir'] . "/include/functions_reporting.php"); include_once($config['homedir'] . "/include/functions_ui.php"); @@ -674,10 +671,10 @@ function printTree_($type) { if ($search_free != '') { $sql = "SELECT * FROM tconfig_os WHERE id_os IN (SELECT id_os FROM tagente - WHERE nombre LIKE '%$search_free%')"; + WHERE nombre COLLATE utf8_general_ci LIKE '%$search_free%')"; $list = db_get_all_rows_sql($sql); } else { - $list = db_get_all_rows_in_table('tconfig_os', 'name'); + $list = db_get_all_rows_sql("SELECT DISTINCT (tagente.id_os), tconfig_os.name FROM tagente, tconfig_os WHERE tagente.id_os = tconfig_os.id_os"); } break; case 'group': @@ -690,7 +687,7 @@ function printTree_($type) { ); if ($search_free != '') { $sql_search = " AND id_grupo IN (SELECT id_grupo FROM tagente - WHERE nombre LIKE '%$search_free%')"; + WHERE nombre COLLATE utf8_general_ci LIKE '%$search_free%')"; } else { $sql_search =''; } @@ -709,7 +706,7 @@ function printTree_($type) { $sql = "SELECT * FROM tmodule_group WHERE id_mg IN (SELECT id_module_group FROM tagente_modulo WHERE id_agente IN (SELECT id_agente FROM tagente - WHERE nombre LIKE '%$search_free%'))"; + WHERE nombre COLLATE utf8_general_ci LIKE '%$search_free%'))"; $list = db_get_all_rows_sql($sql); } else { $list = db_get_all_rows_in_table('tmodule_group', 'name'); @@ -725,7 +722,7 @@ function printTree_($type) { WHERE id_group IN ($groups) AND id IN (SELECT id_policy FROM tpolicy_agents WHERE id_agent IN (SELECT id_agente FROM tagente - WHERE nombre LIKE '%$search_free%'))"; + WHERE nombre COLLATE utf8_general_ci LIKE '%$search_free%'))"; $list = db_get_all_rows_sql($sql); } else { $list = db_get_all_rows_filter('tpolicies', array('id_group' => array_keys($avariableGroups))); @@ -736,7 +733,7 @@ function printTree_($type) { case 'module': if ($search_free != '') { $sql_search = " AND t1.id_agente IN (SELECT id_agente FROM tagente - WHERE nombre LIKE '%$search_free%')"; + WHERE nombre COLLATE utf8_general_ci LIKE '%$search_free%')"; } else { $sql_search =''; } @@ -774,34 +771,10 @@ function printTree_($type) { $id = $item['id_os']; $name = $item['name']; $iconImg = html_print_image(str_replace('.png' ,'_small.png', ui_print_os_icon ($item['id_os'], false, true, false)) . " ", true); - - $agentes = db_get_all_rows_sql("SELECT id_agente FROM tagente WHERE id_os=$id"); - if ($agentes === false) { - $agentes = array(); - } - - $num_ok = 0; - $num_critical = 0; - $num_warning = 0; - $num_unknown = 0; - foreach ($agentes as $agente) { - $stat = reporting_get_agent_module_info ($agente["id_agente"]); - - switch ($stat['status']) { - case 'agent_ok.png': - $num_ok++; - break; - case 'agent_critical.png': - $num_critical++; - break; - case 'agent_warning.png': - $num_warning++; - break; - case 'agent_down.png': - $num_unknown++; - break; - } - } + $num_ok = os_agents_ok($id); + $num_critical = os_agents_critical($id); + $num_warning = os_agents_warning($id); + $num_unknown = os_agents_unknown($id); break; case 'group': $id = $item['id_grupo']; @@ -882,7 +855,7 @@ function printTree_($type) { $name_sql = io_safe_input($item['nombre']); $agentes = db_get_all_rows_sql("SELECT id_agente FROM tagente WHERE id_agente IN (SELECT id_agente FROM tagente_modulo - WHERE nombre LIKE '$name_sql')"); + WHERE nombre COLLATE utf8_general_ci LIKE '%$name_sql%')"); if ($agentes === false) { $agentes = array(); } @@ -932,21 +905,16 @@ function printTree_($type) { } } - //skip if there is a empty OS or group! - if (($type == 'os' || $type == 'group') && ($num_ok == 0) && ($num_critical == 0) && ($num_warning == 0) && ($num_unknown == 0)) { - continue; - } else { - echo "
  • - " . - $img . $iconImg ." " . __($name) . ' ('. - ''.''.$num_ok.''.''. - ' : '.$num_critical.'' . - ' : '.$num_warning.''. - ' : '.$num_unknown.''.') '. ""; - - echo "
    "; - echo "
  • \n"; - } + echo "
  • + " . + $img . $iconImg ." " . __($name) . ' ('. + ''.''.$num_ok.''.''. + ' : '.$num_critical.'' . + ' : '.$num_warning.''. + ' : '.$num_unknown.''.') '. ""; + + echo "
    "; + echo "
  • \n"; } echo "\n"; echo '';