index 10079b693b4afa2b3cbfe21b8b55bc28df60e161..7adef9846658edf52d79fe5720bbaa78620022b9 100755 (executable)
my $offset = undef;
my $jitter = undef;
my $syspeer = undef;
-my $candidates = 0;
+my $candidate = 0;
+my @candidates;
my $msg; # first line of output to print if format is invalid
my $state = $ERRORS{'UNKNOWN'};
# Field 10: offset
# Field 11: dispersion/jitter
#
+# According to bug 773588 Some solaris xntpd implementations seemto match on
+# "#" even though the docs say it exceeds maximum distance. Providing patch
+# here which will generate a warining.
if ($have_ntpq) {
}
# number of candidates on <host> for sys.peer
if (/^(\*|\+|\#|o])/) {
- ++$candidates;
- print "Candiate count= $candidates\n" if ($verbose);
+ ++$candidate;
+ push (@candidates, $_);
+ print "Candiate count= $candidate\n" if ($verbose);
}
-
+
# match sys.peer or pps.peer
- if (/^(\*|o)([-0-9.\s]+)\s+([-0-9A-Za-z.]+)\s+([-0-9.]+)\s+([lumb]+)\s+([-0-9m.]+)\s+([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)/) {
+ if (/^(\*|o)([-0-9.\s]+)\s+([-0-9A-Za-z.]+)\s+([-0-9.]+)\s+([lumb-]+)\s+([-0-9m.]+)\s+([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)/) {
$syspeer = $2;
$stratum = $4;
$jitter = $11;
$jitter_error = $ERRORS{'OK'};
}
}
+
}
close NTPQ;
+
+ # if we did not match sys.peer or pps.peer but matched # candidates only
+ # generate a warning
+ # based on bug id 773588
+ unless (defined $syspeer) {
+ if ($#candidates >0) {
+ foreach my $c (@candidates) {
+ $c =~ /^(#)([-0-9.\s]+)\s+([-0-9A-Za-z.]+)\s+([-0-9.]+)\s+([lumb-]+)\s+([-0-9m.]+)\s+([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)/;
+ $syspeer = $2;
+ $stratum = $4;
+ $jitter = $11;
+ print "candidate match $c \n" if $verbose;
+ if ($jitter > $jcrit) {
+ print "Candidate match - Jitter_crit = $11 :$jcrit\n" if ($verbose);
+ $jitter_error = $ERRORS{'CRITICAL'};
+ }elsif ($jitter > $jwarn ) {
+ print "Candidate match - Jitter_warn = $11 :$jwarn \n" if ($verbose);
+ $jitter_error = $ERRORS{'WARNING'};
+ } else {
+ $jitter_error = $ERRORS{'WARNING'};
+ }
+ }
+
+ }
+ }
}
}
} elsif( !$have_ntpq ) { # no errors from ntpdate and no ntpq or ntpq timed out
if (abs($offset) > $ocrit) {
$state = $ERRORS{'CRITICAL'};
- $answer = "Offset $offset msec > +/- $ocrit sec\n";
+ $answer = "Offset $offset sec > +/- $ocrit sec\n";
} elsif (abs($offset) > $owarn) {
$state = $ERRORS{'WARNING'};
- $answer = "Offset $offset msec > +/- $owarn sec\n";
+ $answer = "Offset $offset sec > +/- $owarn sec\n";
} elsif (( abs($offset) > $owarn) && $def_jitter ) {
$state = $ERRORS{'WARNING'};
- $answer = "Offset $offset msec > +/- $owarn sec, ntpq timed out\n";
+ $answer = "Offset $offset sec > +/- $owarn sec, ntpq timed out\n";
} elsif ( $def_jitter ) {
$state = $ERRORS{'WARNING'};
$answer = "Offset $offset secs, ntpq timed out\n";
} else { # no errors from ntpdate or ntpq
if (abs($offset) > $ocrit) {
$state = $ERRORS{'CRITICAL'};
- $answer = "Offset $offset msec > +/- $ocrit sec, jitter $jitter msec\n";
+ $answer = "Offset $offset sec > +/- $ocrit sec, jitter $jitter msec\n";
} elsif (abs($jitter) > $jcrit ) {
$state = $ERRORS{'CRITICAL'};
$answer = "Jitter $jitter msec> +/- $jcrit msec, offset $offset sec \n";
} elsif (abs($offset) > $owarn) {
$state = $ERRORS{'WARNING'};
- $answer = "Offset $offset msec > +/- $owarn sec, jitter $jitter msec\n";
+ $answer = "Offset $offset sec > +/- $owarn sec, jitter $jitter msec\n";
} elsif (abs($jitter) > $jwarn ) {
$state = $ERRORS{'WARNING'};
$answer = "Jitter $jitter msec> +/- $jwarn msec, offset $offset sec \n";