Annotation of embedaddon/ntp/scripts/checktime.in, revision 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>