#!/usr/bin/perl -w
$| = 1;
while (<>) {
  my ($host) = split;
  print "$host: ";
  open(PING, "ping -q -c 10 $host|");
  my @lines = <PING>;
  close(PING);
  if ($lines[4] && $lines[4] =~ m{= (\d+\.\d*)/(\d+\.\d*)/(\d+\.\d*).* ms}) {
    print "$1/$2/$3\n";
    push @spreads, [ $host, $3 - $1 ];
    push @aves, [ $host, $2 ];
    push @maxes, [ $host, $3 ];
  } else {
    print "failed\n";
  }
}

@spreads = sort { $a->[1] <=> $b->[1] } @spreads;
@aves = sort { $a->[1] <=> $b->[1] } @aves;
@maxes = sort { $a->[1] <=> $b->[1] } @maxes;

# get the best average unless it is the same as best spread otherwise get 2nd
# best average
$best_ave = $aves[0]->[0] ne $spreads[0]->[0]? $aves[0] : $aves[1];

# same for best max, but gotta watch out for best average too
for ($i = 0; $maxes[$i]->[0] eq $spreads[0]->[0] ||
             $maxes[$i]->[0] eq $best_ave->[0]; $i++) {}

print "best spread: $spreads[0]->[0]\n",
  "best ave: $best_ave->[0]\n", "best max: $maxes[$i]->[0]\n";
