summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Wagner <waja@cyconet.org>2022-01-21 10:04:14 (GMT)
committerwaja <waja@users.noreply.github.com>2022-01-22 21:25:21 (GMT)
commitb14e251d0f28cc2acb93df79da099bb3cdb5ec08 (patch)
tree8d8136f1c3721903942d044e1d02414b60fd5b84
parentcf669f5ff51b746569ded30e990b9d53e5234da0 (diff)
downloadmonitoring-plugins-b14e251.tar.gz
Implements 'host-alive' mode (Closes. #1027)
To reduce the check-duration, it addes a host-alive flag which stops testing after the first successful reply.
-rw-r--r--plugins/check_fping.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/plugins/check_fping.c b/plugins/check_fping.c
index 521d0fe..540650a 100644
--- a/plugins/check_fping.c
+++ b/plugins/check_fping.c
@@ -65,6 +65,7 @@ double crta;
65double wrta; 65double wrta;
66int cpl_p = FALSE; 66int cpl_p = FALSE;
67int wpl_p = FALSE; 67int wpl_p = FALSE;
68int alive_p = FALSE;
68int crta_p = FALSE; 69int crta_p = FALSE;
69int wrta_p = FALSE; 70int wrta_p = FALSE;
70 71
@@ -150,6 +151,19 @@ main (int argc, char **argv)
150 if (result = spclose (child_process)) 151 if (result = spclose (child_process))
151 /* need to use max_state not max */ 152 /* need to use max_state not max */
152 status = max_state (status, STATE_WARNING); 153 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 }
166
153 167
154 if (result > 1 ) { 168 if (result > 1 ) {
155 status = max_state (status, STATE_UNKNOWN); 169 status = max_state (status, STATE_UNKNOWN);
@@ -275,6 +289,9 @@ process_arguments (int argc, char **argv)
275 static struct option longopts[] = { 289 static struct option longopts[] = {
276 {"hostname", required_argument, 0, 'H'}, 290 {"hostname", required_argument, 0, 'H'},
277 {"sourceip", required_argument, 0, 'S'}, 291 {"sourceip", required_argument, 0, 'S'},
292 case 'a': /* host alive mode */
293 alive_p = TRUE;
294 break;
278 {"sourceif", required_argument, 0, 'I'}, 295 {"sourceif", required_argument, 0, 'I'},
279 {"critical", required_argument, 0, 'c'}, 296 {"critical", required_argument, 0, 'c'},
280 {"warning", required_argument, 0, 'w'}, 297 {"warning", required_argument, 0, 'w'},
@@ -304,7 +321,7 @@ process_arguments (int argc, char **argv)
304 } 321 }
305 322
306 while (1) { 323 while (1) {
307 c = getopt_long (argc, argv, "+hVvH:S:c:w:b:n:T:i:I:46", longopts, &option); 324 c = getopt_long (argc, argv, "+hVvaH:S:c:w:b:n:T:i:I:46", longopts, &option);
308 325
309 if (c == -1 || c == EOF || c == 1) 326 if (c == -1 || c == EOF || c == 1)
310 break; 327 break;
@@ -416,6 +433,9 @@ get_threshold (char *arg, char *rv[2])
416 arg2 = 1 + strpbrk (arg1, ",:"); 433 arg2 = 1 + strpbrk (arg1, ",:");
417 434
418 if (arg2) { 435 if (arg2) {
436 printf (" %s\n", "-a");
437 printf (" %s\n", _("Return OK after first successfull reply"));
438
419 arg1[strcspn (arg1, ",:")] = 0; 439 arg1[strcspn (arg1, ",:")] = 0;
420 if (strstr (arg1, "%") && strstr (arg2, "%")) 440 if (strstr (arg1, "%") && strstr (arg2, "%"))
421 die (STATE_UNKNOWN, 441 die (STATE_UNKNOWN,