<?php // Pandora FMS - http://pandorafms.com // ================================================== // Copyright (c) 2005-2011 Artica Soluciones Tecnologicas // Please see http://pandorafms.org for full contribution list // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; version 2 // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // Load global vars global $config; if (is_ajax ()) { check_login (); require_once('include/functions_agents.php'); $get_info_alert_module_group = (bool)get_parameter('get_info_alert_module_group'); $module_group = (int)get_parameter('module_group'); $id_agent_group = (int)get_parameter('id_agent_group'); $data = false; if ($get_info_alert_module_group) { $agents = agents_get_group_agents($id_agent_group); if (!empty($agents)) { $alerts = agents_get_alerts_simple(array_keys($agents)); foreach ($alerts as $alert) { $module = db_get_row_filter('tagente_modulo', array('id_agente_modulo' => $alert['id_agent_module'])); if ($module_group == $module['id_module_group']) { if ($alert["times_fired"] > 0) { $data = true; echo '<strong>' . __('Number fired of alerts').': </strong> ' . $alert["times_fired"] . '<br />'; $agent = db_get_row('tagente', 'id_agente', $module['id_agente']); echo '<strong>' . __('Agent').': </strong>'; echo io_safe_output($agent['nombre']) . '<br />'; echo '<strong>' . __('Module') . ': </strong>'; echo io_safe_output($module['nombre']) . '<br />'; $template = db_get_row('talert_templates', 'id' , $alert['id_alert_template']); echo '<strong>' . __('Alert template') . ': </strong>'; echo io_safe_output($template['name']) . '<br />'; $sql = 'SELECT * FROM talert_template_module_actions AS t1 INNER JOIN talert_actions AS t2 ON t1.id_alert_action = t2.id WHERE t1.id_alert_template_module = ' . $template['id'] . ' OR t2.id = ' . $template['id_alert_action'] . ';'; $actions = db_get_all_rows_sql($sql); if ($actions === false) { $actions = array(); } echo '<strong>' . __('Actions') . ': </strong>' . '<br />'; echo '<ul style="margin-top: 0px; margin-left: 30px;">'; foreach ($actions as $action) { echo '<li style="list-style: disc;">' . $action['name'] . '</li>'; } echo '</ul>'; if ($alert != end($alerts)) { echo '<hr />'; } } } } if (!$data) { echo '<i>These module/s have no alerts or alert/s are not fired</i>'; } } else { echo '<i>No available data</i>'; } } else { echo '<i>No available data</i>'; } } /** * Translate the array texts using gettext */ function translate(&$item, $key) { $item = __($item); } /** * The main function of module groups and the enter point to * execute the code. */ function mainModuleGroups() { global $config; //the useful global var of Pandora Console, it has many data can you use require_once ('include/functions_reporting.php'); require_once($config['homedir'] . "/include/functions_agents.php"); require_once($config['homedir'] . "/include/functions_users.php"); //The big query switch ($config["dbtype"]) { case "mysql": $sql = "SELECT COUNT(id_agente) AS count, estado FROM tagente_estado WHERE utimestamp != 0 AND id_agente IN (SELECT id_agente FROM tagente WHERE id_grupo = %d AND disabled IS FALSE) AND id_agente_modulo IN (SELECT id_agente_modulo FROM tagente_modulo WHERE id_module_group = %d AND disabled IS FALSE AND delete_pending IS FALSE) GROUP BY estado"; break; case "postgresql": $sql = "SELECT COUNT(id_agente) AS count, estado FROM tagente_estado WHERE utimestamp != 0 AND id_agente IN (SELECT id_agente FROM tagente WHERE id_grupo = %d AND disabled = 0) AND id_agente_modulo IN (SELECT id_agente_modulo FROM tagente_modulo WHERE id_module_group = %d AND disabled = 0 AND delete_pending = 0) GROUP BY estado"; break; case "oracle": $sql = "SELECT COUNT(id_agente) AS count, estado FROM tagente_estado WHERE utimestamp != 0 AND id_agente IN (SELECT id_agente FROM tagente WHERE id_grupo = %d AND (disabled IS NOT NULL AND disabled <> 0)) AND id_agente_modulo IN (SELECT id_agente_modulo FROM tagente_modulo WHERE id_module_group = %d AND (disabled IS NOT NULL AND disabled <> 0) AND (delete_pending IS NOT NULL AND delete_pending <> 0)) GROUP BY estado"; break; } ui_print_page_header (__("Combined table of agent group and module group"), "images/brick.png", false, "", false, ''); echo "<p>" . __("This table shows in columns the modules group and in rows agents group. The cell shows all modules") . "</p>"; $agentGroups = users_get_groups ($config['id_user'], "AR", false); $modelGroups = users_get_all_model_groups(); if(!empty($agentGroups) && !empty($modelGroups)) { array_walk($modelGroups, 'translate'); //Translate all head titles to language is set foreach ($modelGroups as $i => $n) { $modelGroups[$i] = ui_print_truncate_text($n, GENERIC_SIZE_TEXT); } $head = $modelGroups; array_unshift($head, ' '); //Metaobject use in html_print_table $table = null; $table->align[0] = 'right'; //Align to right the first column. $table->style[0] = 'color: #ffffff; background-color: #778866; font-weight: bolder;'; $table->head = $head; $table->width = '98%'; //The content of table $tableData = array(); $fired = false; //Create rows and cells foreach ($agentGroups as $idAgentGroup => $name) { $row = array(); array_push($row, ui_print_truncate_text($name, GENERIC_SIZE_TEXT)); foreach ($modelGroups as $idModelGroup => $modelGroup) { $query = sprintf($sql,$idAgentGroup, $idModelGroup); $rowsDB = db_get_all_rows_sql ($query); $agents = agents_get_group_agents($idAgentGroup); if (!empty($agents)) { $alerts = agents_get_alerts_simple(array_keys($agents)); foreach ($alerts as $alert) { $module = db_get_row_filter('tagente_modulo', array('id_agente_modulo' => $alert['id_agent_module'])); if ($idModelGroup == $module['id_module_group']) { if ($alert["times_fired"] > 0) { $fired = true; } } } } $states = array(); if ($rowsDB !== false) { foreach ($rowsDB as $rowDB) { $states[$rowDB['estado']] = $rowDB['count']; } } $count = 0; foreach ($states as $idState => $state) { $count += $state; } $color = 'transparent'; //Defaut color for cell $font_color = '#000000'; //Default font color for cell if ($count == 0) { $color = '#eeeeee'; //Soft grey when the cell for this model group and agent group hasn't modules. $alinkStart = ''; $alinkEnd = ''; } else { if ($fired) { $color = '#ffa300'; //Orange when the cell for this model group and agent has at least one alert fired. } else if (array_key_exists(1,$states)) { $color = '#cc0000'; //Red when the cell for this model group and agent has at least one module in critical state and the rest in any state. $font_color = '#ffffff'; } elseif (array_key_exists(2,$states)) { $color = '#fce94f'; //Yellow when the cell for this model group and agent has at least one in warning state and the rest in green state. } elseif (array_key_exists(3,$states)) { $color = '#babdb6'; //Grey when the cell for this model group and agent has at least one module in unknown state and the rest in any state. } elseif (array_key_exists(0,$states)) { $color = '#8ae234'; //Green when the cell for this model group and agent has OK state all modules. } $alinkStart = '<a class="info_cell" rel="ajax.php?page=extensions/module_groups&get_info_alert_module_group=1&module_group=' . $idModelGroup . '&id_agent_group=' . $idAgentGroup . '" href="index.php?sec=estado&sec2=operation/agentes/status_monitor&status=-1&ag_group=' . $idAgentGroup . '&modulegroup=' . $idModelGroup . '" style="color: ' . $font_color . '; font-size: 18px;";>'; $alinkEnd = '</a>'; } array_push($row, '<div style="background: ' . $color . '; height: 25px; margin-left: auto; margin-right: auto; text-align: center; padding-top: 0px; font-size: 18px;"> ' . $alinkStart . $count . $alinkEnd . '</div>'); } array_push($tableData,$row); } $table->data = $tableData; echo "<div style='width:98%; overflow-x:auto;'>"; html_print_table($table); echo "</div>"; echo "<p>" . __("The colours meaning:") . "<ul style='float: left;'>" . '<li style="clear: both;"> <div style="float: left; background: #ffa300; height: 20px; width: 80px;margin-right: 5px; margin-bottom: 5px;"> </div>' . __("Orange cell when the module group and agent have at least one alarm fired.") . '</li>' . '<li style="clear: both;"> <div style="float: left; background: #cc0000; height: 20px; width: 80px;margin-right: 5px; margin-bottom: 5px;"> </div>' . __("Red cell when the module group and agent have at least one module in critical status and the others in any status") . '</li>' . '<li style="clear: both;"> <div style="float: left; background: #fce94f; height: 20px; width: 80px;margin-right: 5px; margin-bottom: 5px;"> </div>' . __("Yellow cell when the module group and agent have at least one in warning status and the others in grey or green status") . '</li>' . '<li style="clear: both;"> <div style="float: left; background: #8ae234; height: 20px; width: 80px;margin-right: 5px; margin-bottom: 5px;"> </div>' . __("Green cell when the module group and agent have all modules in OK status") . '</li>' . '<li style="clear: both;"> <div style="float: left; background: #babdb6; height: 20px; width: 80px;margin-right: 5px; margin-bottom: 5px;"> </div>' . __("Grey cell when the module group and agent have at least one in unknown status and the others in green status") . '</li>' . "</ul>" . "</p>"; } else { echo "<div class='nf'>".__('There are no defined groups or module groups')."</div>"; } ui_require_css_file('cluetip'); ui_require_jquery_file('cluetip'); ?> <script> $(document).ready (function () { $("a.info_cell").cluetip ({ arrows: true, attribute: 'rel', cluetipClass: 'default' }); }); </script> <?php } extensions_add_operation_menu_option(__("Modules groups"), 'estado', 'module_groups/brick.png'); extensions_add_main_function('mainModuleGroups'); ?>