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