fixed view manage groups

This commit is contained in:
daniel 2018-09-13 16:28:08 +02:00
parent d46cfab6db
commit 5d6f414d68
4 changed files with 178 additions and 892 deletions

View File

@ -32,39 +32,38 @@ if (is_ajax ()) {
require ("general/noaccess.php");
return;
}
$get_group_json = (bool) get_parameter ('get_group_json');
$get_group_agents = (bool) get_parameter ('get_group_agents');
$get_is_disabled = (bool) get_parameter ('get_is_disabled');
if ($get_group_json) {
$id_group = (int) get_parameter ('id_group');
if ($id_group == 0) {
$group = array('id_grupo' => 0,
'nombre' => 'All',
'nombre' => 'All',
'icon' => 'world',
'parent' => 0,
'disabled' => 0,
'custom_id' => null);
echo json_encode ($group);
return;
}
if (! check_acl ($config['id_user'], $id_group, "AR")) {
db_pandora_audit("ACL Violation",
"Trying to access Alert Management");
echo json_encode (false);
return;
}
$group = db_get_row ('tgrupo', 'id_grupo', $id_group);
echo json_encode ($group);
return;
}
if ($get_group_agents) {
ob_clean();
$id_group = (int) get_parameter ('id_group');
@ -86,33 +85,33 @@ if (is_ajax ()) {
$serialized = (bool)get_parameter('serialized', false);
$serialized_separator = (string)get_parameter('serialized_separator', "|");
$force_serialized = (bool)get_parameter('force_serialized', false);
if (! check_acl ($config['id_user'], $id_group, "AR")) {
db_pandora_audit("ACL Violation",
"Trying to access Alert Management");
echo json_encode (false);
return;
}
if ( https_is_running() ) {
header('Content-type: application/json');
}
if ($filter_agents_json != '') {
$filter['id_agente'] = json_decode(io_safe_output($filter_agents_json), true);
}
if ($all_agents) {
$filter['all_agents'] = true;
}
else {
$filter['disabled'] = $disabled;
}
if ($search != '') {
$filter['string'] = $search;
}
if ($status_agents != AGENT_STATUS_ALL) {
$filter['status'] = $status_agents;
}
@ -120,10 +119,8 @@ if (is_ajax ()) {
# Juanma (22/05/2014) Fix: If remove void agents setted
$_sql_post = ' 1=1 ';
if ($show_void_agents == 0) {
$_sql_post .= ' AND id_agente IN (SELECT a.id_agente FROM tagente a, tagente_modulo b WHERE a.id_agente=b.id_agente AND b.delete_pending=0) AND \'1\'';
$filter[$_sql_post] = '1';
}
$id_groups_get_agents = $id_group;
@ -192,7 +189,7 @@ if (is_ajax ()) {
$agents = $all_agents_array;
}
echo json_encode ($agents);
return;
}
@ -208,11 +205,10 @@ if (is_ajax ()) {
echo json_encode($return);
return;
}
return;
}
if (! check_acl($config['id_user'], 0, "AW")) {
if (! check_acl($config['id_user'], 0, "PM")) {
db_pandora_audit("ACL Violation",
"Trying to access Group Management");
require ("general/noaccess.php");
@ -221,24 +217,20 @@ if (! check_acl($config['id_user'], 0, "AW")) {
// Header
if (defined('METACONSOLE')) {
agents_meta_print_header();
$sec = 'advanced';
echo '<div class="notify">';
echo __("Edit or delete groups can cause problems with synchronization");
echo '</div>';
}
else {
ui_print_page_header (__("Groups defined in %s", get_product_name()),
"images/group.png", false, "", true, "");
ui_print_page_header (
__("Groups defined in %s", get_product_name()),
"images/group.png", false, "", true, ""
);
$sec = 'gagente';
}
$create_group = (bool) get_parameter ('create_group');
$update_group = (bool) get_parameter ('update_group');
$delete_group = (bool) get_parameter ('delete_group');
@ -258,7 +250,7 @@ if (($create_group) && (check_acl($config['id_user'], 0, "PM"))) {
$other = (string) get_parameter ('other');
$check = db_get_value('nombre', 'tgrupo', 'nombre', $name);
$propagate = (bool) get_parameter('propagate');
/*Check if name field is empty*/
if ($name != "") {
if (!$check) {
@ -275,7 +267,7 @@ if (($create_group) && (check_acl($config['id_user'], 0, "PM"))) {
'other' => $other,
'password' => io_safe_input($group_pass)
);
$result = db_process_sql_insert('tgrupo', $values);
if ($result) {
ui_print_success_message(__('Group successfully created'));
@ -309,7 +301,7 @@ if ($update_group) {
$description = (string) get_parameter ('description');
$contact = (string) get_parameter ('contact');
$other = (string) get_parameter ('other');
/*Check if name field is empty*/
if ( $name != "") {
switch ($config["dbtype"]) {
@ -332,7 +324,7 @@ if ($update_group) {
else {
$result = false;
}
if ($result !== false) {
ui_print_success_message(__('Group successfully updated'));
}
@ -344,19 +336,19 @@ if ($update_group) {
/* Delete group */
if (($delete_group) && (check_acl($config['id_user'], 0, "PM"))) {
$id_group = (int) get_parameter ('id_group');
$usedGroup = groups_check_used($id_group);
if (!$usedGroup['return']) {
$group = db_get_row_filter('tgrupo',
array('id_grupo' => $id_group));
db_process_sql_update('tgrupo',
array('parent' => $group['parent']), array('parent' => $id_group));
$result = db_process_sql_delete('tgroup_stat',
array('id_group' => $id_group));
$result = db_process_sql_delete('tgrupo',
array('id_grupo' => $id_group));
}
@ -364,136 +356,166 @@ if (($delete_group) && (check_acl($config['id_user'], 0, "PM"))) {
ui_print_error_message(
sprintf(__('The group is not empty. It is use in %s.'), implode(', ', $usedGroup['tables'])));
}
if ($result && (!$usedGroup['return'])) {
ui_print_success_message(__('Group successfully deleted'));
}
}
else {
ui_print_error_message(__('There was a problem deleting group'));
}
}
db_clean_cache();
if ($create_group || $delete_group || $update_group) {
$groups = users_get_groups ($config['id_user'], "AR", true, true, null, 'id_grupo', false);
$groups = groups_get_groups_tree_recursive($groups);
} else {
$groups = users_get_groups_tree ($config['id_user'], "AR", true);
$acl='';
$search_name = '';
$offset = (int)get_parameter('offset', 0);
$search = (string)get_parameter('search', '');
$block_size = $config['block_size'];
if(!empty($search)){
$search_name = "AND t.nombre LIKE '%$search%'";
}
$table = new StdClass();
$table->width = '100%';
if (!users_can_manage_group_all("AR")){
$user_groups_acl = users_get_groups(false, "AR");
$groups_acl = implode(",", $user_groups_ACL);
if(empty($groups_acl)) return ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no defined groups') ) );
$all_parents = array();
$groups_count = 0;
$sons = array();
$groups_count = count($groups);
foreach ($groups as $k => $g) {
if ($g['parent'] != 0) {
$all_parents[$g['parent']] = $g['parent'];
}
}
krsort($all_parents);
foreach ($all_parents as $parent) {
foreach ($groups as $k => $g) {
if ($g['parent'] == $parent) {
$sons[$g['parent']][] = $g;
unset($groups[$k]);
}
}
$acl = "AND t.id_grupo IN ($groups_acl)";
}
$form = "<form method='post' action=''>";
$form .= "<table class='databox filters' width='100%' style='font-weight: bold;'>";
$form .= "<tr><td>" . __('Search') . '&nbsp;';
$form .= html_print_input_text ("search", $search, '', 100, 100, true);
$form .= "</td><td>";
$form .= "<input name='find' type='submit' class='sub search' value='".__('Search')."'>";
$form .= "<td></tr>";
$form .= "</table>";
$form .= "</form>";
echo $form;
$groups_sql =
"SELECT t.*,
p.nombre AS parent_name,
IF(t.parent=p.id_grupo, 1, 0) AS has_child
FROM tgrupo t
LEFT JOIN tgrupo p
ON t.parent=p.id_grupo
WHERE 1=1
$acl
$search_name
ORDER BY nombre
LIMIT $offset, $block_size
";
$groups = db_get_all_rows_sql($groups_sql);
if (!empty($groups)) {
//Count all groups for pagination only saw user and filters
$groups_sql_count = "SELECT count(*)
FROM tgrupo t
WHERE 1=1
$acl
$search_name
";
$groups_count = db_get_value_sql($groups_sql_count);
$table = new StdClass();
$table->width = '100%';
$table->class = "databox data";
$table->head = array ();
$table->head[0] = __('Name');
$table->head[1] = __('ID');
$table->head[0] = __('ID');
$table->head[1] = __('Name');
$table->head[2] = __('Icon');
$table->head[3] = __('Alerts');
$table->head[4] = __('Description');
$table->head[5] = __('Actions');
$table->head[4] = __('Parent');
$table->head[5] = __('Description');
$table->head[6] = __('Actions');
$table->align = array ();
$table->align[0] = 'right';
$table->align[2] = 'left';
$table->align[5] = 'left';
$table->size[4] = '30%';
$table->size[5] = '10%';
$table->align[6] = 'left';
$table->size[5] = '30%';
$table->size[6] = '10%';
$table->data = array ();
$offset = (int)get_parameter('offset', 0);
$limit = $offset + $config['block_size'];
$pagination = ui_pagination($groups_count,
false, 0, $config['block_size'], true, 'offset', false);
$n = -1;
$iterator = 0;
$branch_classes = array();
foreach ($groups as $group) {
$n++;
// Only print the page range
if ($n < $offset || $n >= $limit) {
continue;
foreach ($groups as $key => $group) {
$url = "index.php?sec=gagente&sec2=godmode/groups/configure_group&id_group=".$group['id_grupo'];
$url_delete = "index.php?sec=gagente&sec2=godmode/groups/group_list&delete_group=1&id_group=" . $group['id_grupo'];
$table->data[$key][0] = $group['id_grupo'];
$table->data[$key][1] = "<a href='$url'>" . $group['nombre'] . "</a>";
$table->data[$key][2] = html_print_image(
"images/groups_small/" . $group['icon'] . ".png",
true,
array(
"style" => '',
"class" => "bot",
"alt" => $group['nombre'],
"title" => $group['nombre'],
false, false, false, true
)
);
//reporting_get_group_stats
$table->data[$key][3] = $group['disabled'] ? __('Disabled') : __('Enabled');
$table->data[$key][4] = $group['parent_name'];
$table->data[$key][5] = $group['description'];
$table->data[$key][6] = "<a href='$url'>" .
html_print_image(
"images/config.png",
true,
array(
"alt" => __('Edit'),
"title" => __('Edit'),
"border" => '0'
)
) .
"</a>";
$confirm_message = __('Are you sure?');
if ($group['has_child']) {
$confirm_message = __('The child groups will be updated to use the parent id of the deleted group') . ". " . $confirm_message;
}
$symbolBranchs = ' symbol_branch_' . $group['parent'];
$has_children = isset($sons[$group['id_grupo']]);
$data = groups_get_group_to_list($group, $groups_count, $symbolBranchs, $has_children);
array_push ($table->data, $data);
$table->rowstyle[$iterator] = '';
if ($group['id_grupo'] != 0) {
$branch_classes[$group['id_grupo']] = ' branch_0';
$table->rowclass[$iterator] = 'parent_' . $group['parent'] . ' branch_0';
}
$iterator++;
groups_print_group_sons($group, $sons, $branch_classes,
$groups_count, $table, $iterator, $symbolBranchs);
$table->data[$key][6] .= '&nbsp;&nbsp;' .
'<a href="'. $url_delete. '" onClick="if (!confirm(\' '.$confirm_message.'\')) return false;">' .
html_print_image(
"images/cross.png",
true,
array(
"alt" => __('Delete'),
"title" => __('Delete'),
"border" => '0'
)
) .
"</a>";
}
echo $pagination;
echo ui_pagination(
$groups_count, false,
$offset, $block_size,
true, 'offset', false
);
html_print_table ($table);
echo $pagination;
echo ui_pagination(
$groups_count, false,
$offset, $block_size,
true, 'offset', true
);
}
else {
ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no defined groups') ) );
}
if (check_acl($config['id_user'], 0, "PM")) {
echo '<form method="post" action="index.php?sec='.$sec.'&sec2=godmode/groups/configure_group&pure='.$pure.'">';
echo '<div class="action-buttons" style="width: '.$table->width.'">';
html_print_submit_button (__('Create group'), 'crt', false, 'class="sub next"');
echo '</div>';
echo '<form method="post" action="index.php?sec='.$sec.'&sec2=godmode/groups/configure_group">';
echo '<div class="action-buttons" style="width:100%;">';
html_print_submit_button (__('Create group'), 'crt', false, 'class="sub next"');
echo '</div>';
echo '</form>';
}
enterprise_hook('close_meta_frame');
?>
<script type="text/javascript">
function showBranch(parent) {
display = $('.parent_' + parent).css('display');
if (display != 'none') {
$('.symbol_' + parent).html('+');
$('.parent_' + parent).css('display', 'none');
//Close the child branch too
$('.branch_' + parent).css('display', 'none');
$('.symbol_branch_' + parent).html('+');
}
else {
$('.symbol_' + parent).html('-');
$('.parent_' + parent).css('display', '');
}
}
</script>

View File

@ -4268,12 +4268,12 @@ function fullscale_data (
if(isset($v["datos"]) && $v["datos"]){
//max
if($v['datos'] >= $max_value){
$max_value = $v['datos'];
if((float)$v['datos'] >= $max_value_max){
$max_value_max = $v['datos'];
}
//min
if($v['datos'] <= $min_value){
$min_value = $v['datos'];
if((float)$v['datos'] <= $min_value_min){
$min_value_min = $v['datos'];
}
//avg sum
$sum_data += $v["datos"];
@ -4288,8 +4288,9 @@ function fullscale_data (
$last_data = $v["datos"];
}
}
$data["sum" . $series_suffix]['min'] = $min_value;
$data["sum" . $series_suffix]['max'] = $max_value;
$data["sum" . $series_suffix]['min'] = $min_value_min;
$data["sum" . $series_suffix]['max'] = $max_value_max;
$data["sum" . $series_suffix]['avg'] = $sum_data/$count_data;
}

View File

@ -270,22 +270,20 @@ function groups_get_childrens($parent, $groups = null, $onlyPropagate = false) {
if (empty($groups)) {
$groups = db_get_all_rows_in_table('tgrupo');
}
$return = array();
foreach ($groups as $key => $group) {
if ($group['id_grupo'] == 0) {
continue;
}
if ($group['propagate'] || $onlyPropagate) {
if ($group['parent'] == $parent) {
$return = $return + array($group['id_grupo'] => $group) + groups_get_childrens($group['id_grupo'], $groups, $onlyPropagate);
}
}
}
return $return;
}
@ -300,23 +298,20 @@ function groups_get_parents($parent, $onlyPropagate = false, $groups = null) {
if (empty($groups)) {
$groups = db_get_all_rows_in_table('tgrupo');
}
$return = array();
foreach ($groups as $key => $group) {
if ($group['id_grupo'] == 0) {
continue;
}
if (($group['id_grupo'] == $parent)
&& ($group['propagate'] || !$onlyPropagate)) {
$return = $return +
array($group['id_grupo'] => $group) +
groups_get_parents($group['parent'], $onlyPropagate, $groups);
}
}
return $return;
}
@ -373,32 +368,6 @@ function groups_give_disabled_group ($id_group) {
return (bool) db_get_value ('disabled', 'tgrupo', 'id_grupo', (int) $id_group);
}
/**
* Test if the param array is all groups in db.
*
* @param array $id_groups
*
* @return bool It's true when the array is all groups in db.
*/
function groups_is_all_group($idGroups) {
if (!is_array($idGroups))
$arrayGroups = array($idGroups);
else
$arrayGroups = $idGroups;
$groupsDB = db_get_all_rows_in_table ('tgrupo');
$returnVar = true;
foreach ($groupsDB as $group) {
if (!in_array($group['id_grupo'], $arrayGroups)) {
$returnVar = false;
break;
}
}
return $returnVar;
}
/**
* Get group icon from group.
*
@ -632,7 +601,7 @@ function groups_get_id ($group_name, $returnAllGroup = false) {
*
* @param int $id_group The group id to look for
* @param mixed filter array
* @param bool True if users with all permissions in the group are retrieved
* @param bool True if users with all permissions in the group are retrieved
*
* @return array An array with all the users or an empty array
*/
@ -641,7 +610,7 @@ function groups_get_users ($id_group, $filter = false, $return_user_all = false)
if (! is_array ($filter))
$filter = array ();
if($return_user_all){
if (is_array($id_group)){
$filter['id_grupo'] = $id_group;
@ -655,18 +624,18 @@ function groups_get_users ($id_group, $filter = false, $return_user_all = false)
$filter['id_grupo'] = $id_group;
}
$query = "SELECT tu.*
FROM tusuario tu, tusuario_perfil tup
WHERE tup.id_usuario = tu.id_user" ;
$query = "SELECT tu.*
FROM tusuario tu, tusuario_perfil tup
WHERE tup.id_usuario = tu.id_user" ;
if(is_array($filter)){
foreach ($filter as $key => $value) {
if($key != 'limit' && $key != 'order' &&
$key != 'offset' &&$key != 'group'){
$key != 'offset' &&$key != 'group'){
$filter_array["tup.".$key] = $value;
}
else{
$filter_array[$key] = $value;
$filter_array[$key] = $value;
}
}
$clause_sql = mysql_db_format_array_where_clause_sql($filter_array,'AND',false);
@ -674,451 +643,16 @@ function groups_get_users ($id_group, $filter = false, $return_user_all = false)
$query .= " AND " . $clause_sql;
}
}
$result = db_get_all_rows_sql($query);
if ($result === false){
return array ();
}
return $result;
}
/**
* Returning data for a row in the groups view (Recursive function)
*
* @param int $id_group The group id of the row
* @param array $group_all An array of all groups
* @param array $group arrayy The group name and childs
* @param array $printed_groups The printed groups list (by reference)
*
*/
function groups_get_group_row_data($id_group, $group_all, $group, &$printed_groups) {
global $config;
$rows = array();
$row = array();
if (isset($printed_groups[$id_group])) {
return;
}
// Store printed group to not print it again
$printed_groups[$id_group] = 1;
if ($id_group < 0)
return;
// Get stats for this group
$data = reporting_get_group_stats($id_group);
if ($data["total_agents"] == 0)
return; // Skip empty groups
// Calculate entire row color
if ($data["monitor_alerts_fired"] > 0) {
$row["status"] = "group_view_alrm";
}
elseif ($data["monitor_critical"] > 0) {
$row["status"] = "group_view_crit";
}
elseif ($data["monitor_warning"] > 0) {
$row["status"] = "group_view_warn";
}
elseif (($data["monitor_unknown"] > 0) || ($data["agents_unknown"] > 0)) {
$row["status"] = "group_view_unk";
}
elseif ($data["monitor_ok"] > 0) {
$row["status"] = "group_view_ok";
}
else {
$row["status"] = "group_view_normal";
}
// Group name
$group_cell = __('Group');
$row[$group_cell] = $group['prefix'];
$row[$group_cell] .= "<a href='index.php?page=agents&group=" . $id_group . "'>";
$row[$group_cell] .= ui_print_group_icon ($id_group, true, "groups_small", '', false);
$row[$group_cell] .= ui_print_truncate_text($group['name']);
$row[$group_cell] .= "</a>";
$row['group_name'] = ui_print_truncate_text($group['name']);
if ($id_group > 0)
$icon = (string) db_get_value ('icon', 'tgrupo', 'id_grupo', (int) $id_group);
else
$icon = "world";
$row['group_icon'] = html_print_image("images/groups_small/" . $icon . ".png",
true, false, true);
if (!isset($html)) {
$html = false;
}
//Update network group
if ($html) {
echo "<td class='group_view_data' style='text-align: center; vertica-align: middle;'>";
if (check_acl ($config['id_user'], $id_group, "AW")) {
echo '<a href="index.php?sec=estado&sec2=operation/agentes/group_view&update_netgroup='.$id_group.'">' .
html_print_image("images/target.png", true, array("border" => '0', "alt" => __('Force'))) . '</a>';
}
echo "</td>";
}
// Total agents
if ($id_group != 0) {
$data["total_agents"] = db_get_sql ("SELECT COUNT(id_agente)
FROM tagente
WHERE id_grupo = $id_group AND disabled = 0");
}
// Total agents
$row['links'][__('Agents')] = "index.php?" .
"page=agents&group=" . $id_group;
$row['counts'][__('Agents')] = $data["total_agents"];
$row[__('Agents')] = "<a class='link_count' href='" . $row['links'][__('Agents')] . "'>";
$row[__('Agents')] .= $row['counts'][__('Agents')];
$row[__('Agents')] .= "</a>";
// Agents unknown
$row['links'][__('Agents unknown')] = "index.php?" .
"page=agents&group=" . $id_group . "&status=" . AGENT_STATUS_UNKNOWN;
$row['counts'][__('Agents unknown')] = $data["agents_unknown"];
$row[__('Agents unknown')] = "<a class='link_count' href='" . $row['counts'][__('Agents unknown')] . "'>";
$row[__('Agents unknown')] .= $row['counts'][__('Agents unknown')];
$row[__('Agents unknown')] .= "</a>";
// Monitors Unknown
$row['links'][__('Unknown')] = "index.php?" .
"page=modules&group=" . $id_group . "&status=" . AGENT_MODULE_STATUS_UNKNOWN;
$row['counts'][__('Unknown')] = $data["monitor_unknown"];
$row[__('Unknown')] = "<a class='link_count' href='" . $row['links'][__('Unknown')] . "'>";
$row[__('Unknown')] .= $row['counts'][__('Unknown')];
$row[__('Unknown')] .= "</a>";
// Monitors Not Init
$row['links'][__('Not init')] = "index.php?" .
"page=modules&group=" . $id_group . "&status=" . AGENT_MODULE_STATUS_NOT_INIT;
$row['counts'][__('Not init')] = $data["monitor_unknown"];
$row[__('Not init')] = "<a class='link_count' href='" . $row['links'][__('Not init')] . "'>";
$row[__('Not init')] .= $row['counts'][__('Not init')];
$row[__('Not init')] .= "</a>";
// Monitors OK
$row['links'][__('Normal')] = "index.php?" .
"page=modules&group=" . $id_group . "&status=" . AGENT_MODULE_STATUS_NORMAL;
$row['counts'][__('Normal')] = $data["monitor_ok"];
$row[__('Normal')] = "<a class='link_count' href='" . $row['links'][__('Normal')] . "'>";
$row[__('Normal')] .= $row['counts'][__('Normal')];
$row[__('Normal')] .= "</a>";
// Monitors Warning
$row['links'][__('Warning')] = "index.php?" .
"page=modules&group=" . $id_group . "&status=" . AGENT_MODULE_STATUS_WARNING;
$row['counts'][__('Warning')] = $data["monitor_warning"];
$row[__('Warning')] = "<a class='link_count' href='" . $row['links'][__('Warning')] . "'>";
$row[__('Warning')] .= $row['counts'][__('Normal')];
$row[__('Warning')] .= "</a>";
// Monitors Critical
$row['links'][__('Critical')] = "index.php?" .
"page=modules&group=" . $id_group . "&status=" . AGENT_MODULE_STATUS_CRITICAL_BAD;
$row['counts'][__('Critical')] = $data["monitor_critical"];
$row[__('Critical')] = "<a class='link_count' href='" . $row['links'][__('Critical')] . "'>";
$row[__('Critical')] .= $row['counts'][__('Critical')];
$row[__('Critical')] .= "</a>";
// Alerts fired
$row['links'][__('Alerts fired')] = "index.php?" .
"page=alerts&group=" . $id_group . "&status=fired";
$row['counts'][__('Alerts fired')] = $data["monitor_alerts_fired"];
$row[__('Alerts fired')] = "<a class='link_count' href='" . $row['links'][__('Alerts fired')] . "'>";
$row[__('Alerts fired')] .= $row['counts'][__('Alerts fired')];
$row[__('Alerts fired')] .= "</a>";
$rows[$id_group] = $row;
foreach($group['childs'] as $child) {
$sub_rows = groups_get_group_row_data($child, $group_all,
$group_all[$child], $printed_groups);
if (!$html) {
if (!empty($sub_rows))
$rows = $rows + $sub_rows;
}
}
return $rows;
}
function groups_get_groups_with_agent($id_user = false, $privilege = "AR", $returnAllGroup = true, $returnAllColumns = false, $id_groups = null, $keys_field = 'id_grupo') {
$groups = users_get_groups($id_user, $privilege, $returnAllGroup, $returnAllColumns, $id_groups, $keys_field);
$return = array();
foreach ($groups as $group) {
$data = reporting_get_group_stats($group['id_grupo']);
if ($data["total_agents"] != 0) {
$return[] = $group;
}
}
return $return;
}
/**
* Print a row in the groups view (Recursive function)
*
* @param int $id_group The group id of the row
* @param array $group_all An array of all groups
* @param array $group arrayy The group name and childs
* @param array $printed_groups The printed groups list (by reference)
*
*/
function groups_get_group_row($id_group, $group_all, $group, &$printed_groups) {
global $config;
if ($id_group < 0)
return;
if (isset($printed_groups[$id_group])) {
return;
}
// Store printed group to not print it again
$printed_groups[$id_group] = 1;
// Get stats for this group
$data = reporting_get_group_stats($id_group);
if ($data["total_agents"] == 0) {
if (!empty($group['childs'])) {
$group_childrens = groups_get_childrens($id_group, null, true);
$group_childrens_agents = groups_total_agents(array_keys($group_childrens));
if (empty($group_childrens_agents)) {
return; // Skip empty groups
}
}
else {
return; // Skip empty groups
}
}
// Calculate entire row color
if ($data["monitor_alerts_fired"] > 0) {
$group_class = 'group_view_alrm';
$status_image = ui_print_status_image ('agent_alertsfired_ball.png', "", true);
}
elseif ($data["monitor_critical"] > 0) {
$group_class = 'group_view_crit';
$status_image = ui_print_status_image ('agent_critical_ball.png', "", true);
}
elseif ($data["monitor_warning"] > 0) {
$group_class = 'group_view_warn';
$status_image = ui_print_status_image ('agent_warning_ball.png', "", true);
}
elseif (($data["monitor_unknown"] > 0) || ($data["agents_unknown"] > 0)) {
$group_class = 'group_view_unk';
$status_image = ui_print_status_image ('agent_no_monitors_ball.png', "", true);
}
elseif ($data["monitor_ok"] > 0) {
$group_class = 'group_view_ok';
$status_image = ui_print_status_image ('agent_ok_ball.png', "", true);
}
elseif ($data["agent_not_init"] > 0) {
$group_class = 'group_view_not_init';
$status_image = ui_print_status_image ('agent_no_data_ball.png', "", true);
}
else {
$group_class = 'group_view_normal';
$status_image = ui_print_status_image ('agent_no_data_ball.png', "", true);
}
ob_start();
echo "<tr style='height: 35px;'>";
// Force
echo "<td class='group_view_data' style='text-align: center; vertica-align: middle;'>";
if (check_acl ($config['id_user'], $id_group, "AW")) {
echo '<a href="index.php?sec=estado&sec2=operation/agentes/group_view&update_netgroup='.$id_group.'">' .
html_print_image("images/target.png", true, array("border" => '0', "title" => __('Force'))) . '</a>';
}
echo "</td>";
// Status
// echo "<td style='text-align:center;'>" . $status_image . "</td>";
// Group name
echo "<td class='' style='font-weight: bold; font-size: 12px;'>&nbsp;&nbsp;";
//echo $group['prefix'] . ui_print_group_icon ($id_group, true, "groups_small", 'font-size: 7.5pt');
echo "&nbsp;<a class='' href='index.php?sec=estado&sec2=operation/agentes/estado_agente&group_id=$id_group'>";
echo $group['prefix'] . ui_print_truncate_text($group['name']);
echo "</a>";
echo "</td>";
// Total agents
echo "<td class='group_view_data $group_class' class='group_view_data' style='font-weight: bold; font-size: 18px; text-align: center;'>";
if ($data["total_agents"] > 0)
echo "<a class='group_view_data $group_class' style='font-weight: bold; font-size: 18px; text-align: center;'
href='index.php?sec=estado&sec2=operation/agentes/estado_agente&group_id=$id_group'>";
//Total agent field given by function reporting_get_group_stats return the number of agents
//of this groups and its children. It was done to print empty fathers of children groups.
//We need to recalculate the total agents for this group here to get only the total agents
//for this group. Of course the group All (0) is a special case.
if ($id_group != 0) {
$data["total_agents"] = db_get_sql ("SELECT COUNT(id_agente)
FROM tagente
WHERE id_grupo = $id_group AND disabled = 0");
}
echo $data["total_agents"];
echo "</a>";
// Agents unknown
if ($data["agents_unknown"] > 0) {
echo "<td class='group_view_data group_view_data_unk $group_class' style='font-weight: bold; font-size: 18px; text-align: center;'>";
echo "<a class='group_view_data group_view_data_unk $group_class' style='font-weight: bold; font-size: 18px; text-align: center;'
href='index.php?sec=estado&sec2=operation/agentes/estado_agente&group_id=$id_group&status=" . AGENT_STATUS_UNKNOWN ."'>";
echo $data["agents_unknown"];
echo "</a>";
echo "</td>";
}
else {
echo "<td class='$group_class'></td>";
}
// Agents not init
if ($data["agent_not_init"] > 0) {
echo "<td class='group_view_data group_view_data_unk $group_class' style='font-weight: bold; font-size: 18px; text-align: center;'>";
echo "<a class='group_view_data group_view_data_unk $group_class' style='font-weight: bold; font-size: 18px; text-align: center;'
href='index.php?sec=estado&sec2=operation/agentes/estado_agente&group_id=$id_group&status=" . AGENT_STATUS_NOT_INIT ."'>";
echo $data["agent_not_init"];
echo "</a>";
echo "</td>";
}
else {
echo "<td class='$group_class'></td>";
}
// Monitors Unknown
if ($data["monitor_unknown"] > 0) {
echo "<td class='group_view_data group_view_data_unk $group_class' style='font-weight: bold; font-size: 18px; text-align: center;'>";
echo "<a class='group_view_data group_view_data_unk $group_class' style='font-weight: bold; font-size: 18px; text-align: center;'
href='index.php?" .
"sec=estado&sec2=operation/agentes/status_monitor&ag_group=$id_group&status=" . AGENT_MODULE_STATUS_UNKNOWN . "'>";
echo $data["monitor_unknown"];
echo "</a>";
echo "</td>";
}
else {
echo "<td class='$group_class'></td>";
}
// Monitors Not Init
if ($data["monitor_not_init"] > 0) {
echo "<td class='group_view_data group_view_data_unk $group_class' style='font-weight: bold; font-size: 18px; text-align: center;'>";
echo "<a class='group_view_data group_view_data_unk $group_class' style='font-weight: bold; font-size: 18px; text-align: center;'
href='index.php?" .
"sec=estado&sec2=operation/agentes/status_monitor&ag_group=$id_group&status=" . AGENT_MODULE_STATUS_NOT_INIT . "'>";
echo $data["monitor_not_init"];
echo "</a>";
echo "</td>";
}
else {
echo "<td class='$group_class'></td>";
}
// Monitors OK
echo "<td class='group_view_data group_view_data_ok $group_class' style='font-weight: bold; font-size: 18px; text-align: center;'>";
if ($data["monitor_ok"] > 0) {
echo "<a class='group_view_data group_view_data_unk $group_class' style='font-weight: bold; font-size: 18px; text-align: center;'
href='index.php?" .
"sec=estado&sec2=operation/agentes/status_monitor&ag_group=$id_group&status=" . AGENT_MODULE_STATUS_NORMAL . "'>";
echo $data["monitor_ok"];
echo "</a>";
}
else {
echo "&nbsp;";
}
echo "</td>";
// Monitors Warning
if ($data["monitor_warning"] > 0) {
echo "<td class='group_view_data group_view_data_warn $group_class' style='font-weight: bold; font-size: 18px; text-align: center;'>";
echo "<a class='group_view_data group_view_data_warn $group_class' style='font-weight: bold; font-size: 18px; text-align: center;'
href='index.php?" .
"sec=estado&sec2=operation/agentes/status_monitor&ag_group=$id_group&status=" . AGENT_MODULE_STATUS_WARNING . "'>";
echo $data["monitor_warning"];
echo "</a>";
echo "</td>";
}
else {
echo "<td class='$group_class'></td>";
}
// Monitors Critical
if ($data["monitor_critical"] > 0) {
echo "<td class='group_view_data group_view_data_crit $group_class' style='font-weight: bold; font-size: 18px; text-align: center;'>";
echo "<a class='group_view_data group_view_data_crit $group_class' style='font-weight: bold; font-size: 18px; text-align: center;'
href='index.php?" .
"sec=estado&sec2=operation/agentes/status_monitor&ag_group=$id_group&status=" . AGENT_MODULE_STATUS_CRITICAL_BAD . "'>";
echo $data["monitor_critical"];
echo "</a>";
echo "</td>";
}
else {
echo "<td class='$group_class'></td>";
}
// Alerts fired
if ($data["monitor_alerts_fired"] > 0) {
echo "<td class='group_view_data group_view_data_alrm $group_class' style='font-weight: bold; font-size: 18px; text-align: center;'>";
echo "<a class='group_view_data group_view_data_alrm $group_class' style='font-weight: bold; font-size: 18px; text-align: center;'
href='index.php?" .
"sec=estado&sec2=operation/agentes/alerts_status&ag_group=$id_group&filter=fired'>";
echo $data["monitor_alerts_fired"];
echo "</a>";
echo "</td>";
}
else {
echo "<td class='$group_class'></td>";
}
echo "</tr>";
$row[$id_group] = ob_get_clean();
foreach ($group['childs'] as $child) {
if (array_key_exists($child, $group_all)) {
$row_child = groups_get_group_row($child, $group_all, $group_all[$child], $printed_groups);
if (!is_array_empty($row_child)) {
$row = $row + $row_child;
}
}
}
return $row;
}
/**
* Gets a group by id_group
*
@ -2111,172 +1645,6 @@ function groups_agents_total_counters ($group_array) {
return ($agents === false) ? $default_total : $agents;
}
/**
* Total agents in a group, (by default except disabled ones)
*
* @param mixed Array or (comma separated) string with groups
* @param bool Whether to count disabled agents
*
* @return mixed Return group count or false if something goes wrong
*
*/
function groups_total_agents ($group_array, $disabled = false) {
if (empty ($group_array)) {
return 0;
}
else if (!is_array ($group_array)) {
$group_array = array($group_array);
}
$group_clause = implode (",", $group_array);
$group_clause = "(" . $group_clause . ")";
$sql = "SELECT COUNT(*) FROM tagente WHERE id_grupo IN $group_clause";
if (!$disabled)
$sql .= " AND disabled = 0";
return db_get_sql ($sql);
}
/**
* Number of disabled agents in a group
*
* @param mixed Array or (comma separated) string with groups
*
* @return mixed Return group count or false if something goes wrong
*
*/
function groups_agent_disabled ($group_array) {
if (empty ($group_array)) {
return 0;
}
else if (!is_array ($group_array)) {
$group_array = array($group_array);
}
$group_clause = implode (",", $group_array);
$group_clause = "(" . $group_clause . ")";
$sql = "SELECT COUNT(*) FROM tagente WHERE id_grupo IN $group_clause AND disabled = 1";
return db_get_sql ($sql);
}
/**
* Return a group row for Groups managment list
*
* @param mixed Group info
* @param int total number of groups
* @param string (ref) Concatenation of branches class with the parent classes
*
* @return mixed Row with html_print_table format
*
*/
function groups_get_group_to_list($group, $groups_count, &$symbolBranchs, $has_children = false) {
$tabulation = str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', $group['deep']);
if ($group['id_grupo'] == 0) {
$symbol = '-';
}
else {
$symbol = '+';
}
$group_hash_branch = false;
if (isset($group['hash_branch'])) {
$group_hash_branch = $group['hash_branch'];
}
if ($group_hash_branch) {
$data[0] = '<strong>'.$tabulation . ' ' .
'<a href="javascript: showBranch(' . $group['id_grupo'] .
', ' . $group['parent'] . ');" title="' . __('Show branch children') .
'"><span class="symbol_' . $group['id_grupo'] . ' ' . $symbolBranchs . '">' .
$symbol . '</span> '. ui_print_truncate_text($group['nombre']) . '</a></strong>';
}
else {
$data[0] = '<strong>' . $tabulation . ' ' . ui_print_truncate_text($group['nombre']) . '</strong>';
}
$data[1] = $group['id_grupo'];
$data[2] = ui_print_group_icon($group['id_grupo'], true);
$data[3] = $group['disabled'] ? __('Disabled') : __('Enabled');
$data[4] = $group['description'];
if ($group['id_grupo'] == 0) {
$data[5] = '';
}
else {
$data[5] = '<a href="index.php?sec=gagente&' .
'sec2=godmode/groups/configure_group&' .
'id_group=' . $group['id_grupo'] . '">' . html_print_image("images/config.png", true, array("alt" => __('Edit'), "title" => __('Edit'), "border" => '0'));
//Check if there is only a group to unable delete it
if ($groups_count > 2) {
$confirm_message = __('Are you sure?');
if ($has_children) {
$confirm_message = __('The child groups will be updated to use the parent id of the deleted group') . ". " . $confirm_message;
}
$data[5] .= '&nbsp;&nbsp;' .
'<a href="index.php?sec=gagente&' .
'sec2=godmode/groups/group_list&' .
'id_group=' . $group['id_grupo'] . '&' .
'delete_group=1" onClick="if (!confirm(\' '.$confirm_message.'\')) return false;">' . html_print_image("images/cross.png", true, array("alt" => __('Delete'), "border" => '0'));
}
else {
$data[5] .= '&nbsp;&nbsp;' .
ui_print_help_tip(
__('You cannot delete the last group. A common installation must have at least one group.'), true);
}
}
return $data;
}
/**
* Store to be printed the subgroups rows (Recursive)
*
* @param mixed Group info
* @param mixed Hash list with all the groups of 2nd or higher level
* @param string (ref) Concatenation of branches classes to control the symbols from Javascript
* @param int total number of groups
* @param obj (ref) table object in html_print_table format with the stored groups
* @param int (ref) counter of the row stored
* @param string (ref) Concatenation of branches class with the parent classes
*
*/
function groups_print_group_sons($group, $sons, &$branch_classes, $groups_count, &$table, &$iterator, &$symbolBranchs) {
if (isset($sons[$group['id_grupo']])) {
foreach($sons[$group['id_grupo']] as $key => $g) {
$symbolBranchs .= ' symbol_branch_' . $g['parent'];
$has_children = isset($sons[$g['id_grupo']]);
$data = groups_get_group_to_list($g, $groups_count, $symbolBranchs, $has_children);
array_push ($table->data, $data);
$branch_classes[$g['id_grupo']] = $branch_classes[$g['parent']] . ' branch_' . $g['parent'];
$table->rowclass[$iterator] = 'parent_' . $g['parent'] . $branch_classes[$g['id_grupo']];
if ($g['deep'] == 0) {
$table->rowstyle[$iterator] = '';
}
else {
if ($g['parent'] != 0) {
$table->rowstyle[$iterator] = 'display: none;';
}
}
$iterator++;
groups_print_group_sons($g, $sons, $branch_classes, $groups_count, $table, $iterator, $symbolBranchs);
}
}
}
/**
* Return an array with the groups hierarchy (Recursive)
*
@ -2369,39 +1737,6 @@ function groups_get_tree_keys ($groups, &$group_keys) {
}
}
function groups_get_all_hierarchy_group ($id_group, $hierarchy = array()) {
global $config;
if ($id_group == 0) {
$hierarchy = groups_get_childrens($id_group);
}
else {
$hierarchy[] = $id_group;
$parent = db_get_value('parent','tgrupo','id_grupo',$id_group);
if ($parent !== 0) {
$propagate = db_get_value('propagate','tgrupo','id_grupo',$parent);
if ($propagate == 1) {
//$childrens_ids_parent = array($parent);
$hierarchy[] = $parent;
$childrens = groups_get_childrens($parent);
if (!empty($childrens)) {
foreach ($childrens as $child) {
//$childrens_ids_parent[] = (int)$child['id_grupo'];
$hierarchy[] = (int)$child['id_grupo'];
}
}
$hierarchy = groups_get_all_hierarchy_group ($parent, $hierarchy);
}
}
}
return $hierarchy;
}
function group_get_data ($id_user = false, $user_strict = false, $acltags, $returnAllGroup = false, $mode = 'group', $agent_filter = array(), $module_filter = array()) {
global $config;
if ($id_user == false) {
@ -2942,77 +2277,6 @@ function group_get_data ($id_user = false, $user_strict = false, $acltags, $retu
return $list;
}
function group_get_groups_list($id_user = false, $user_strict = false, $access = 'AR', $force_group_and_tag = true, $returnAllGroup = false, $mode = 'group') {
global $config;
if ($id_user == false) {
$id_user = $config['id_user'];
}
$acltags = tags_get_user_groups_and_tags ($id_user, $access, $user_strict);
// If using metaconsole, the strict users will use the agent table of every node
if (is_metaconsole() && $user_strict) {
$servers = metaconsole_get_servers();
$result_list = array ();
foreach ($servers as $server) {
if (metaconsole_connect($server) != NOERR) {
continue;
}
$server_list = group_get_data ($id_user, $user_strict,
$acltags, $returnAllGroup, $mode);
foreach ($server_list as $server_item) {
if (! isset ($result_list[$server_item['_name_']])) {
$result_list[$server_item['_name_']] = $server_item;
}
else {
$result_list[$server_item['_name_']]['_monitors_ok_'] += $server_item['_monitors_ok_'];
$result_list[$server_item['_name_']]['_monitors_critical_'] += $server_item['_monitors_critical_'];
$result_list[$server_item['_name_']]['_monitors_warning_'] += $server_item['_monitors_warning_'];
$result_list[$server_item['_name_']]['_agents_unknown_'] += $server_item['_agents_unknown_'];
$result_list[$server_item['_name_']]['_total_agents_'] += $server_item['_total_agents_'];
$result_list[$server_item['_name_']]['_monitors_alerts_fired_'] += $server_item['_monitors_alerts_fired_'];
if ($mode == 'tactical') {
$result_list[$server_item['_name_']]['_agents_ok_'] += $server_item['_agents_ok_'];
$result_list[$server_item['_name_']]['_agents_critical_'] += $server_item['_agents_critical_'];
$result_list[$server_item['_name_']]['_agents_warning_'] += $server_item['_agents_warning_'];
$result_list[$server_item['_name_']]['_monitors_alerts_'] += $server_item['_monitors_alerts_'];
$result_list[$server_item['_name_']]["_monitor_checks_"] += $server_item["_monitor_checks_"];
$result_list[$server_item['_name_']]["_monitor_not_normal_"] += $server_item["_monitor_not_normal_"];
$result_list[$server_item['_name_']]["_monitor_health_"] += $server_item["_monitor_health_"];
$result_list[$server_item['_name_']]["_module_sanity_"] += $server_item["_module_sanity_"];
$result_list[$server_item['_name_']]["_alerts_"] += $server_item["_alerts_"];
$result_list[$server_item['_name_']]["_alert_level_"] += $server_item["_alert_level_"];
$result_list[$server_item['_name_']]["_monitor_bad_"] += $server_item["_monitor_bad_"];
$result_list[$server_item['_name_']]["_global_health_"] += $server_item["_global_health_"];
$result_list[$server_item['_name_']]["_server_sanity_"] += $server_item["_server_sanity_"];
$result_list[$server_item['_name_']]["_monitor_alerts_fire_count_"] += $server_item["_monitor_alerts_fire_count_"];
$result_list[$server_item['_name_']]["_total_checks_"] += $server_item["_total_checks_"];
$result_list[$server_item['_name_']]["_total_alerts_"] += $server_item["_total_alerts_"];
}
}
}
metaconsole_restore_db();
}
return $result_list;
}
// If using metaconsole, the not strict users will use the metaconsole's agent cache table
else {
$result_list = group_get_data ($id_user, $user_strict, $acltags,
$returnAllGroup, $mode);
return $result_list;
}
}
function groups_get_group_deep ($id_group) {
global $config;

View File

@ -56,7 +56,6 @@ ui_print_page_header (__("Tactical view"), "", false, "", false, $updated_time);
//Currently this function makes loading this page is impossible. Change
//and create new function.
//$all_data = group_get_groups_list($config['id_user'], $user_strict, 'AR', true, false, 'tactical');
$all_data = tactical_status_modules_agents($config['id_user'], $user_strict, 'AR', $user_strict);