host["hostname"] = gethostbyname($hostname); $ping->retries = 1; $ping->port = $port; $max = 0.0; $min = 9999.99; $dev = 0.0; $script_timeout = read_config_option("script_timeout"); $ping_timeout = read_config_option("ping_timeout"); switch ($ping_type) { case "ICMP": $method = PING_ICMP; break; case "TCP": $method = PING_TCP; break; case "UDP": $method = PING_UDP; break; } $i = 0; while ($i < $ping_sweeps) { $result = $ping->ping(AVAIL_PING, $method, read_config_option("ping_timeout"), 1); if (!$result) { $failed_results++; }else{ $time[$i] = $ping->ping_status; $total_time += $ping->ping_status; if ($ping->ping_status < $min) $min = $ping->ping_status; if ($ping->ping_status > $max) $max = $ping->ping_status; } $i++; /* get current time */ list($micro,$seconds) = split(" ", microtime()); $ss_fping_current = $seconds + $micro; /* if called from script server, end one second before a timeout occurs */ if ((isset($called_by_script_server)) && (($ss_fping_current - $ss_fping_start + ($ping_timeout/1000) + 1) > $script_timeout)) { $ping_sweeps = $i; break; } } if ($failed_results == $ping_sweeps) { return "loss:100.00"; }else{ $loss = ($failed_results/$ping_sweeps) * 100; $avg = $total_time/($ping_sweeps-$failed_results); /* calculate standard deviation */ $predev = 0; foreach($time as $sample) { $predev += pow(($sample-$avg),2); } $dev = sqrt($predev / count($time)); return sprintf("min:%0.4f avg:%0.4f max:%0.4f dev:%0.4f loss:%0.4f", $min, $avg, $max, $dev, $loss); } } ?>