Annotation of embedaddon/ntp/scripts/checktime.in, revision 1.1.1.1
1.1 misho 1: #! @PATH_PERL@
2: #! @PATH_PERL@ -d
3: #
4: # This script compares the time of several machines with the
5: # time on the local host.
6: #
7: # Use or modify it as you wish.
8: #
9: # As the original author is only expecting 14 minutes of fame,
10: # leaving his name attached would be appreciated.
11: #
12: # R. Gary Cutbill <rgary@chrysalis.com>
13: # 21 April 1999
14: #
15: $tol=2.0;
16: $|=1;
17: print "Time Check";
18:
19: open(HOSTS,"ypcat hosts.byaddr |"); # get a list of hosts from the yp server.
20:
21: while ($line=<HOSTS>) { # loop for each host getting the offset compared to localhost
22: ($addr,$host,$aliases)=split(/\s+/,$line,3);
23: $res=`/usr/local/bin/ntptrace -m 1 -r 1 -t 1 $host`;
24: print ".";
25: chop $res;
26: push (@results,$res);
27: }
28: print "\n";
29:
30:
31: #
32: # Sort the list of hosts, and print out there offsets
33: # from the local host.
34: #
35: @list=sort appropriately @results;
36: foreach $i ( @list ) {
37:
38: @dargs=split(/\s+/,$i);
39: if ( $dargs[1] eq "\*Timeout\*" ) {
40: print "$i\n";
41: chop $dargs[0];
42: push(@down,$dargs[0]);
43: } else {
44: printf "%-25s %7s %3s %6s %10s %5s %8s %8s\n",@dargs;
45: if ( ( $dargs[4] > $tol ) || ( $dargs[4] < -$tol ) ) {
46: chop $dargs[0];
47: push(@toofarout,$dargs[0]); }
48: }
49: }
50: #
51: # When the above list finishes, hosts that are different by +/- $tol (two seconds)
52: # are in @toofarout. Hosts that are down are in @down. They are treated the same
53: # way here, but you might want to do something different depending on your site.
54: #
55: # print a set of suggested rsh commands to run on the hosts that
56: # don't have "good" time. "restartntp" is left as an excersize to the reader.
57: # I usually use it to kill a running xntpd, ntpdate some server, and the start xntp
58: # again.
59: #
60: print "\nConsider:\n";
61: foreach $i ( (@down,@toofarout) ) {
62: print " rsh $i sudo restartntp\n";
63: }
64:
65:
66: #
67: # sort the results from the list. First by stratum, then by time deviation
68: # Put hosts that didn't respond (timed out) on the bottom.
69: #
70: sub appropriately {
71: @af=split(/\s+/,$a);
72: @bf=split(/\s+/,$b);
73: $aba= ($af[4]<0)?-$af[4]:$af[4];
74: $abb= ($bf[4]<0)?-$bf[4]:$bf[4];
75:
76: ( $af[1] ne $bf[1] ) ? $bf[1] cmp $af[1] :
77: ( ( $af[2] != $bf[2] ) ? ( $bf[2] <=> $af[2] ) :
78: ( ( $aba != $abb ) ? ( $abb <=> $aba ) : ($af[0] cmp $bf[0] ) ) );
79: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>