diff options
Diffstat (limited to 'plugins/check_fping.c')
-rw-r--r-- | plugins/check_fping.c | 115 |
1 files changed, 64 insertions, 51 deletions
diff --git a/plugins/check_fping.c b/plugins/check_fping.c index 7e4049c..bb17830 100644 --- a/plugins/check_fping.c +++ b/plugins/check_fping.c | |||
@@ -34,6 +34,7 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net"; | |||
34 | 34 | ||
35 | #include "common.h" | 35 | #include "common.h" |
36 | #include "popen.h" | 36 | #include "popen.h" |
37 | #include "netutils.h" | ||
37 | #include "utils.h" | 38 | #include "utils.h" |
38 | 39 | ||
39 | #define PACKET_COUNT 1 | 40 | #define PACKET_COUNT 1 |
@@ -44,54 +45,11 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net"; | |||
44 | #define PL 0 | 45 | #define PL 0 |
45 | #define RTA 1 | 46 | #define RTA 1 |
46 | 47 | ||
47 | void | ||
48 | print_usage (void) | ||
49 | { | ||
50 | printf (_("Usage: %s <host_address>\n"), progname); | ||
51 | } | ||
52 | |||
53 | void | ||
54 | print_help (void) | ||
55 | { | ||
56 | |||
57 | print_revision (progname, "$Revision$"); | ||
58 | |||
59 | printf (_("\ | ||
60 | Copyright (c) 1999 Didi Rieder (adrieder@sbox.tu-graz.ac.at)\n\n\ | ||
61 | This plugin will use the /bin/fping command (from saint) to ping the\n\ | ||
62 | specified host for a fast check if the host is alive. Note that it is\n\ | ||
63 | necessary to set the suid flag on fping.\n\n")); | ||
64 | |||
65 | print_usage (); | ||
66 | |||
67 | printf (_(UT_HELP_VRSN)); | ||
68 | |||
69 | printf (_("\ | ||
70 | -H, --hostname=HOST\n\ | ||
71 | Name or IP Address of host to ping (IP Address bypasses name lookup,\n\ | ||
72 | reducing system load)\n\ | ||
73 | -w, --warning=THRESHOLD\n\ | ||
74 | warning threshold pair\n\ | ||
75 | -c, --critical=THRESHOLD\n\ | ||
76 | critical threshold pair\n\ | ||
77 | -b, --bytes=INTEGER\n\ | ||
78 | Size of ICMP packet (default: %d)\n\ | ||
79 | -n, --number=INTEGER\n\ | ||
80 | Number of ICMP packets to send (default: %d)\n"), | ||
81 | PACKET_SIZE, PACKET_COUNT); | ||
82 | |||
83 | printf (_(UT_VERBOSE)); | ||
84 | |||
85 | printf (_("\n\ | ||
86 | THRESHOLD is <rta>,<pl>%% where <rta> is the round trip average travel\n\ | ||
87 | time (ms) which triggers a WARNING or CRITICAL state, and <pl> is the\n\ | ||
88 | percentage of packet loss to trigger an alarm state.\n")); | ||
89 | |||
90 | } | ||
91 | |||
92 | int textscan (char *buf); | 48 | int textscan (char *buf); |
93 | int process_arguments (int, char **); | 49 | int process_arguments (int, char **); |
94 | int get_threshold (char *arg, char *rv[2]); | 50 | int get_threshold (char *arg, char *rv[2]); |
51 | void print_help (void); | ||
52 | void print_usage (void); | ||
95 | 53 | ||
96 | char *server_name = NULL; | 54 | char *server_name = NULL; |
97 | int cpl = UNKNOWN_PACKET_LOSS; | 55 | int cpl = UNKNOWN_PACKET_LOSS; |
@@ -200,11 +158,11 @@ textscan (char *buf) | |||
200 | rta = strtod (rtastr, NULL); | 158 | rta = strtod (rtastr, NULL); |
201 | if (cpl != UNKNOWN_PACKET_LOSS && loss > cpl) | 159 | if (cpl != UNKNOWN_PACKET_LOSS && loss > cpl) |
202 | status = STATE_CRITICAL; | 160 | status = STATE_CRITICAL; |
203 | else if (crta != UNKNOWN_TRIP_TIME && rta > crta) | 161 | else if (crta <= 0 && rta > crta) |
204 | status = STATE_CRITICAL; | 162 | status = STATE_CRITICAL; |
205 | else if (wpl != UNKNOWN_PACKET_LOSS && loss > wpl) | 163 | else if (wpl != UNKNOWN_PACKET_LOSS && loss > wpl) |
206 | status = STATE_WARNING; | 164 | status = STATE_WARNING; |
207 | else if (wrta != UNKNOWN_TRIP_TIME && rta > wrta) | 165 | else if (wrta >= 0 && rta > wrta) |
208 | status = STATE_WARNING; | 166 | status = STATE_WARNING; |
209 | else | 167 | else |
210 | status = STATE_OK; | 168 | status = STATE_OK; |
@@ -218,7 +176,7 @@ textscan (char *buf) | |||
218 | losstr = 1 + strstr (losstr, "/"); | 176 | losstr = 1 + strstr (losstr, "/"); |
219 | losstr = 1 + strstr (losstr, "/"); | 177 | losstr = 1 + strstr (losstr, "/"); |
220 | loss = strtod (losstr, NULL); | 178 | loss = strtod (losstr, NULL); |
221 | if (loss == 100) | 179 | if (atoi(losstr) == 100) |
222 | status = STATE_CRITICAL; | 180 | status = STATE_CRITICAL; |
223 | else if (cpl != UNKNOWN_PACKET_LOSS && loss > cpl) | 181 | else if (cpl != UNKNOWN_PACKET_LOSS && loss > cpl) |
224 | status = STATE_CRITICAL; | 182 | status = STATE_CRITICAL; |
@@ -248,8 +206,8 @@ process_arguments (int argc, char **argv) | |||
248 | int c; | 206 | int c; |
249 | char *rv[2]; | 207 | char *rv[2]; |
250 | 208 | ||
251 | int option_index = 0; | 209 | int option = 0; |
252 | static struct option long_options[] = { | 210 | static struct option longopts[] = { |
253 | {"hostname", required_argument, 0, 'H'}, | 211 | {"hostname", required_argument, 0, 'H'}, |
254 | {"critical", required_argument, 0, 'c'}, | 212 | {"critical", required_argument, 0, 'c'}, |
255 | {"warning", required_argument, 0, 'w'}, | 213 | {"warning", required_argument, 0, 'w'}, |
@@ -275,7 +233,7 @@ process_arguments (int argc, char **argv) | |||
275 | } | 233 | } |
276 | 234 | ||
277 | while (1) { | 235 | while (1) { |
278 | c = getopt_long (argc, argv, "+hVvH:c:w:b:n:", long_options, &option_index); | 236 | c = getopt_long (argc, argv, "+hVvH:c:w:b:n:", longopts, &option); |
279 | 237 | ||
280 | if (c == -1 || c == EOF || c == 1) | 238 | if (c == -1 || c == EOF || c == 1) |
281 | break; | 239 | break; |
@@ -389,3 +347,58 @@ get_threshold (char *arg, char *rv[2]) | |||
389 | 347 | ||
390 | return OK; | 348 | return OK; |
391 | } | 349 | } |
350 | |||
351 | |||
352 | |||
353 | |||
354 | |||
355 | |||
356 | void | ||
357 | print_help (void) | ||
358 | { | ||
359 | |||
360 | print_revision (progname, "$Revision$"); | ||
361 | |||
362 | printf (_("\ | ||
363 | Copyright (c) 1999 Didi Rieder (adrieder@sbox.tu-graz.ac.at)\n\n\ | ||
364 | This plugin will use the /bin/fping command (from saint) to ping the\n\ | ||
365 | specified host for a fast check if the host is alive. Note that it is\n\ | ||
366 | necessary to set the suid flag on fping.\n\n")); | ||
367 | |||
368 | print_usage (); | ||
369 | |||
370 | printf (_(UT_HELP_VRSN)); | ||
371 | |||
372 | printf (_("\ | ||
373 | -H, --hostname=HOST\n\ | ||
374 | Name or IP Address of host to ping (IP Address bypasses name lookup,\n\ | ||
375 | reducing system load)\n\ | ||
376 | -w, --warning=THRESHOLD\n\ | ||
377 | warning threshold pair\n\ | ||
378 | -c, --critical=THRESHOLD\n\ | ||
379 | critical threshold pair\n\ | ||
380 | -b, --bytes=INTEGER\n\ | ||
381 | Size of ICMP packet (default: %d)\n\ | ||
382 | -n, --number=INTEGER\n\ | ||
383 | Number of ICMP packets to send (default: %d)\n"), | ||
384 | PACKET_SIZE, PACKET_COUNT); | ||
385 | |||
386 | printf (_(UT_VERBOSE)); | ||
387 | |||
388 | printf (_("\n\ | ||
389 | THRESHOLD is <rta>,<pl>%% where <rta> is the round trip average travel\n\ | ||
390 | time (ms) which triggers a WARNING or CRITICAL state, and <pl> is the\n\ | ||
391 | percentage of packet loss to trigger an alarm state.\n")); | ||
392 | |||
393 | printf (_(UT_SUPPORT)); | ||
394 | } | ||
395 | |||
396 | |||
397 | |||
398 | |||
399 | void | ||
400 | print_usage (void) | ||
401 | { | ||
402 | printf (_("Usage: %s <host_address>\n"), progname); | ||
403 | printf (_(UT_HLP_VRS), progname, progname); | ||
404 | } | ||