Improvements on the performance for the metaconsole

This commit is contained in:
Alejandro Gallardo Escobar 2015-04-21 14:01:10 +02:00
parent 90d5d3cae3
commit 311fd99811
2 changed files with 128 additions and 201 deletions

View File

@ -185,12 +185,6 @@ if ($search_agents && ((!defined('METACONSOLE')) || $force_local)) {
return; return;
} }
elseif ($search_agents && ($config['metaconsole'] == 1) && defined('METACONSOLE')) { elseif ($search_agents && ($config['metaconsole'] == 1) && defined('METACONSOLE')) {
$servers = db_get_all_rows_sql ("SELECT *
FROM tmetaconsole_setup
WHERE disabled = 0");
if (!isset($servers)) {
return;
}
$id_agent = (int) get_parameter ('id_agent'); $id_agent = (int) get_parameter ('id_agent');
$string = (string) get_parameter ('q'); /* q is what autocomplete plugin gives */ $string = (string) get_parameter ('q'); /* q is what autocomplete plugin gives */
@ -204,7 +198,7 @@ elseif ($search_agents && ($config['metaconsole'] == 1) && defined('METACONSOLE'
} }
} }
$filter = array (); $filter = array();
if ($id_group != -1) { if ($id_group != -1) {
if ($id_group == 0) { if ($id_group == 0) {
@ -217,90 +211,63 @@ elseif ($search_agents && ($config['metaconsole'] == 1) && defined('METACONSOLE'
} }
} }
$data = array(); if (!empty($id_agent)) {
foreach ($servers as $server) { $filter['id_agente'] = $id_agent;
if (metaconsole_load_external_db ($server) != NOERR) { }
continue;
} if (!empty($string)) {
$search_filters = array();
//Get agents for only the name. //Get agents for only the name.
$filter_agents = $filter;
switch ($config['dbtype']) { switch ($config['dbtype']) {
case "mysql": case "mysql":
$filter_agents[] = '(nombre COLLATE utf8_general_ci LIKE "%'.$string.'%")'; //Get agents for only the name.
$search_filters[] = "(nombre COLLATE utf8_general_ci LIKE '%$string%')";
//Get agents for only the address
$search_filters[] = "(direccion LIKE '%$string%')";
//Get agents for only the description
$search_filters[] = "(comentarios LIKE '%$string%')";
break; break;
case "postgresql": case "postgresql":
$filter_agents[] = '(nombre LIKE \'%'.$string.'%\')'; //Get agents for only the name.
$search_filters[] = "(nombre LIKE '%$string%')";
//Get agents for only the address
$search_filters[] = "(direccion LIKE '%$string%')";
//Get agents for only the description
$search_filters[] = "(comentarios LIKE '%$string%')";
break; break;
case "oracle": case "oracle":
$filter_agents[] = '(UPPER(nombre) LIKE UPPER(\'%'.$string.'%\')'; //Get agents for only the name.
$search_filters[] = "(UPPER(nombre) LIKE UPPER('%$string%')";
//Get agents for only the address
$search_filters[] = "(UPPER(direccion) LIKE UPPER('%$string%'))";
//Get agents for only the description
$search_filters[] = "(UPPER(comentarios) LIKE UPPER('%$string%'))";
break; break;
} }
$agents = agents_get_agents($filter_agents, array ('id_agente', 'nombre', 'direccion'));
if ($agents !== false) {
foreach ($agents as $agent) {
$data[] = array('id' => $agent['id_agente'],
'name' => io_safe_output($agent['nombre']),
'ip' => io_safe_output($agent['direccion']),
'filter' => 'agent',
'id_server' => $server['id']);
}
}
//Get agents for only the address $search_filters_str = implode($search_filters, ' OR ');
$filter_address = $filter;
switch ($config['dbtype']) {
case "mysql":
$filter_address[] = '(nombre COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND direccion LIKE "%'.$string.'%")';
break;
case "postgresql":
$filter_address[] = '(nombre NOT LIKE \'%'.$string.'%\' AND direccion LIKE \'%'.$string.'%\')';
break;
case "oracle":
$filter_address[] = '(UPPER(nombre) NOT LIKE UPPER(\'%'.$string.'%\') AND UPPER(direccion) LIKE UPPER(\'%'.$string.'%\'))';
break;
}
$agents = agents_get_agents($filter_address, array ('id_agente', 'nombre', 'direccion'));
if ($agents !== false) {
foreach ($agents as $agent) {
$data[] = array('id' => $agent['id_agente'],
'name' => io_safe_output($agent['nombre']),
'ip' => io_safe_output($agent['direccion']),
'filter' => 'address',
'id_server' => $server['id']);
}
}
//Get agents for only the description if (!empty($search_filters_str))
$filter_description = $filter; $filter[] = "($search_filters_str)";
switch ($config['dbtype']) { }
case "mysql":
$filter_description[] =
'(nombre COLLATE utf8_general_ci NOT LIKE "%'.$string.'%" AND direccion NOT LIKE "%'.$string.'%" AND comentarios LIKE "%'.$string.'%")';
break;
case "postgresql":
$filter_description[] =
'(nombre NOT LIKE \'%'.$string.'%\' AND direccion NOT LIKE \'%'.$string.'%\' AND comentarios LIKE \'%'.$string.'%\')';
break;
case "oracle":
$filter_description[] =
'(UPPER(nombre) NOT LIKE UPPER(\'%'.$string.'%\') AND UPPER(direccion) NOT LIKE UPPER(\'%'.$string.'%\') AND UPPER(comentarios) LIKE UPPER(\'%'.$string.'%\'))';
break;
}
$agents = agents_get_agents($filter_description,
array ('id_agente', 'nombre', 'direccion'));
if ($agents !== false) {
foreach ($agents as $agent) {
$data[] = array('id' => $agent['id_agente'],
'name' => io_safe_output($agent['nombre']),
'ip' => io_safe_output($agent['direccion']),
'filter' => 'description',
'id_server' => $server['id']);
}
}
//Restore db connection
metaconsole_restore_db();
$fields = array(
'id_tagente AS id_agente', 'nombre',
'direccion', 'id_tmetaconsole_setup AS id_server'
);
$agents = db_get_all_rows_filter('tmetaconsole_agent', $filter, $fields);
$data = array();
if ($agents !== false) {
foreach ($agents as $agent) {
$data[] = array('id' => $agent['id_agente'],
'name' => io_safe_output($agent['nombre']),
'ip' => io_safe_output($agent['direccion']),
'filter' => 'description',
'id_server' => $agent['id_server']);
}
} }
echo json_encode($data); echo json_encode($data);

View File

@ -423,6 +423,9 @@ if (is_ajax ()) {
($filter != '' ? $filter : false), $indexed); ($filter != '' ? $filter : false), $indexed);
} }
if (empty($agent_modules))
$agent_modules = array();
foreach ($agent_modules as $key => $module) { foreach ($agent_modules as $key => $module) {
$agent_modules[$key]['nombre'] = io_safe_output($module['nombre']); $agent_modules[$key]['nombre'] = io_safe_output($module['nombre']);
} }
@ -438,28 +441,24 @@ if (is_ajax ()) {
if ($get_agent_status_tooltip) { if ($get_agent_status_tooltip) {
$id_agent = (int) get_parameter ('id_agent'); $id_agent = (int) get_parameter ('id_agent');
$metaconsole = (bool)get_parameter('metaconsole', false); $metaconsole = (bool) get_parameter('metaconsole', false);
$id_server = (int)get_parameter('id_server', 0); //Metaconsole $id_server = (int) get_parameter('id_server', 0); //Metaconsole
$server = null; $server = null;
if ($metaconsole) { if ($metaconsole) {
$strict_user = (bool) db_get_value('strict_acl', 'tusuario', 'id_user', $config['id_user']); $filter = array();
$server = db_get_row('tmetaconsole_setup', 'id', $id_server); if (!empty($id_agent))
$filter['id_tagente'] = $id_agent;
if (!empty($id_server))
$filter['id_tmetaconsole_setup'] = $id_server;
if (metaconsole_connect($server) != NOERR) { $agent = db_get_row_filter('tmetaconsole_agent', $filter);
return;
}
$agent = db_get_row ('tagente', 'id_agente', $id_agent);
metaconsole_restore_db();
} }
else { else {
$agent = db_get_row ('tagente', 'id_agente', $id_agent); $agent = db_get_row ('tagente', 'id_agente', $id_agent);
} }
if ($agent === false) { return; }
echo '<h3>'.$agent['nombre'].'</h3>'; echo '<h3>'.$agent['nombre'].'</h3>';
echo '<strong>'.__('Main IP').':</strong> '.$agent['direccion'].'<br />'; echo '<strong>'.__('Main IP').':</strong> '.$agent['direccion'].'<br />';
@ -474,130 +473,91 @@ if (is_ajax ()) {
echo '<strong>'.__('Last contact').':</strong> '.human_time_comparation($agent['ultimo_contacto']).'<br />'; echo '<strong>'.__('Last contact').':</strong> '.human_time_comparation($agent['ultimo_contacto']).'<br />';
echo '<strong>'.__('Last remote contact').':</strong> '.human_time_comparation($agent['ultimo_contacto_remoto']).'<br />'; echo '<strong>'.__('Last remote contact').':</strong> '.human_time_comparation($agent['ultimo_contacto_remoto']).'<br />';
# Fix : Only show agents with module with tags of user profile
$_user_tags = tags_get_user_tags($config['id_user'], 'RR');
$_sql_post = ''; if (!$metaconsole) {
if (is_array($_user_tags) && !empty($_user_tags)) { # Fix : Only show agents with module with tags of user profile
$_user_tags = tags_get_user_tags($config['id_user'], 'RR');
$_tags = implode(',', array_keys($_user_tags)); $_sql_post = '';
if (is_array($_user_tags) && !empty($_user_tags)) {
$_sql_post .= ' AND tagente_modulo.id_agente_modulo IN (SELECT a.id_agente_modulo FROM tagente_modulo a, ttag_module b WHERE a.id_agente_modulo=b.id_agente_modulo AND b.id_tag IN (' . $_tags . ')) ';
$_tags = implode(',', array_keys($_user_tags));
}
$_sql_post .= ' AND tagente_modulo.id_agente_modulo IN (SELECT a.id_agente_modulo FROM tagente_modulo a, ttag_module b WHERE a.id_agente_modulo=b.id_agente_modulo AND b.id_tag IN (' . $_tags . ')) ';
$sql = sprintf ('SELECT tagente_modulo.descripcion,
tagente_modulo.nombre
FROM tagente_estado, tagente_modulo
WHERE tagente_modulo.id_agente = %d
AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
AND tagente_modulo.disabled = 0
AND tagente_estado.estado = 1', $id_agent);
$sql .= $_sql_post;
if ($metaconsole) {
if (metaconsole_connect($server) != NOERR) {
return;
} }
$sql = sprintf ('SELECT tagente_modulo.descripcion,
tagente_modulo.nombre
FROM tagente_estado, tagente_modulo
WHERE tagente_modulo.id_agente = %d
AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
AND tagente_modulo.disabled = 0
AND tagente_estado.estado = 1', $id_agent);
$sql .= $_sql_post;
$bad_modules = db_get_all_rows_sql ($sql); $bad_modules = db_get_all_rows_sql ($sql);
metaconsole_restore_db(); $sql = sprintf ('SELECT COUNT(*)
} FROM tagente_modulo
else { WHERE id_agente = %d
$bad_modules = db_get_all_rows_sql ($sql); AND disabled = 0', $id_agent);
}
$sql = sprintf ('SELECT COUNT(*)
FROM tagente_modulo
WHERE id_agente = %d
AND disabled = 0', $id_agent);
if ($metaconsole) {
if (metaconsole_connect($server) != NOERR) {
return;
}
$total_modules = db_get_sql ($sql); $total_modules = db_get_sql ($sql);
metaconsole_restore_db(); if ($bad_modules === false)
} $size_bad_modules = 0;
else { else
$total_modules = db_get_sql ($sql); $size_bad_modules = sizeof ($bad_modules);
}
if ($bad_modules === false)
$size_bad_modules = 0;
else
$size_bad_modules = sizeof ($bad_modules);
// Modules down
if ($size_bad_modules > 0 && (!$metaconsole || !$strict_user)) {
echo '<strong>'.__('Monitors down').':</strong> '.$size_bad_modules.' / '.$total_modules;
echo '<ul>';
foreach ($bad_modules as $module) {
echo '<li>';
echo ui_print_truncate_text($module['nombre'], 'module_small');
echo '</li>';
}
echo '</ul>';
}
// Alerts (if present)
$sql = sprintf ('SELECT COUNT(talert_template_modules.id)
FROM talert_template_modules, tagente_modulo, tagente
WHERE tagente.id_agente = %d
AND tagente.disabled = 0
AND tagente.id_agente = tagente_modulo.id_agente
AND tagente_modulo.disabled = 0
AND tagente_modulo.id_agente_modulo = talert_template_modules.id_agent_module
AND talert_template_modules.times_fired > 0 ',
$id_agent);
if ($metaconsole) {
if (metaconsole_connect($server) != NOERR) {
return;
}
$alert_modules = db_get_sql ($sql); // Modules down
if ($size_bad_modules > 0) {
metaconsole_restore_db(); echo '<strong>'.__('Monitors down').':</strong> '.$size_bad_modules.' / '.$total_modules;
} echo '<ul>';
else { foreach ($bad_modules as $module) {
$alert_modules = db_get_sql ($sql); echo '<li>';
} echo ui_print_truncate_text($module['nombre'], 'module_small');
echo '</li>';
if ($alert_modules > 0 && (!$metaconsole || !$strict_user)) {
$sql = sprintf ('SELECT tagente_modulo.nombre, talert_template_modules.last_fired
FROM talert_template_modules, tagente_modulo, tagente
WHERE tagente.id_agente = %d
AND tagente.disabled = 0
AND tagente.id_agente = tagente_modulo.id_agente
AND tagente_modulo.disabled = 0
AND tagente_modulo.id_agente_modulo = talert_template_modules.id_agent_module
AND talert_template_modules.times_fired > 0 ',
$id_agent);
if ($metaconsole) {
if (metaconsole_connect($server) != NOERR) {
return;
} }
echo '</ul>';
}
// Alerts (if present)
$sql = sprintf ('SELECT COUNT(talert_template_modules.id)
FROM talert_template_modules, tagente_modulo, tagente
WHERE tagente.id_agente = %d
AND tagente.disabled = 0
AND tagente.id_agente = tagente_modulo.id_agente
AND tagente_modulo.disabled = 0
AND tagente_modulo.id_agente_modulo = talert_template_modules.id_agent_module
AND talert_template_modules.times_fired > 0 ',
$id_agent);
$alert_modules = (int) db_get_sql ($sql);
if ($alert_modules > 0) {
$sql = sprintf ('SELECT tagente_modulo.nombre, talert_template_modules.last_fired
FROM talert_template_modules, tagente_modulo, tagente
WHERE tagente.id_agente = %d
AND tagente.disabled = 0
AND tagente.id_agente = tagente_modulo.id_agente
AND tagente_modulo.disabled = 0
AND tagente_modulo.id_agente_modulo = talert_template_modules.id_agent_module
AND talert_template_modules.times_fired > 0 ',
$id_agent);
$alerts = db_get_all_rows_sql ($sql); $alerts = db_get_all_rows_sql ($sql);
metaconsole_restore_db(); echo '<strong>'.__('Alerts fired').':</strong>';
echo "<ul>";
foreach ($alerts as $alert_item) {
echo '<li>';
echo ui_print_truncate_text($alert_item['nombre']).' -> ';
echo human_time_comparation($alert_item['last_fired']);
echo '</li>';
}
echo '</ul>';
} }
else {
$alerts = db_get_all_rows_sql ($sql);
}
echo '<strong>'.__('Alerts fired').':</strong>';
echo "<ul>";
foreach ($alerts as $alert_item) {
echo '<li>';
echo ui_print_truncate_text($alert_item['nombre']).' -> ';
echo human_time_comparation($alert_item['last_fired']);
echo '</li>';
}
echo '</ul>';
} }
return; return;