Merge branch 'ent-11802-giss-y-entornos-pesados-optimizar-la-query-de-la-seccion-vista-de-alertas-y-vista-de-monitores' into 'develop'

Optimiized monitors view

See merge request artica/pandorafms!6627
This commit is contained in:
Diego Muñoz-Reja 2023-12-15 07:18:13 +00:00
commit b545cfec23
1 changed files with 60 additions and 55 deletions

View File

@ -27,6 +27,7 @@
*/
// Begin.
use PandoraFMS\Enterprise\Metaconsole\Node;
global $config;
check_login();
@ -188,7 +189,7 @@ $sql_from = ' FROM tagente_modulo
INNER JOIN tagente
ON tagente_modulo.id_agente = tagente.id_agente
LEFT JOIN tagent_secondary_group tasg
ON tagente.id_agente = tasg.id_agent
ON tagente_modulo.id_agente = tasg.id_agent
INNER JOIN tagente_estado
ON tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
INNER JOIN tmodule
@ -436,12 +437,22 @@ if ($moduletype != '') {
// Freestring selector.
if ($ag_freestring != '') {
$sql_conditions .= ' AND (tagente.nombre '.$not_condition.' LIKE \'%%'.$ag_freestring.'%%\'
OR tagente.alias '.$not_condition.' LIKE \'%%'.$ag_freestring.'%%\'
OR tagente_modulo.nombre '.$not_condition.' LIKE \'%%'.$ag_freestring.'%%\'
OR tagente_modulo.descripcion '.$not_condition.' LIKE \'%%'.$ag_freestring.'%%\')';
$sql_conditions .= ' AND EXISTS (
SELECT 1
FROM tagente
WHERE tagente.id_agente = tagente_modulo.id_agente
AND (
tagente.nombre '.$not_condition.' LIKE \'%%'.$ag_freestring.'%%\' OR tagente.alias '.$not_condition.' LIKE \'%%'.$ag_freestring.'%%\'
)
AND (
tagente_modulo.nombre '.$not_condition.' LIKE \'%%'.$ag_freestring.'%%\'
OR tagente_modulo.descripcion '.$not_condition.' LIKE \'%%'.$ag_freestring.'%%\')
)';
}
// Status selector.
if ($status == AGENT_MODULE_STATUS_NORMAL) {
// Normal.
@ -1348,15 +1359,10 @@ $sql = 'SELECT
tagente.nombre AS agent_name,
tagente_modulo.nombre AS module_name,
tagente_modulo.history_data,
tagente_modulo.flag AS flag,
tagente.id_grupo AS id_group,
tagente.id_agente AS id_agent,
tagente_modulo.id_tipo_modulo AS module_type,
tagente_modulo.module_interval,
tagente_modulo.tcp_send,
tagente_modulo.ip_target,
tagente_modulo.snmp_community,
tagente_modulo.snmp_oid,
tagente_estado.datos,
tagente_estado.estado,
tagente_estado.last_status_change,
@ -1370,13 +1376,12 @@ $sql = 'SELECT
tagente_modulo.extended_info,
tagente_modulo.critical_inverse,
tagente_modulo.warning_inverse,
tagente_modulo.critical_instructions,
tagente_modulo.warning_instructions,
tagente_modulo.unknown_instructions,
tagente_estado.utimestamp AS utimestamp'.$sql_from.$sql_conditions_all.'
GROUP BY tagente_modulo.id_agente_modulo
ORDER BY '.$order['field'].' '.$order['order'].'
LIMIT '.$offset.','.$limit_sql;
LIMIT '.$limit_sql.' OFFSET '.$offset;
hd($sql);
// We do not show the modules until the user searches with the filter.
if ($autosearch) {
@ -1402,53 +1407,53 @@ if ($autosearch) {
$result = [];
$count_modules = 0;
foreach ($servers as $server) {
// If connection was good then retrieve all data server.
if (metaconsole_connect($server) === NOERR) {
$connection = true;
} else {
$connection = false;
}
try {
$node = new Node((int) $server['id']);
$node->connect();
$result_server = db_get_all_rows_sql($sql);
$result_server = db_get_all_rows_sql($sql);
if (empty($result_server) === false) {
// Create HASH login info.
$pwd = $server['auth_token'];
$auth_serialized = json_decode($pwd, true);
if (empty($result_server) === false) {
// Create HASH login info.
$pwd = $server['auth_token'];
$auth_serialized = json_decode($pwd, true);
if (is_array($auth_serialized)) {
$pwd = $auth_serialized['auth_token'];
$api_password = $auth_serialized['api_password'];
$console_user = $auth_serialized['console_user'];
$console_password = $auth_serialized['console_password'];
if (is_array($auth_serialized)) {
$pwd = $auth_serialized['auth_token'];
$api_password = $auth_serialized['api_password'];
$console_user = $auth_serialized['console_user'];
$console_password = $auth_serialized['console_password'];
}
$user = $config['id_user'];
$user_rot13 = str_rot13($config['id_user']);
$hashdata = $user.$pwd;
$hashdata = md5($hashdata);
foreach ($result_server as $result_element_key => $result_element_value) {
$result_server[$result_element_key]['server_id'] = $server['id'];
$result_server[$result_element_key]['server_name'] = $server['server_name'];
$result_server[$result_element_key]['server_url'] = $server['server_url'].'/';
$result_server[$result_element_key]['hashdata'] = $hashdata;
$result_server[$result_element_key]['user'] = $config['id_user'];
$result_server[$result_element_key]['groups_in_server'] = agents_get_all_groups_agent(
$result_element_value['id_agent'],
$result_element_value['id_group']
);
$count_modules++;
}
$result = array_merge($result, $result_server);
}
$user = $config['id_user'];
$user_rot13 = str_rot13($config['id_user']);
$hashdata = $user.$pwd;
$hashdata = md5($hashdata);
$url_hash = '&'.'loginhash=auto&'.'loginhash_data='.$hashdata.'&'.'loginhash_user='.$user_rot13;
foreach ($result_server as $result_element_key => $result_element_value) {
$result_server[$result_element_key]['server_id'] = $server['id'];
$result_server[$result_element_key]['server_name'] = $server['server_name'];
$result_server[$result_element_key]['server_url'] = $server['server_url'].'/';
$result_server[$result_element_key]['hashdata'] = $hashdata;
$result_server[$result_element_key]['user'] = $config['id_user'];
$result_server[$result_element_key]['groups_in_server'] = agents_get_all_groups_agent(
$result_element_value['id_agent'],
$result_element_value['id_group']
);
$count_modules++;
}
$result = array_merge($result, $result_server);
usort($result, arrayOutputSorting($sort, $fieldForSorting));
} catch (\Exception $e) {
$node->disconnect();
return;
} finally {
$node->disconnect();
}
usort($result, arrayOutputSorting($sort, $fieldForSorting));
metaconsole_restore_db();
}
if ($count_modules > $config['block_size']) {