David Taylor wrote:
On 02/01/2013 20:34, [email protected] wrote:
[]
David, would it be possible to get the flags your sending to ntpq to
check for the leap second flag in your program so we can run them
using ntpq on a linux system ? I'd like to setup a monitor for this
condition in our environment.
[]
========================================================

In essence:

1: send 'ntpq -c rv <test-server>'
2: look for 'leap=01' or 'leap=10'
3: leap is pending if either is found
4: send 'ntpq -c assoc <test-server>'
5: for each assoc-id send: 'ntpq -c "rv <assoc-id>" <test-server>'
6: parse the result as in (2) and (3)

I hope that helps, and that I haven't misread my own code!  The commands
are executed on a Windows system.  If you come up with the same in a
script for another OS I could add it to my Web page to help others.

Here's a perl version which should run on any platform with both perl and ntpq (leap-check.pl):

#!perl -w
use strict;

my $server = shift || die("Usage: leap-check.pl <server>\n");
my $cmd = sprintf('ntpq -c rv %s', $server);
my $rv = `$cmd`;
if (!($rv =~ /[\s,]leap=([01]{2})[\s,\n]/)) { die("No leap info found from server $server!\n"); }

my $leap = $1;
if ($leap eq '01' || $leap eq '10' || $leap eq '00') {
# Leap bits valid, locate the upstream sources!
  printf("%s: %s\n\n", $leap, $server);
  $cmd = sprintf('ntpq -c assoc %s', $server);
  my $assoc = `$cmd`;
  my $ind_to_expect = 1;
  foreach (split(/\n/, $assoc)) {
    my ($ind, $assid, @fields) = split;
    if (defined($ind) && $ind =~ /^\d+$/ && $ind == $ind_to_expect) {
      $cmd = sprintf('ntpq -c "rv %s" %s', $assid, $server);
      $rv = `$cmd`;
      my ($leap, $srcadr) = ('','');
      if ($rv =~ /leap=([01]{2})/) {
        $leap = $1;
      }
      if ($rv =~ /srcadr=([^,\s\n]+)[,\s\n]/) {
        $srcadr = $1;
      }
      printf("%s: %s\n", $leap, $srcadr);
      $ind_to_expect++;
    }
  }
}

Terje

--
- <Terje.Mathisen at tmsw.no>
"almost all programming can be viewed as an exercise in caching"

_______________________________________________
questions mailing list
[email protected]
http://lists.ntp.org/listinfo/questions

Reply via email to