diff options
-rwxr-xr-x | plugins-scripts/check_ntp.pl | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/plugins-scripts/check_ntp.pl b/plugins-scripts/check_ntp.pl index 331f8556..560a8775 100755 --- a/plugins-scripts/check_ntp.pl +++ b/plugins-scripts/check_ntp.pl | |||
@@ -50,7 +50,7 @@ | |||
50 | # Modifed to run under Embedded Perl (sghosh@users.sf.net) | 50 | # Modifed to run under Embedded Perl (sghosh@users.sf.net) |
51 | # - combined logic some blocks together.. | 51 | # - combined logic some blocks together.. |
52 | # | 52 | # |
53 | # Todo - non-hardcoded dispersion values... | 53 | # Added ntpdate check for stratum 16 desynch peer (James Fidell) Feb 03, 2003 |
54 | # | 54 | # |
55 | 55 | ||
56 | 56 | ||
@@ -111,6 +111,8 @@ if ($critical < $warning ) { | |||
111 | exit $ERRORS{"UNKNOWN"}; | 111 | exit $ERRORS{"UNKNOWN"}; |
112 | } | 112 | } |
113 | 113 | ||
114 | my $stratum = -1; | ||
115 | my $ignoreret = 0; | ||
114 | my $answer = undef; | 116 | my $answer = undef; |
115 | my $offset = undef; | 117 | my $offset = undef; |
116 | my $msg; # first line of output to print if format is invalid | 118 | my $msg; # first line of output to print if format is invalid |
@@ -137,7 +139,7 @@ alarm($TIMEOUT); | |||
137 | 139 | ||
138 | 140 | ||
139 | ### | 141 | ### |
140 | ###$dispersion_error = $ERRORS{' | 142 | ### |
141 | ### First, check ntpdate | 143 | ### First, check ntpdate |
142 | ### | 144 | ### |
143 | ### | 145 | ### |
@@ -150,6 +152,11 @@ if (!open (NTPDATE, "$utils::PATH_TO_NTPDATE -q $host 2>&1 |")) { | |||
150 | while (<NTPDATE>) { | 152 | while (<NTPDATE>) { |
151 | print if ($verbose); | 153 | print if ($verbose); |
152 | $msg = $_ unless ($msg); | 154 | $msg = $_ unless ($msg); |
155 | |||
156 | if (/stratum\s(\d+)/) { | ||
157 | $stratum = $1; | ||
158 | } | ||
159 | |||
153 | if (/(offset|adjust)\s+([-.\d]+)/i) { | 160 | if (/(offset|adjust)\s+([-.\d]+)/i) { |
154 | $offset = $2; | 161 | $offset = $2; |
155 | 162 | ||
@@ -163,8 +170,15 @@ while (<NTPDATE>) { | |||
163 | } | 170 | } |
164 | 171 | ||
165 | if (/no server suitable for synchronization found/) { | 172 | if (/no server suitable for synchronization found/) { |
166 | $ntpdate_error = $ERRORS{"CRITICAL"}; | 173 | if ($stratum == 16) { |
167 | $msg = "No suitable peer server found - "; | 174 | $ntpdate_error = $ERRORS{"WARNING"}; |
175 | $msg = "Desynchronized peer server found"; | ||
176 | $ignoreret=1; | ||
177 | } | ||
178 | else { | ||
179 | $ntpdate_error = $ERRORS{"CRITICAL"}; | ||
180 | $msg = "No suitable peer server found - "; | ||
181 | } | ||
168 | } | 182 | } |
169 | 183 | ||
170 | } | 184 | } |
@@ -172,7 +186,7 @@ while (<NTPDATE>) { | |||
172 | close (NTPDATE); | 186 | close (NTPDATE); |
173 | # declare an error if we also get a non-zero return code from ntpdate | 187 | # declare an error if we also get a non-zero return code from ntpdate |
174 | # unless already set to critical | 188 | # unless already set to critical |
175 | if ( $? ) { | 189 | if ( $? && !$ignoreret ) { |
176 | print "stderr = $? : $! \n" if $verbose; | 190 | print "stderr = $? : $! \n" if $verbose; |
177 | $ntpdate_error = $ntpdate_error == $ERRORS{"CRITICAL"} ? $ERRORS{"CRITICAL"} : $ERRORS{"UNKNOWN"} ; | 191 | $ntpdate_error = $ntpdate_error == $ERRORS{"CRITICAL"} ? $ERRORS{"CRITICAL"} : $ERRORS{"UNKNOWN"} ; |
178 | print "ntperr = $ntpdate_error : $!\n" if $verbose; | 192 | print "ntperr = $ntpdate_error : $!\n" if $verbose; |
@@ -208,7 +222,13 @@ if ($have_ntpdc) { | |||
208 | 222 | ||
209 | if ($ntpdate_error != $ERRORS{'OK'}) { | 223 | if ($ntpdate_error != $ERRORS{'OK'}) { |
210 | $state = $ntpdate_error; | 224 | $state = $ntpdate_error; |
211 | $answer = $msg . "Server for ntp probably down\n"; | 225 | if ($ntpdate_error == $ERRORS{'WARNING'} ) { |
226 | $answer = $msg . "\n"; | ||
227 | } | ||
228 | else { | ||
229 | $answer = $msg . "Server for ntp probably down\n"; | ||
230 | } | ||
231 | |||
212 | if (defined($offset) && abs($offset) > $critical) { | 232 | if (defined($offset) && abs($offset) > $critical) { |
213 | $state = $ERRORS{'CRITICAL'}; | 233 | $state = $ERRORS{'CRITICAL'}; |
214 | $answer = "Server Error and time difference $offset seconds greater than +/- $critical sec\n"; | 234 | $answer = "Server Error and time difference $offset seconds greater than +/- $critical sec\n"; |