Pinger Tool v2.0 // Reportar estado del Servicio

“Tool para reportar en tiempo real el estado de tu Red o Servicio, reduciendo reclamos telefónicos innecesarios, mediante la creacion de un componente que embeberas en la pagina web inicial de tu empresa.”

Hace algunos años tuve la necesidad de implementar en uno de mis sitios, algun sistema o especie de SNMP que sea capás de mostrar en tiempo real el estado de la red troncal de internet a los clientes.

Mas bien, la idea era reducir llamadas telefónicas innecesarias, ya que si el problema esta en el Carrier, o Telefónica aprovechamos para decir que esta andando pésimo, o que tengamos un problema nosotros mismos, en fin, estamos mostrandole al cliente “en tiempo real”, que hay un corte en tal tramo de la red o en nuestro carrier de internet.

Googleando… no pude encontrar ninguna solución sencilla que represente dicha utilidad. >Todos los SNMP que publican estados de servicios en WEB, son mas bien para usos de Admins, y no para clientes finales, entonces vienen demaciado completos y/o complejos.

Aqui debajo el ejemplo: En este caso ( al estar corriendo sobre un hosting pago y compartido ) tienen desactivado el shell_exec() por razones de seguridad y politicas propias del hosting. Por eso, solo muestra color amarillo el primer tramo y arroja el error: Warning: shell_exec() has been disabled for security reasons. (solo visible en el modo debug de Flash).
Pero don’t worry; nosotros lo queremos para nuestra pagina hosteada en nuestro servidor, situado en el mismo segmento de red que queremos monitorear. Ya que, no tiene ningun sentido que queramos ver el estado de la red estando fuera de ella, precisamente porque si hay un corte en cualquier punto de la red, y la Web y Tool estan hosteados fuera, el cliente no tiene forma accederlos y menos aun ver el estado.
Entonces, para que funcione correctamente el tool, debe estar corriendo en un servidor Linux Apache que este situado dentro de la red troncal / LAN / Intranet, etc. la cual estamos monitoreando.

Desarrollar el tool: Soluciones:

  • 1) Applet Java.
  • 2) Ajax.
  • 3) Macromedia Flash.

Opte por la Tercer opcion: “Macromedia Flash” (solo poque me resulta amigable para programar).

Explicación: Se crea un archivo SWF (extención nativa de un archivo flash compilado) que viene a ser el Front End. Este interactua con 1 archivo PHP ( que no es ni mas ni menos que un ping ) que hace de MiddleWare entre el servidor Apache donde hosteamos nuestro Site y Flash, entonces cada x tiempo ejecutamos una función de flash que llama al PHP pasandole como parámetro la IP que queremos chequear si esta caido. El PHP ejecuta el comando “PING x.x.x.x”, e imprime el resultado en una variable que parseamos desde Flash para interpretar que hacer con las graficas. Si el resultado da que perdio 1 paquete, cambia el estado del grafico (objeto que tiene como nombre de instancia la misma IP que chequeamos) a color Amarillo, inmediatamente vuelve a tirarle un ping para ver si realmente esta caido, y de ser asi cambia el estado a color Rojo. Como chequea (loopea) cada X segundos, la proxima vez evaluará en que estado debera estar el objeto. (Verde, Amarillo o Rojo).
Un poco de Codigo ActionScript:

function PING(ip){
pinger = new LoadVars();
pinger.host = ip;
pinger.sendAndLoad(pat + "ping.php?host=" + ip, pinger, "POST");
pinger.onLoad = function (success) {
if (success){
tramasDato = String(pinger.ping).split(" ");
trace(tramasDato[20] + " " + tramasDato[21] + " " + tramasDato[1]);
if (String(tramasDato[20] + " " + tramasDato[21]) != "1 received,"){
trace("PIERDE PAQUETE !!!!");
bad = bad + 1;
i = i - 1;
if (i < 0){
i = 1;
} // end if
gotoAndPlay(25);
}else{
bad = 0;
} // end if
trace("BAD:::: " + bad);
if (bad == 0){
colores(ip.replace(".", "_"), "on");
}else if (bad == 1){
colores(ip.replace(".", "_"), "lose");
}else if (bad > 1){
colores(ip.replace(".", "_"), "off");
i = i + 1;
if (i > 3){
i = 1;
} // end if
bad = 0;
} // end if
}else{
colores(tramo3.replace(".", "_"), "off");
colores(tramo2.replace(".", "_"), "off");
colores(tramo1.replace(".", "_"), "off");
}
};
}
function colores(tram, goto){
trace(eval(tram) + "  ///  " + goto);
eval(tram).gotoAndStop(goto);
}
pat = "http://www.tusitio.com.ar/";
tramo3 = "64.233.167.147" // ping a google.
tramo2 = "201.X.X.X"; // equipo de radio troncal.
tramo1 = "201.X.X.X"; // equipo de radio troncal.
actual = tramo1;
i = 1;
bad = 0;
tramasDato = new Array();

Para pulir un poco mas se podria haber creado un XML con la lista de IPs, y de esta manera no tener que editar el FLA cada ves que cambie el nro. de IP de algun tramo.

PHP del archivo ping.php:

// Declare some globals
global $ip, $host_name, $host_ip;
$host = $_GET['host'];

function get_ip()
{
if (isset($_SERVER[‘HTTP_X_FORWARDED_FOR’])) {
$ip = $_SERVER[‘HTTP_X_FORWARDED_FOR’]; }
elseif (isset($_SERVER[‘HTTP_CLIENT_IP’])) {
$ip = $_SERVER[‘HTTP_CLIENT_IP’]; }
else {
$ip = $_SERVER[‘REMOTE_ADDR’]; }

return $ip;
}

function ping($host, $ping_count)
{
if (get_ip()==”127.0.0.1″){
$command = “ping -c $ping_count $host”;
$fp = shell_exec(“$command 2>&1”);
$output = (htmlentities(trim($fp)));
echo ‘&ping=’.$output;
}else{
echo ‘&ping=error’;
}
}

ping($host, 1);

NOTA: sin duda “algo muy util para WISPs”. Espero les sirva.

Descargar Codigo Fuente y Archivos FLA, SWF y PHP.
Recuerda que tienes que tener shell_exec habilitado en tu apache.

__________________________
Tech-Nico.com

Nicolas.

5 Comentarios

  1. Hola Nico, un soft que usamos durante muchos años y que actualmente se usa es el “What’s Up” la version GOLD. Con ese podes crear usuarios y hacer correr el servidor del programa en una maquina de la lan de los clientes, asi cuando lo deseen pueden ver el estado de los equipos…
    Pero bueno, quizas se necesita un poco de conocimiento para interpretar el grafico que quizas un cliente no lo tenga…. eso no se… siempre estube del lado servidor… ja

    Saludos…

    Sebastian

  2. Nicolas
    Si tenes problemas de internet dedicado en Bahia Blanca, contactame, tengo disponibilidad de enlace 100% confiable y 100% asegurado, fibra pura para ISP (NO Telefonica, Telecom, GlobalCross.. etc)
    Saludos,
    Nelson

Deja un comentario