".__('Counters Module').'

'; echo "
  • ".__('Alerts_Fired').': '.$send_tooltip['alerts_module_count'].'
  • '; echo "
  • ".__('Critical').': '.$send_tooltip['critical_module_count'].'
  • '; echo "
  • ".__('warning').': '.$send_tooltip['warning_module_count'].'
  • '; echo "
  • ".__('Unknown').': '.$send_tooltip['unknown_module_count'].'
  • '; echo "
  • ".__('OK').': '.$send_tooltip['normal_module_count'].'
  • '; echo "
  • ".__('Not_init').': '.$send_tooltip['notInit_module_count'].'
  • '; } } /** * The main function of module groups and the enter point to * execute the code. * * @return void */ function mainModuleGroups() { global $config; include_once $config['homedir'].'/include/class/TreeGroup.class.php'; include_once $config['homedir'].'/include/functions_groupview.php'; $tree_group = new TreeGroup('group', 'group'); $tree_group->setPropagateCounters(false); $tree_group->setDisplayAllGroups(true); $tree_group->setFilter( [ 'searchAgent' => '', 'statusAgent' => AGENT_STATUS_ALL, 'searchModule' => '', 'statusModule' => -1, 'groupID' => 0, 'tagID' => 0, 'show_not_init_agents' => 1, 'show_not_init_modules' => 1, ] ); $info = $tree_group->getArray(); $info = groupview_plain_groups($info); $offset = get_parameter('offset', 0); $agent_group_search = get_parameter('agent_group_search', ''); $module_group_search = get_parameter('module_group_search', ''); // Check the user's group permissions. $user_groups = users_get_groups($config['user'], 'AR'); $info = array_filter( $info, function ($v) use ($user_groups) { return $user_groups[$v['id']] != null; }, ARRAY_FILTER_USE_BOTH ); $info = array_filter( $info, function ($v) use ($agent_group_search) { return preg_match( '/'.$agent_group_search.'/i', $v['name'] ); }, ARRAY_FILTER_USE_BOTH ); if (empty($info) === false) { $groups_view = ($is_not_paginated) ? $info : array_slice( $info, $offset, $config['block_size'] ); $agents_counters = array_reduce( $groups_view, function ($carry, $item) { $carry[$item['id']] = $item; return $carry; }, [] ); $ids_array = array_keys($agents_counters); $ids_group = implode(',', $ids_array); } else { $ids_group = -1; } $counter = count($info); $condition_critical = modules_get_state_condition(AGENT_MODULE_STATUS_CRITICAL_ALERT); $condition_warning = modules_get_state_condition(AGENT_MODULE_STATUS_WARNING_ALERT); $condition_unknown = modules_get_state_condition(AGENT_MODULE_STATUS_UNKNOWN); $condition_not_init = modules_get_state_condition(AGENT_MODULE_STATUS_NO_DATA); $condition_normal = modules_get_state_condition(AGENT_MODULE_STATUS_NORMAL); $array_for_defect = []; $array_module_group = []; $array_data = []; $sql = 'SELECT id_mg, `name` FROM tmodule_group'; $array_mod = db_get_all_rows_sql($sql); foreach ($array_mod as $key => $value) { $array_module_group[$value['id_mg']] = $value['name']; } $array_module_group[0] = 'Nothing'; $array_module_group = array_filter( $array_module_group, function ($v) use ($module_group_search) { return preg_match('/'.$module_group_search.'/i', $v); }, ARRAY_FILTER_USE_BOTH ); foreach ($agents_counters as $key => $value) { $array_for_defect[$key]['gm'] = $array_module_group; $array_for_defect[$key]['data']['name'] = $value['name']; $array_for_defect[$key]['data']['parent'] = $value['parent']; $array_for_defect[$key]['data']['icon'] = $value['icon']; } $sql = sprintf( "SELECT SUM(IF(tae.alert_fired <> 0, 1, 0)) AS alerts_module_count, SUM(IF(%s, 1, 0)) AS warning_module_count, SUM(IF(%s, 1, 0)) AS unknown_module_count, SUM(IF(%s, 1, 0)) AS notInit_module_count, SUM(IF(%s, 1, 0)) AS critical_module_count, SUM(IF(%s, 1, 0)) AS normal_module_count, COUNT(tae.id_agente_modulo) AS total_count, tmg.id_mg, tmg.name as n, tg.id_grupo FROM ( SELECT tam.id_agente_modulo, tam.id_module_group, ta.id_grupo AS g, tae.estado, SUM(IF(tatm.last_fired <> 0, 1, 0)) AS alert_fired FROM tagente_modulo tam LEFT JOIN talert_template_modules tatm ON tatm.id_agent_module = tam.id_agente_modulo AND tatm.times_fired = 1 LEFT JOIN tagente_estado tae ON tae.id_agente_modulo = tam.id_agente_modulo INNER JOIN tagente ta ON ta.id_agente = tam.id_agente WHERE ta.disabled = 0 AND tam.disabled = 0 AND tam.id_modulo <> 0 AND tam.delete_pending = 0 AND ta.id_grupo IN (%s) GROUP BY tam.id_agente_modulo UNION ALL SELECT tam.id_agente_modulo, tam.id_module_group, tasg.id_group AS g, tae.estado, SUM(IF(tatm.last_fired <> 0, 1, 0)) AS alert_fired FROM tagente_modulo tam LEFT JOIN talert_template_modules tatm ON tatm.id_agent_module = tam.id_agente_modulo AND tatm.times_fired = 1 LEFT JOIN tagente_estado tae ON tae.id_agente_modulo = tam.id_agente_modulo INNER JOIN tagente ta ON ta.id_agente = tam.id_agente INNER JOIN tagent_secondary_group tasg ON ta.id_agente = tasg.id_agent WHERE ta.disabled = 0 AND tam.disabled = 0 AND tam.delete_pending = 0 AND tasg.id_group IN (%s) GROUP BY tam.id_agente_modulo, tasg.id_group ) AS tae RIGHT JOIN tgrupo tg ON tg.id_grupo = tae.g INNER JOIN ( SELECT * FROM tmodule_group UNION ALL SELECT 0 AS 'id_mg', 'Nothing' AS 'name' ) AS tmg ON tae.id_module_group = tmg.id_mg GROUP BY tae.g, tmg.id_mg", $condition_warning, $condition_unknown, $condition_not_init, $condition_critical, $condition_normal, $ids_group, $ids_group ); $array_data_prev = db_get_all_rows_sql($sql); foreach ($array_data_prev as $key => $value) { $array_data[$value['id_grupo']][$value['id_mg']] = $value; } // Header. ui_print_standard_header( __('Combined table of agent group and module group'), 'images/module_group.png', false, '', false, [], [ [ 'link' => '', 'label' => __('Monitoring'), ], [ 'link' => '', 'label' => __('Views'), ], ] ); echo ""; echo ""; echo '
    '; echo __('Search by agent group').' '; html_print_input_text('agent_group_search', $agent_group_search); echo ''; echo __('Search by module group').' '; html_print_input_text('module_group_search', $module_group_search); echo ''; echo ""; echo ''; echo ''; echo '
    '; $cell_style = ' min-width: 60px; width: 100%; margin: 0; overflow:hidden; text-align: center; padding: 5px; padding-bottom:10px; font-size: 18px; text-align: center; '; if ($info && $array_module_group) { $table = new StdClass(); $table->style[0] = 'color: #ffffff; background-color: #373737; font-weight: bolder; min-width: 230px;'; $table->width = '100%'; if ($config['style'] === 'pandora_black') { $background_color = '#333'; } else { $background_color = '#fff'; } $head[0] = __('Groups'); $headstyle[0] = 'width: 20%; font-weight: bolder;'; foreach ($array_module_group as $key => $value) { $headstyle[] = 'min-width: 60px;max-width: 5%;text-align:center; color: #ffffff; background-color: #373737; font-weight: bolder;'; $head[] = ui_print_truncate_text($value, GENERIC_SIZE_TEXT, true, true, true, '…', 'color:#FFF'); } $i = 0; foreach ($array_for_defect as $key => $value) { $deep = groups_get_group_deep($key); $data[$i][0] = $deep.ui_print_truncate_text($value['data']['name'], GENERIC_SIZE_TEXT, true, true, true, '…', 'color:#FFF'); $j = 1; if (isset($array_data[$key])) { foreach ($value['gm'] as $k => $v) { if (isset($array_data[$key][$k])) { $send_tooltip = json_encode($array_data[$key][$k]); $rel = 'ajax.php?page=extensions/module_groups&get_info_alert_module_group=1&send_tooltip='.$send_tooltip; $url = 'index.php?sec=estado&sec2=operation/agentes/status_monitor&status=-1&ag_group='.$key.'&modulegroup='.$k; if ($array_data[$key][$k]['alerts_module_count'] != 0) { $color = COL_ALERTFIRED; // Orange when the cell for this model group and agent has at least one alert fired. } else if ($array_data[$key][$k]['critical_module_count'] != 0) { $color = COL_CRITICAL; // Red when the cell for this model group and agent // has at least one module in critical state and the rest in any state. } else if ($array_data[$key][$k]['warning_module_count'] != 0) { $color = COL_WARNING; // Yellow when the cell for this model group and agent // has at least one in warning state and the rest in green state. } else if ($array_data[$key][$k]['unknown_module_count'] != 0) { $color = COL_UNKNOWN; // Grey when the cell for this model group and agent // has at least one module in unknown state and the rest in any state. } else if ($array_data[$key][$k]['normal_module_count'] != 0) { $color = COL_NORMAL; // Green when the cell for this model group and agent has OK state all modules. } else if ($array_data[$key][$k]['notInit_module_count'] != 0) { $color = COL_NOTINIT; // Blue when the cell for this module group and all modules have not init value. } $data[$i][$j] = "
    "; $data[$i][$j] .= ''; $data[$i][$j] .= $array_data[$key][$k]['total_count']; $data[$i][$j] .= '
    '; } else { $data[$i][$j] = "
    "; $data[$i][$j] .= 0; $data[$i][$j] .= '
    '; } $j++; } } else { foreach ($value['gm'] as $k => $v) { $data[$i][$j] = "
    "; $data[$i][$j] .= 0; $data[$i][$j] .= '
    '; $j++; } } $i++; } $table->head = $head; $table->headstyle = $headstyle; $table->data = $data; ui_pagination($counter); echo "
    "; html_print_table($table); echo '
    '; ui_pagination($counter); echo "
    "; echo ''; echo "'; echo "'; echo "'; echo "'; echo "'; echo "'; echo "'; echo '
    ".__('Legend').'
    ".__('Orange cell when the module group and agent have at least one alarm fired.').'
    ".__('Red cell when the module group and agent have at least one module in critical status and the others in any status').'
    ".__('Yellow cell when the module group and agent have at least one in warning status and the others in grey or green status').'
    ".__('Grey cell when the module group and agent have at least one in unknown status and the others in green status').'
    ".__('Green cell when the module group and agent have all modules in OK status').'
    ".__('Blue cell when the module group and agent have all modules in not init status.').'
    '; echo '
    '; } else { ui_print_info_message(['no_close' => true, 'message' => __('This table shows in columns the modules group and in rows agents group. The cell shows all modules') ]); ui_print_info_message(['no_close' => true, 'message' => __('There are no defined groups or module groups') ]); } ui_require_css_file('cluetip', 'include/styles/js/'); ui_require_jquery_file('cluetip'); ?>