// Additions to Pandora FMS 1.2 graph code // Copyright (c) 2005-2007 Artica Soluciones Tecnologicas, info@artica.es // // 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. // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // Load global vars require("include/config.php"); if (! isset($config_show_lastalerts)) $config_show_lastalerts=1; if (give_acl ($id_user, 0, "AR") != 1) { audit_db ($id_user, $REMOTE_ADDR, "ACL Violation", "Trying to access Agent view (Grouped)"); require ("general/noaccess.php"); exit; } echo "

".$lang_label["ag_title"]." > ".$lang_label["group_view"]." ".$lang_label["help"]."

"; // Get group list that user has access $mis_grupos = list_group2 ($id_user); // Update network modules for this group // Check for Network FLAG change request if (isset ($_GET["update_netgroup"])) { if (give_acl ($id_user, $_GET["update_netgroup"], "AW") == 1) { $sql = "SELECT * FROM tagente WHERE id_grupo = ". $_GET["update_netgroup"]; $result = mysql_query ($sql); while ($row = mysql_fetch_array ($result)) { $id_agente = $row["id_agente"]; $query2 ="UPDATE tagente_modulo SET flag=1 WHERE id_agente = ".$id_agente; $res = mysql_query ($query2); } } } $contador_grupo = 0; $contador_agente = 0; $array_index = 0; $ahora=date("Y/m/d H:i:s"); $ahora_sec = strtotime($ahora); // Prepare data to show // For each valid group for this user, take data from agent and modules foreach ($mis_grupos as $migrupo) { if (($migrupo != "") && ($migrupo != 1)) { $existen_agentes = 0; $grupo[$array_index]["agent"] = 0; $grupo[$array_index]["ok"] = 0; $grupo[$array_index]["bad"] = 0; $grupo[$array_index]["alerts"] = 0; $grupo[$array_index]["down"] = 0; $grupo[$array_index]["icon"] = dame_grupo_icono ($migrupo); $grupo[$array_index]["id_grupo"] = $migrupo; $grupo[$array_index]["group"] = dame_nombre_grupo ($migrupo); $sql0 = "SELECT COUNT(id_agente) FROM tagente WHERE id_grupo = $migrupo AND disabled = 0"; $result0 = mysql_query ($sql0); $row0 = mysql_fetch_array ($result0); $contador_agente = $contador_agente + $row0[0]; $grupo[$array_index]["agent"] = $row0[0]; if ($row0[0] > 0) $existen_agentes = 1; // SQL Join to get monitor status for agents belong this group $sql1 = "SELECT tagente.id_agente, tagente_estado.estado, tagente_estado.datos, tagente_estado.current_interval, tagente_estado.utimestamp, tagente_estado.id_agente_modulo FROM tagente, tagente_estado WHERE tagente.disabled = 0 AND tagente.id_grupo = $migrupo AND tagente.id_agente = tagente_estado.id_agente AND tagente_estado.estado != 100 AND tagente_estado.utimestamp != 0"; if ($result1 = mysql_query ($sql1)){ while ($row1 = mysql_fetch_array ($result1)) { $id_agente = $row1[0]; $estado = $row1[1]; $datos = $row1[2]; $module_interval = $row1[3]; $seconds = $ahora_sec - $row1[4]; $id_agente_modulo = $row1[5]; if ($seconds >= ($module_interval*2)) $grupo[$array_index]["down"]++; elseif ($datos != 0) { $grupo[$array_index]["ok"]++; } else { $grupo[$array_index]["bad"]++; } } } if ($config_show_lastalerts == 1){ // How many alerts has been fired recently for this group: // SQL Join to get alert status for agents belong this group $sql1 = "SELECT SUM(talerta_agente_modulo.times_fired) FROM tagente_modulo, talerta_agente_modulo, tagente WHERE tagente.disabled = 0 AND tagente.id_grupo = $migrupo AND tagente.id_agente = tagente_modulo.id_agente AND talerta_agente_modulo.id_agente_modulo = tagente_modulo.id_agente_modulo"; if ($result1 = mysql_query ($sql1)){ $row1 = mysql_fetch_array ($result1); $grupo[$array_index]["alerts"] = $row1[0]; } } if ($existen_agentes == 1){ $array_index++; } } } // Draw data if ($contador_agente != 0) { $ancho = ceil(sqrt($array_index+1)); $real_count =0; echo ""; for ($table=0; $table < $ancho; $table++) { echo ""; for ($table_row=0; $table_row < $ancho; $table_row++) { if ($real_count < $array_index) { $group_name = $grupo[$real_count]["group"]; $icono_grupo = $grupo[$real_count]["icon"]; $icono_type = ""; if ($grupo[$real_count]["bad"] > 0) { $icono_type = $icono_type." "; } if ($grupo[$real_count]["ok"] > 0) { $icono_type = $icono_type." "; } // Show yellow light if there are recent alerts fired for this group if ($grupo[$real_count]["alerts"] > 0 ){ $icono_type=$icono_type." "; } // Show grey light if there are agent down for this group if ($grupo[$real_count]["down"] > 0 ){ $icono_type=$icono_type." "; } // Show red flag is group has disabled alert system if (give_disabled_group($grupo[$real_count]["id_grupo"]) == 1) $icono_type = $icono_type."  ".$lang_label["disabled"].""; // By default green border $celda = ""; } echo "
"; // Grey border if agent down if ($grupo[$real_count]["down"] > 0) $celda = ""; // Yellow border if agents with alerts if ($grupo[$real_count]["alerts"] > 0) $celda = ""; // Red border if agents bad if ($grupo[$real_count]["bad"] > 0) $celda = ""; // Orange if alerts and down modules if (($grupo[$real_count]["bad"] > 0) && ($grupo[$real_count]["alerts"] > 0)) $celda = ""; $celda .= ""; // Add group icon $celda .= ""; // Add float info table $celda .= "
". $lang_label["agents"].":
". $grupo[$real_count]["agent"]."
"; if ($config_show_lastalerts == 1) $celda .= ""; $celda .= "
". ucfirst($lang_label["monitors"]).":
".$lang_label["ok"].": ".$grupo[$real_count]["ok"]."
".$lang_label["fail"].": ". $grupo[$real_count]["bad"]."
".$lang_label["down"].": ". $grupo[$real_count]["down"]."
".$lang_label["alerts"].": ". $grupo[$real_count]["alerts"]."
"; // Render network exec module button, only when this group is writtable by user if (give_acl ($id_user, $grupo[$real_count]["id_grupo"], "AW") == 1) { $celda .= "  "; } $celda .= "

". $icono_type."

".$group_name.""; echo $celda; } $real_count++; } echo "
"; } else { echo "
".$lang_label["no_agent_def"]."
"; } ?>