".__('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 "';
$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] = "';
} 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 "".__('Legend').' |
';
echo " | ".__('Orange cell when the module group and agent have at least one alarm fired.').' |
';
echo " | ".__('Red cell when the module group and agent have at least one module in critical status and the others in any status').' |
';
echo " | ".__('Yellow cell when the module group and agent have at least one in warning status and the others in grey or green status').' |
';
echo " | ".__('Grey cell when the module group and agent have at least one in unknown status and the others in green status').' |
';
echo " | ".__('Green cell when the module group and agent have all modules in OK status').' |
';
echo " | ".__('Blue cell when the module group and agent have all modules in not init status.').' |
';
echo '
';
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');
?>