From 6e246d5d2980dd83c5f300ae0ebc0892d0c449bf Mon Sep 17 00:00:00 2001 From: Daniel Cebrian Date: Wed, 13 Dec 2023 12:04:00 +0100 Subject: [PATCH] #12509 fixed status agents disabled --- pandora_console/include/functions_graph.php | 12 +- pandora_console/include/functions_groups.php | 3 +- .../lib/TacticalView/elements/Agents.php | 17 +- .../lib/TacticalView/elements/Groups.php | 204 +++++++++--------- 4 files changed, 124 insertions(+), 112 deletions(-) diff --git a/pandora_console/include/functions_graph.php b/pandora_console/include/functions_graph.php index 58ed138259..de60bd8f7b 100644 --- a/pandora_console/include/functions_graph.php +++ b/pandora_console/include/functions_graph.php @@ -5115,7 +5115,8 @@ function graph_so_by_group($id_group, $width=300, $height=200, $recursive=true, FROM tagente a LEFT JOIN tagent_secondary_group g ON g.id_agent = a.id_agente LEFT JOIN tconfig_os os ON a.id_os = os.id_os - WHERE a.id_grupo IN (%s) OR g.id_group IN (%s) + WHERE (a.id_grupo IN (%s) OR g.id_group IN (%s)) + AND a.disabled = 0 GROUP BY os.id_os', implode(',', $id_groups), implode(',', $id_groups) @@ -5205,13 +5206,14 @@ function graph_events_agent_by_group($id_group, $width=300, $height=200, $noWate // with it and then the number of times it occured. GROUP BY statement // is required if both DISTINCT() and COUNT() are in the statement. $sql = sprintf( - 'SELECT DISTINCT(id_agente) AS id_agente, - COUNT(id_agente) AS count + 'SELECT DISTINCT(te.id_agente) AS id_agente, + COUNT(te.id_agente) AS count FROM tevento te + LEFT JOIN tagente a ON a.id_agente = te.id_agente LEFT JOIN tagent_secondary_group g ON g.id_agent = te.id_agente WHERE 1=1 AND estado = 0 - %s %s - GROUP BY id_agente + %s %s AND a.disabled = 0 + GROUP BY te.id_agente ORDER BY count DESC LIMIT 8', $tags_condition, $filter_groups diff --git a/pandora_console/include/functions_groups.php b/pandora_console/include/functions_groups.php index 78b0804c30..a09baf5d9f 100644 --- a/pandora_console/include/functions_groups.php +++ b/pandora_console/include/functions_groups.php @@ -2503,7 +2503,8 @@ function groups_get_heat_map_agents(array $id_group, float $width=0, float $heig $sql = 'SELECT * FROM tagente a LEFT JOIN tagent_secondary_group g ON g.id_agent = a.id_agente - WHERE a.id_grupo IN ('.implode(',', $id_group).') OR g.id_group IN ('.implode(',', $id_group).')'; + WHERE (a.id_grupo IN ('.implode(',', $id_group).') OR g.id_group IN ('.implode(',', $id_group).')) + AND a.disabled = 0'; $all_agents = db_get_all_rows_sql($sql); if (empty($all_agents)) { diff --git a/pandora_console/include/lib/TacticalView/elements/Agents.php b/pandora_console/include/lib/TacticalView/elements/Agents.php index a0e14313e0..d0349f26d3 100644 --- a/pandora_console/include/lib/TacticalView/elements/Agents.php +++ b/pandora_console/include/lib/TacticalView/elements/Agents.php @@ -352,6 +352,7 @@ class Agents extends Element */ public function getStatusGraph():string { + $data = []; $agents = agents_get_agents( false, [ @@ -435,13 +436,17 @@ class Agents extends Element // To avoid that if a value is too small it is not seen. $percentages = []; $total = array_sum($data); - foreach ($data as $key => $value) { - $percentage = (($value / $total) * 100); - if ($percentage < 1 && $percentage > 0) { - $percentage = 1; - } + if ($total > 0) { + foreach ($data as $key => $value) { + $percentage = (($value / $total) * 100); + if ($percentage < 1 && $percentage > 0) { + $percentage = 1; + } - $percentages[$key] = format_numeric($percentage, 0); + $percentages[$key] = format_numeric($percentage, 0); + } + } else { + $percentages = []; } $data = $percentages; diff --git a/pandora_console/include/lib/TacticalView/elements/Groups.php b/pandora_console/include/lib/TacticalView/elements/Groups.php index 4fe07b743a..a86b8465a4 100644 --- a/pandora_console/include/lib/TacticalView/elements/Groups.php +++ b/pandora_console/include/lib/TacticalView/elements/Groups.php @@ -113,116 +113,119 @@ class Groups extends Element $id_groups = implode(',', $id_groups); $modules = modules_get_modules_in_group($id_groups); - $total_groups = count($modules); - if ($total_groups === 0) { - return graph_nodata_image(['width' => '400']); - } - - // Best square. - $high = (float) max($width, $height); - $low = 0.0; - - while (abs($high - $low) > 0.000001) { - $mid = (($high + $low) / 2.0); - $midval = (floor($width / $mid) * floor($height / $mid)); - if ($midval >= $total_groups) { - $low = $mid; - } else { - $high = $mid; - } - } - - $square_length = min(($width / floor($width / $low)), ($height / floor($height / $low))); - // Print starmap. - $heatmap = sprintf( - '', - $width, - $height - ); - - $heatmap .= ''; - $row = 0; - $column = 0; - $x = 0; - $y = 0; - $cont = 1; - foreach ($modules as $key => $value) { - $module_id = $value['id_agente_modulo']; - $module_status = db_get_row( - 'tagente_estado', - 'id_agente_modulo', - $module_id, - ); - - $module_value = modules_get_last_value($module_id); - $status = ''; - $title = ''; - modules_get_status($module_id, $module_status['estado'], $module_value, $status, $title); - switch ($status) { - case STATUS_MODULE_NO_DATA: - // Not init status. - $status = 'notinit'; - break; - - case STATUS_MODULE_CRITICAL: - // Critical status. - $status = 'critical'; - break; - - case STATUS_MODULE_WARNING: - // Warning status. - $status = 'warning'; - break; - - case STATUS_MODULE_OK: - // Normal status. - $status = 'normal'; - break; - - case 3: - case -1: - default: - // Unknown status. - $status = 'unknown'; - break; + $heatmap = ''; + if (is_array($modules) === true) { + $total_groups = count($modules); + if ($total_groups === 0) { + return graph_nodata_image(['width' => '400']); } - $redirect = ''; - if (check_acl($config['id_user'], 0, 'AW')) { - $redirect = 'onclick="redirectHeatmap(\'module\', '.$module_id.', '.$value['id_agente'].')"'; + // Best square. + $high = (float) max($width, $height); + $low = 0.0; + + while (abs($high - $low) > 0.000001) { + $mid = (($high + $low) / 2.0); + $midval = (floor($width / $mid) * floor($height / $mid)); + if ($midval >= $total_groups) { + $low = $mid; + } else { + $high = $mid; + } } + $square_length = min(($width / floor($width / $low)), ($height / floor($height / $low))); + // Print starmap. $heatmap .= sprintf( - '', - 'rect_'.$cont, - $x, - $value['nombre'], - $y, - $row, - $column, - $square_length, - $square_length, - $status, - random_int(1, 10) + '', + $width, + $height ); - $y += $square_length; - $row++; - if ((int) ($y + $square_length) > (int) $height) { - $y = 0; - $x += $square_length; - $row = 0; - $column++; - } + $heatmap .= ''; + $row = 0; + $column = 0; + $x = 0; + $y = 0; + $cont = 1; + foreach ($modules as $key => $value) { + $module_id = $value['id_agente_modulo']; + $module_status = db_get_row( + 'tagente_estado', + 'id_agente_modulo', + $module_id, + ); + + $module_value = modules_get_last_value($module_id); + $status = ''; + $title = ''; + modules_get_status($module_id, $module_status['estado'], $module_value, $status, $title); + switch ($status) { + case STATUS_MODULE_NO_DATA: + // Not init status. + $status = 'notinit'; + break; + + case STATUS_MODULE_CRITICAL: + // Critical status. + $status = 'critical'; + break; + + case STATUS_MODULE_WARNING: + // Warning status. + $status = 'warning'; + break; + + case STATUS_MODULE_OK: + // Normal status. + $status = 'normal'; + break; + + case 3: + case -1: + default: + // Unknown status. + $status = 'unknown'; + break; + } + + $redirect = ''; + if (check_acl($config['id_user'], 0, 'AW')) { + $redirect = 'onclick="redirectHeatmap(\'module\', '.$module_id.', '.$value['id_agente'].')"'; + } + + $heatmap .= sprintf( + '', + 'rect_'.$cont, + $x, + $value['nombre'], + $y, + $row, + $column, + $square_length, + $square_length, + $status, + random_int(1, 10) + ); - if ((int) ($x + $square_length) > (int) $width) { - $x = 0; $y += $square_length; - $column = 0; $row++; - } + if ((int) ($y + $square_length) > (int) $height) { + $y = 0; + $x += $square_length; + $row = 0; + $column++; + } - $cont++; + if ((int) ($x + $square_length) > (int) $width) { + $x = 0; + $y += $square_length; + $column = 0; + $row++; + } + + $cont++; + } } $heatmap .= '