From 3d3beca727d29f02e410c56b041e0b6dbad88ad3 Mon Sep 17 00:00:00 2001 From: Jose Gonzalez Date: Thu, 15 Apr 2021 15:06:48 +0200 Subject: [PATCH] Added feature of generate event --- .../godmode/agentes/configurar_agente.php | 6 +- pandora_console/include/functions_agents.php | 77 +++++++++++-------- 2 files changed, 47 insertions(+), 36 deletions(-) diff --git a/pandora_console/godmode/agentes/configurar_agente.php b/pandora_console/godmode/agentes/configurar_agente.php index 1eefb9ec25..be6c1d941d 100644 --- a/pandora_console/godmode/agentes/configurar_agente.php +++ b/pandora_console/godmode/agentes/configurar_agente.php @@ -37,6 +37,8 @@ require_once $config['homedir'].'/include/functions_cron.php'; ui_require_javascript_file('encode_decode_base64'); ui_require_css_file('agent_manager'); +use PandoraFMS\Event; + check_login(); // Get tab parameter to check ACL in each tabs. @@ -229,7 +231,7 @@ if ($create_agent) { if ($alias == '') { $agent_creation_error = __('No agent alias specified'); $agent_created_ok = 0; - } else if (group_allow_more_agents($grupo) === false) { + } else if (group_allow_more_agents($grupo, true) === false) { $agent_creation_error = __('Agent cannot be created due to the maximum agent limit for this group'); $agent_created_ok = 0; } else { @@ -1037,7 +1039,7 @@ if ($update_agent) { if ($grupo <= 0) { ui_print_error_message(__('The group id %d is incorrect.', $grupo)); - } else if (group_allow_more_agents($grupo) === false) { + } else if (group_allow_more_agents($grupo, true) === false) { ui_print_error_message(__('Agent cannot be updated due to the maximum agent limit for this group')); } else if ($exists_ip) { ui_print_error_message(__('Duplicate main IP address')); diff --git a/pandora_console/include/functions_agents.php b/pandora_console/include/functions_agents.php index 3b2255d9ef..b12b16d76d 100644 --- a/pandora_console/include/functions_agents.php +++ b/pandora_console/include/functions_agents.php @@ -247,38 +247,7 @@ function agents_create_agent( } // Check if group has limit or overrides the agent limit. - if (group_allow_more_agents($id_group) === false) { - // Capture the group name. - $groupName = db_get_value( - 'nombre', - 'tgrupo', - 'id_grupo', - $id_group - ); - - // Generate new event. - $evt = new Event; - $evt->evento( - sprintf( - 'Agent cannot be created due to the maximum agent limit for group %s', - $groupName - ) - ); - $evt->id_grupo($id_group); - $evt->id_source_event(0); - $evt->id_agente(0); - $evt->estado(EVENT_NO_VALIDATED); - $evt->id_agentmodule(0); - $evt->id_usuario($config['id_user']); - $evt->event_type(EVENTS_NEW_AGENT); - $evt->criticity(EVENT_CRIT_WARNING); - $evt->timestamp(date('Y-m-d H:i:s')); - $evt->utimestamp(time()); - $evt->data(0); - $evt->source('agent_creation'); - // Save the event. - $evt->save(); - + if (group_allow_more_agents($id_group, true) === false) { return false; } @@ -3909,18 +3878,58 @@ function agents_get_last_status_change($id_agent) /** * Checks if group allow more agents due itself limitation. * - * @param integer $id_group Id of the group. + * @param integer $id_group Id of the group. + * @param boolean $generateEvent If true and the check fails, will generate an event. * * @return boolean True if allow more agents. */ -function group_allow_more_agents(int $id_group):bool +function group_allow_more_agents(int $id_group, bool $generateEvent=false):bool { + global $config; + $groupMaxAgents = (int) db_get_value('max_agents', 'tgrupo', sprintf('id_grupo = %d', $id_group)); $groupCountAgents = (int) db_get_num_rows(sprintf('SELECT nombre FROM tagente WHERE id_grupo = "%s"', $id_group)); // If `max_agents` is not defined or the count of agents in the group is below of max agents allowed. $output = ($groupMaxAgents === 0 || $groupCountAgents < $groupMaxAgents); + if ($output === false && $generateEvent === true) { + // Get the group name. + $groupName = db_get_value( + 'nombre', + 'tgrupo', + 'id_grupo', + $id_group + ); + // New event. + $evt = new Event; + // Set parameters. + $evt->evento( + sprintf( + 'Agent cannot be created due to the maximum agent limit for group %s', + $groupName + ) + ); + $evt->id_grupo($id_group); + $evt->id_agente(0); + $evt->id_agentmodule(0); + $evt->id_usuario($config['id_user']); + $evt->estado(EVENT_STATUS_NEW); + $evt->event_type(EVENTS_ERROR); + $evt->criticity(EVENT_CRIT_WARNING); + $evt->timestamp(date('Y-m-d H:i:s')); + $evt->utimestamp(time()); + $evt->data(0); + $evt->source('agent_creation'); + // Any fields are only available in meta. + if (is_metaconsole() === true) { + $evt->id_source_event(0); + } + + // Save the event. + $evt->save(); + } + return $output; }