2012-06-07 Dario Rodriguez <dario.rodriguez@artica.es>

* include/functions_modules.php,
        operation/tree.php: Improved performance of tree
        view for modules, its not very good but now works...

	MERGED FROM 4.0.2


git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@6446 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
darode 2012-06-07 14:29:00 +00:00
parent 7d3dc49d64
commit 7298ddd183
3 changed files with 77 additions and 29 deletions

View File

@ -1,3 +1,11 @@
2012-06-07 Dario Rodriguez <dario.rodriguez@artica.es>
* include/functions_modules.php,
operation/tree.php: Improved performance of tree
view for modules, its not very good but now works...
MERGED FROM 4.0.2
2012-06-07 Juan Manuel Ramon <juanmanuel.ramon@artica.es>
* godmode/menu.php: Hide not valid sections with metaconsole

View File

@ -1247,4 +1247,66 @@ function modules_get_status($id_agent_module, $db_status, $data, &$status, &$tit
}
}
// Get unknown agents by using the status code in modules
function modules_agents_unknown ($module_name) {
//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_agente IN (SELECT id_agente FROM tagente_modulo WHERE nombre LIKE '%$module_name%')");
}
// Get ok agents by using the status code in modules.
function modules_agents_ok ($module_name) {
//!!!Query explanation!!!
//An agent is OK if all its modules are OK
//The status values are: 0 OK; 1 Critical; 2 Warning; 3 Unkown
//This query grouped all modules by agents and select the MAX value for status which has the value 0
//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_agente IN (SELECT id_agente FROM tagente_modulo WHERE nombre LIKE '%$module_name%') GROUP BY tagente.id_agente HAVING max_estado = 0) AS S1");
}
// Get critical agents by using the status code in modules.
function modules_agents_critical ($module_name) {
//!!!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
//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_agente IN (SELECT id_agente FROM tagente_modulo WHERE nombre LIKE '%$module_name%')");
}
// Get warning agents by using the status code in modules.
function modules_agents_warning ($module_name) {
//!!!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_agente IN (SELECT id_agente FROM tagente_modulo WHERE nombre LIKE '%$module_name%') GROUP BY tagente.id_agente HAVING min_estado = 2) AS S1");
}
?>

View File

@ -632,6 +632,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_modules.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");
@ -851,36 +852,13 @@ function printTree_($type) {
break;
case 'module':
$id = str_replace(array(' ','#'), array('_articapandora_'.ord(' ').'_pandoraartica_', '_articapandora_'.ord('#').'_pandoraartica_'),io_safe_output($item['nombre']));
$id = str_replace ("/", "_", $id);
$name = io_safe_output($item['nombre']);
$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 COLLATE utf8_general_ci LIKE '%$name_sql%')");
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;
}
}
$module_name = $item['nombre'];
$num_ok = modules_agents_ok($module_name);
$num_critical = modules_agents_critical($module_name);
$num_warning = modules_agents_warning($module_name);
$num_unknown = modules_agents_unknown($module_name);
break;
}