#!/usr/local/bin/perl

use strict;
use warnings;
use Time::HiRes qw(usleep);
use Text::Table;
my $hostcommand = "/usr/local/bin/host";

die "Usage: test-dns.pl <hostname> <dns server> [<dns server>...]" unless defined $ARGV[1];

my $hostname = shift;
my %hash;
foreach my $dnsserver (@ARGV) {
	$hash{$dnsserver}{count} = 0;
	$hash{$dnsserver}{avg} = 0;
	$hash{$dnsserver}{lowest} = 999999;
	$hash{$dnsserver}{highest} = 0;
	$hash{$dnsserver}{absurd} = 0;
	$hash{$dnsserver}{total} = 0;
}
while (1) {
	my $tb = Text::Table->new("DNS Server:","Queries:", "Last:", "Low:", "Avg:", "High", "Over 3 secs:");
	foreach my $dnsserver (@ARGV) {
		my $pretime = Time::HiRes::time;
		`$hostcommand $hostname $dnsserver > /dev/null`;
		my $posttime = Time::HiRes::time;
		my $timetaken = ($posttime - $pretime) * 1000;
		$timetaken =~ s/^(\d+).*/$1/g;
		$hash{$dnsserver}{count}++;
		$hash{$dnsserver}{total} += $timetaken;
		if ($timetaken < $hash{$dnsserver}{lowest}) {
			$hash{$dnsserver}{lowest} = $timetaken;
		} elsif ($timetaken > $hash{$dnsserver}{highest}) {
			$hash{$dnsserver}{highest} = $timetaken;
		}
		if ($timetaken > 3000) {$hash{$dnsserver}{absurd}++;}
		$hash{$dnsserver}{avg} = $hash{$dnsserver}{total} / $hash{$dnsserver}{count};
		$hash{$dnsserver}{avg} =~  s/^(\d+).*/$1/g;
		$tb->add($dnsserver, $hash{$dnsserver}{count},$timetaken,$hash{$dnsserver}{lowest},$hash{$dnsserver}{avg},$hash{$dnsserver}{highest},$hash{$dnsserver}{absurd});
	}
	my $table = scalar($tb);
	system("/usr/bin/clear");
	print $table;
	usleep 500000;
}
