// Additions to Pandora FMS 1.2 graph code and new XML reporting template management // 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 (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"]."

"; $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; // Prepare data to show // For each valid group for this user, take data from agent and modules foreach ($mis_grupos as $migrupo) { if ($migrupo != "") { $grupo[$array_index]["agent"] = 0; $grupo[$array_index]["ok"] = 0; $grupo[$array_index]["down"] = 0; $grupo[$array_index]["bad"] = 0; $grupo[$array_index]["alerts"] = 0; $grupo[$array_index]["data"] = 0; $grupo[$array_index]["icon"] = dame_grupo_icono ($migrupo); $grupo[$array_index]["id_grupo"] = $migrupo; $existen_agentes =0; $sql1 = "SELECT intervalo, id_agente FROM tagente WHERE disabled=0 AND id_grupo = ".$migrupo; if ($result1 = mysql_query ($sql1)) { while ($row1 = mysql_fetch_array ($result1)) { $existen_agentes = 1; $intervalo = $row1["intervalo"]; $id_agente = $row1["id_agente"]; // Check for recent alerts if ($config_show_lastalerts == 1) if (check_alert_fired($id_agente) == 1) { $grupo[$array_index]["alerts"]++; } $grupo[$array_index]["agent"]++; $grupo[$array_index]["group"] = dame_nombre_grupo ($migrupo); // Estado grupo, agent $contador_agente++; $sql3 = "SELECT estado, utimestamp, id_agente_modulo, datos FROM tagente_estado WHERE id_agente = ".$row1["id_agente"]; $result3 = mysql_query ($sql3); while ($row3 = mysql_fetch_array ($result3)) { $estado = $row3["estado"]; $ahora = date ("Y/m/d H:i:s"); if ($config_show_unknown != 0){ // Get module interval $sql4 = "SELECT module_interval FROM tagente_modulo WHERE id_agente_modulo = ".$row3["id_agente_modulo"]; $result4 = mysql_query ($sql4); if ($row4 = mysql_fetch_array ($result4)) { $module_interval = $row4["module_interval"]; if ($module_interval > 0) { $intervalo_comp = $module_interval; } else { $intervalo_comp = $intervalo; } } $ultimo_contacto_modulo = $row3["utimestamp"]; // Defines if module is down (interval x 2 > time last contact) if ($ultimo_contacto_modulo != 0) { $seconds = strtotime ($ahora) - $ultimo_contacto_modulo; if ($seconds >= ($intervalo_comp * 2)) { $grupo[$array_index]["down"]++; } elseif ($estado != 100) { if ($row3["datos"] != 0) { $grupo[$array_index]["ok"]++; } else { $grupo[$array_index]["bad"]++; } } elseif ($estado == 100) // For data module, not monitors $grupo[$array_index]["data"]++; // Data module } // do not use module interval neither down check } elseif ($estado != 100) { if ($row3["datos"] != 0) { $grupo[$array_index]["ok"]++; } else { $grupo[$array_index]["bad"]++; } } elseif ($estado == 100) // For data module, not monitors $grupo[$array_index]["data"]++; // Data module } } } 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]["down"] > 0) { $icono_type = " "; } if ($grupo[$real_count]["bad"] > 0) { $icono_type = $icono_type." "; } if ($grupo[$real_count]["ok"] > 0) { $icono_type = $icono_type." "; } if ($grupo[$real_count]["data"] > 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." "; } $celda = ""; } echo "
"; // Yellow border if agents down / unknown if ($grupo[$real_count]["down"] > 0) $celda = ""; // Red border if agents bad if ($grupo[$real_count]["bad"] > 0) $celda = ""; if (($grupo[$real_count]["bad"] > 0) && ($grupo[$real_count]["down"] > 0)) $celda = ""; $celda .= ""; // Add group icon $celda .= ""; // Add float info table $celda .= "
". $lang_label["agents"].":
". $grupo[$real_count]["agent"]."
". ucfirst($lang_label["monitors"]).":
".$lang_label["ok"].": ".$grupo[$real_count]["ok"]."
".$lang_label["down"].": ". $grupo[$real_count]["down"]."
".$lang_label["fail"].": ". $grupo[$real_count]["bad"]."
".$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"]."
"; } ?>