Code

Fix incorrectly labelled units in output (1025905, Jason Martin)
[nagiosplug.git] / plugins-scripts / check_ntp.pl
index 10079b693b4afa2b3cbfe21b8b55bc28df60e161..7adef9846658edf52d79fe5720bbaa78620022b9 100755 (executable)
@@ -154,7 +154,8 @@ my $answer = undef;
 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'};
@@ -252,6 +253,9 @@ if ( $? && !$ignoreret ) {
 # 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) {
 
@@ -264,12 +268,13 @@ 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;
@@ -284,8 +289,34 @@ if ($have_ntpq) {
                                        $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'};
+                                       }
+                               }
+
+                       }
+               }
        }
 }
 
@@ -327,13 +358,13 @@ if ($ntpdate_error != $ERRORS{'OK'}) {
 } 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";
@@ -347,13 +378,13 @@ if ($ntpdate_error != $ERRORS{'OK'}) {
 } 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";