diff options
author | ivan <ivan> | 2009-09-14 23:52:01 +0000 |
---|---|---|
committer | ivan <ivan> | 2009-09-14 23:52:01 +0000 |
commit | 9ecb64360568b205334ae23e1051249cb56491b6 (patch) | |
tree | 3eab038020345f86de2eaccd4e198d0c6317c2d1 /httemplate/misc | |
parent | 49fbd7cc643b1c474d9a6777dac512a24504a99d (diff) |
ping tool, RT#5845
Diffstat (limited to 'httemplate/misc')
-rw-r--r-- | httemplate/misc/ping.html | 102 | ||||
-rw-r--r-- | httemplate/misc/xmlhttp-ping.html | 20 |
2 files changed, 122 insertions, 0 deletions
diff --git a/httemplate/misc/ping.html b/httemplate/misc/ping.html new file mode 100644 index 000000000..4f0360e8b --- /dev/null +++ b/httemplate/misc/ping.html @@ -0,0 +1,102 @@ +<% include('/elements/header-popup.html', "Ping $ip" ) %> + +<% include('/elements/xmlhttp.html', + 'url' => $p. 'misc/xmlhttp-ping.html', + 'subs' => [ 'ping' ], + ) +%> + +%# <img src="<%$p%>images/bullet_red.png" border=0> + + +<%ntable("#cccccc", 2)%> + +<TR> + <TD>Status</TD> + <TD BGCOLOR="#ffffff" ID="ping_status">Checking...</TD> +</TR> +<TR> + <TD>Packet loss</TD> + <TD BGCOLOR="#ffffff" ID="ping_packetloss"></TD> +</TR> +<TR> + <TD>Latency</TD> + <TD BGCOLOR="#ffffff" ID="ping_latency"></TD> +</TR> +<TR> + <TD>Packets</TD> + <TD BGCOLOR="#ffffff" ID="ping_packets"></TD> +</TR> + +</TABLE> + +<BR> +<CENTER> +<INPUT TYPE="button" VALUE="Close" onClick="parent.nd(1);"> +</CENTER> + +<SCRIPT TYPE="text/javascript"> + + var fails = 0; + var pongs = 0; + var totaltime = 0; + var avg = 0; + + function ping_update ( updatetext ) { + var pingArray = eval('(' + updatetext + ')'); + var status = pingArray[0]; + var rtt = pingArray[1]; + + if ( status == 0 ) { + fails++; + } else if ( status == 1 ) { + pongs++; + totaltime = totaltime + rtt; + avg = totaltime / pongs; + } + + var loss = 100 * fails / ( fails + pongs ); + + var statusCell = document.getElementById('ping_status'); + var packetlossCell = document.getElementById('ping_packetloss'); + var latencyCell = document.getElementById('ping_latency'); + var packetsCell = document.getElementById('ping_packets'); + + var status = ''; + // red conditions + if ( loss == 100 ) { + status = '<FONT COLOR="#ff0000">Unreachable</FONT>'; + } else + // yellow conditions + if ( loss > 50 ) { + status = '<FONT COLOR="#ff9900">High packet loss</FONT>'; + } else + if ( avg > 1 ) { + status = '<FONT COLOR="#ff9900">High latency</FONT>'; + } else { + status = '<FONT COLOR="#00cc00">Up</FONT>'; + } + + statusCell.innerHTML = '<B>' + status + '</B>'; + packetlossCell.innerHTML = '<B>' + Math.round(loss) + '%</B>'; + if ( avg > 0 ) { + latencyCell.innerHTML = '<B>' + Math.round( avg*1000 ) + 'ms</B>'; + } + var packets = fails + pongs; + packetsCell.innerHTML = '<B>' + packets + '</B>'; + + setTimeout( "ping('<%$ip%>', ping_update)", 1000 ); + + } + + ping( '<%$ip%>', ping_update ); + +</SCRIPT> + +<%init> + +my($query) = $cgi->keywords; +$query =~ /^([\d\.]+)$/ or die 'Illegal IP'; +my $ip = $1; + +</%init> diff --git a/httemplate/misc/xmlhttp-ping.html b/httemplate/misc/xmlhttp-ping.html new file mode 100644 index 000000000..e99303207 --- /dev/null +++ b/httemplate/misc/xmlhttp-ping.html @@ -0,0 +1,20 @@ +<% objToJson($return) %> +<%init> + +my $conf = new FS::Conf; + +my $sub = $cgi->param('sub'); + +die "$sub not supported" unless $sub eq 'ping'; + +my $ip = $cgi->param('arg'); + +my $ping = new Net::Ping('external', 5); +$ping->hires(1); +#my $a=time; warn "pinging\n"; +my ($ret, $duration, $ip2) = $ping->ping($ip); +#warn "done pinging (". int(time-$a). "s)\n"; + +my $return = [ $ret, $duration ]; + +</%init> |