diff options
Diffstat (limited to 'plugins/check_fping.c')
-rw-r--r-- | plugins/check_fping.c | 53 |
1 files changed, 26 insertions, 27 deletions
diff --git a/plugins/check_fping.c b/plugins/check_fping.c index 540650ae..be9362ad 100644 --- a/plugins/check_fping.c +++ b/plugins/check_fping.c | |||
@@ -37,6 +37,7 @@ const char *email = "devel@monitoring-plugins.org"; | |||
37 | #include "popen.h" | 37 | #include "popen.h" |
38 | #include "netutils.h" | 38 | #include "netutils.h" |
39 | #include "utils.h" | 39 | #include "utils.h" |
40 | #include <stdbool.h> | ||
40 | 41 | ||
41 | enum { | 42 | enum { |
42 | PACKET_COUNT = 1, | 43 | PACKET_COUNT = 1, |
@@ -65,7 +66,7 @@ double crta; | |||
65 | double wrta; | 66 | double wrta; |
66 | int cpl_p = FALSE; | 67 | int cpl_p = FALSE; |
67 | int wpl_p = FALSE; | 68 | int wpl_p = FALSE; |
68 | int alive_p = FALSE; | 69 | bool alive_p = FALSE; |
69 | int crta_p = FALSE; | 70 | int crta_p = FALSE; |
70 | int wrta_p = FALSE; | 71 | int wrta_p = FALSE; |
71 | 72 | ||
@@ -148,23 +149,12 @@ main (int argc, char **argv) | |||
148 | (void) fclose (child_stderr); | 149 | (void) fclose (child_stderr); |
149 | 150 | ||
150 | /* close the pipe */ | 151 | /* close the pipe */ |
151 | if (result = spclose (child_process)) | 152 | result = spclose (child_process); |
153 | if (result) { | ||
152 | /* need to use max_state not max */ | 154 | /* need to use max_state not max */ |
153 | status = max_state (status, STATE_WARNING); | 155 | status = max_state (status, STATE_WARNING); |
154 | if (alive_p && strstr (buf, "avg, 0% loss)")){ | ||
155 | rtastr = strstr (buf, "ms ("); | ||
156 | rtastr = 1 + index (rtastr, '('); | ||
157 | rta = strtod (rtastr, NULL); | ||
158 | loss=strtod ("0",NULL); | ||
159 | die (STATE_OK, | ||
160 | _("FPING %s - %s (rta=%f ms)|%s %s\n"), | ||
161 | state_text (STATE_OK), server_name,rta, | ||
162 | perfdata ("loss", (long int)loss, "%", wpl_p, wpl, cpl_p, cpl, TRUE, 0, TRUE, 100), | ||
163 | fperfdata ("rta", rta/1.0e3, "s", wrta_p, wrta/1.0e3, crta_p, crta/1.0e3, TRUE, 0, FALSE, 0)); | ||
164 | |||
165 | } | 156 | } |
166 | 157 | ||
167 | |||
168 | if (result > 1 ) { | 158 | if (result > 1 ) { |
169 | status = max_state (status, STATE_UNKNOWN); | 159 | status = max_state (status, STATE_UNKNOWN); |
170 | if (result == 2) { | 160 | if (result == 2) { |
@@ -185,10 +175,7 @@ main (int argc, char **argv) | |||
185 | } | 175 | } |
186 | 176 | ||
187 | 177 | ||
188 | 178 | int textscan (char *buf) { | |
189 | int | ||
190 | textscan (char *buf) | ||
191 | { | ||
192 | char *rtastr = NULL; | 179 | char *rtastr = NULL; |
193 | char *losstr = NULL; | 180 | char *losstr = NULL; |
194 | char *xmtstr = NULL; | 181 | char *xmtstr = NULL; |
@@ -197,6 +184,20 @@ textscan (char *buf) | |||
197 | double xmt; | 184 | double xmt; |
198 | int status = STATE_UNKNOWN; | 185 | int status = STATE_UNKNOWN; |
199 | 186 | ||
187 | /* stops testing after the first successful reply. */ | ||
188 | if (alive_p && strstr(buf, "avg, 0% loss)")) { | ||
189 | rtastr = strstr (buf, "ms ("); | ||
190 | rtastr = 1 + index(rtastr, '('); | ||
191 | rta = strtod(rtastr, NULL); | ||
192 | loss=strtod("0",NULL); | ||
193 | die (STATE_OK, | ||
194 | _("FPING %s - %s (rta=%f ms)|%s\n"), | ||
195 | state_text (STATE_OK), server_name,rta, | ||
196 | /* No loss since we only waited for the first reply | ||
197 | perfdata ("loss", (long int)loss, "%", wpl_p, wpl, cpl_p, cpl, TRUE, 0, TRUE, 100), */ | ||
198 | fperfdata ("rta", rta/1.0e3, "s", wrta_p, wrta/1.0e3, crta_p, crta/1.0e3, TRUE, 0, FALSE, 0)); | ||
199 | } | ||
200 | |||
200 | if (strstr (buf, "not found")) { | 201 | if (strstr (buf, "not found")) { |
201 | die (STATE_CRITICAL, _("FPING UNKNOWN - %s not found\n"), server_name); | 202 | die (STATE_CRITICAL, _("FPING UNKNOWN - %s not found\n"), server_name); |
202 | 203 | ||
@@ -289,12 +290,10 @@ process_arguments (int argc, char **argv) | |||
289 | static struct option longopts[] = { | 290 | static struct option longopts[] = { |
290 | {"hostname", required_argument, 0, 'H'}, | 291 | {"hostname", required_argument, 0, 'H'}, |
291 | {"sourceip", required_argument, 0, 'S'}, | 292 | {"sourceip", required_argument, 0, 'S'}, |
292 | case 'a': /* host alive mode */ | ||
293 | alive_p = TRUE; | ||
294 | break; | ||
295 | {"sourceif", required_argument, 0, 'I'}, | 293 | {"sourceif", required_argument, 0, 'I'}, |
296 | {"critical", required_argument, 0, 'c'}, | 294 | {"critical", required_argument, 0, 'c'}, |
297 | {"warning", required_argument, 0, 'w'}, | 295 | {"warning", required_argument, 0, 'w'}, |
296 | {"alive", no_argument, 0, 'a'}, | ||
298 | {"bytes", required_argument, 0, 'b'}, | 297 | {"bytes", required_argument, 0, 'b'}, |
299 | {"number", required_argument, 0, 'n'}, | 298 | {"number", required_argument, 0, 'n'}, |
300 | {"target-timeout", required_argument, 0, 'T'}, | 299 | {"target-timeout", required_argument, 0, 'T'}, |
@@ -329,6 +328,9 @@ process_arguments (int argc, char **argv) | |||
329 | switch (c) { | 328 | switch (c) { |
330 | case '?': /* print short usage statement if args not parsable */ | 329 | case '?': /* print short usage statement if args not parsable */ |
331 | usage5 (); | 330 | usage5 (); |
331 | case 'a': /* host alive mode */ | ||
332 | alive_p = TRUE; | ||
333 | break; | ||
332 | case 'h': /* help */ | 334 | case 'h': /* help */ |
333 | print_help (); | 335 | print_help (); |
334 | exit (STATE_UNKNOWN); | 336 | exit (STATE_UNKNOWN); |
@@ -433,9 +435,6 @@ get_threshold (char *arg, char *rv[2]) | |||
433 | arg2 = 1 + strpbrk (arg1, ",:"); | 435 | arg2 = 1 + strpbrk (arg1, ",:"); |
434 | 436 | ||
435 | if (arg2) { | 437 | if (arg2) { |
436 | printf (" %s\n", "-a"); | ||
437 | printf (" %s\n", _("Return OK after first successfull reply")); | ||
438 | |||
439 | arg1[strcspn (arg1, ",:")] = 0; | 438 | arg1[strcspn (arg1, ",:")] = 0; |
440 | if (strstr (arg1, "%") && strstr (arg2, "%")) | 439 | if (strstr (arg1, "%") && strstr (arg2, "%")) |
441 | die (STATE_UNKNOWN, | 440 | die (STATE_UNKNOWN, |
@@ -466,9 +465,7 @@ get_threshold (char *arg, char *rv[2]) | |||
466 | } | 465 | } |
467 | 466 | ||
468 | 467 | ||
469 | void | 468 | void print_help (void) { |
470 | print_help (void) | ||
471 | { | ||
472 | 469 | ||
473 | print_revision (progname, NP_VERSION); | 470 | print_revision (progname, NP_VERSION); |
474 | 471 | ||
@@ -494,6 +491,8 @@ print_help (void) | |||
494 | printf (" %s\n", _("warning threshold pair")); | 491 | printf (" %s\n", _("warning threshold pair")); |
495 | printf (" %s\n", "-c, --critical=THRESHOLD"); | 492 | printf (" %s\n", "-c, --critical=THRESHOLD"); |
496 | printf (" %s\n", _("critical threshold pair")); | 493 | printf (" %s\n", _("critical threshold pair")); |
494 | printf (" %s\n", "-a, --alive"); | ||
495 | printf (" %s\n", _("Return OK after first successfull reply")); | ||
497 | printf (" %s\n", "-b, --bytes=INTEGER"); | 496 | printf (" %s\n", "-b, --bytes=INTEGER"); |
498 | printf (" %s (default: %d)\n", _("size of ICMP packet"),PACKET_SIZE); | 497 | printf (" %s (default: %d)\n", _("size of ICMP packet"),PACKET_SIZE); |
499 | printf (" %s\n", "-n, --number=INTEGER"); | 498 | printf (" %s\n", "-n, --number=INTEGER"); |