diff options
Diffstat (limited to 'plugins/check_fping.c')
| -rw-r--r-- | plugins/check_fping.c | 107 |
1 files changed, 54 insertions, 53 deletions
diff --git a/plugins/check_fping.c b/plugins/check_fping.c index 0753cf3d..7b8e764f 100644 --- a/plugins/check_fping.c +++ b/plugins/check_fping.c | |||
| @@ -1,35 +1,24 @@ | |||
| 1 | /****************************************************************************** | 1 | /****************************************************************************** |
| 2 | * | 2 | |
| 3 | * CHECK_FPING.C | 3 | This program is free software; you can redistribute it and/or modify |
| 4 | * | 4 | it under the terms of the GNU General Public License as published by |
| 5 | * Program: Fping plugin for Nagios | 5 | the Free Software Foundation; either version 2 of the License, or |
| 6 | * License: GPL | 6 | (at your option) any later version. |
| 7 | * Copyright (c) 1999 Didi Rieder (adrieder@sbox.tu-graz.ac.at) | 7 | |
| 8 | * $Id$ | 8 | This program is distributed in the hope that it will be useful, |
| 9 | * | 9 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 10 | * Modifications: | 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 11 | * | 11 | GNU General Public License for more details. |
| 12 | * 08-24-1999 Didi Rieder (adrieder@sbox.tu-graz.ac.at) | 12 | |
| 13 | * Intial Coding | 13 | You should have received a copy of the GNU General Public License |
| 14 | * 09-11-1999 Karl DeBisschop (kdebiss@alum.mit.edu) | 14 | along with this program; if not, write to the Free Software |
| 15 | * Change to spopen | 15 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 16 | * Fix so that state unknown is returned by default | 16 | |
| 17 | * (formerly would give state ok if no fping specified) | ||
| 18 | * Add server_name to output | ||
| 19 | * Reformat to 80-character standard screen | ||
| 20 | * 11-18-1999 Karl DeBisschop (kdebiss@alum.mit.edu) | ||
| 21 | * set STATE_WARNING of stderr written or nonzero status returned | ||
| 22 | * | ||
| 23 | * Description: | ||
| 24 | * | ||
| 25 | * This plugin will use the /bin/fping command (from saint) to ping | ||
| 26 | * the specified host for a fast check if the host is alive. Note that | ||
| 27 | * it is necessary to set the suid flag on fping. | ||
| 28 | ******************************************************************************/ | 17 | ******************************************************************************/ |
| 29 | 18 | ||
| 30 | const char *progname = "check_fping"; | 19 | const char *progname = "check_fping"; |
| 31 | const char *revision = "$Revision$"; | 20 | const char *revision = "$Revision$"; |
| 32 | const char *copyright = "1999-2003"; | 21 | const char *copyright = "2000-2003"; |
| 33 | const char *email = "nagiosplug-devel@lists.sourceforge.net"; | 22 | const char *email = "nagiosplug-devel@lists.sourceforge.net"; |
| 34 | 23 | ||
| 35 | #include "common.h" | 24 | #include "common.h" |
| @@ -37,13 +26,12 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net"; | |||
| 37 | #include "netutils.h" | 26 | #include "netutils.h" |
| 38 | #include "utils.h" | 27 | #include "utils.h" |
| 39 | 28 | ||
| 40 | #define PACKET_COUNT 1 | 29 | enum { |
| 41 | #define PACKET_SIZE 56 | 30 | PACKET_COUNT = 1, |
| 42 | #define UNKNOWN_PACKET_LOSS 200 /* 200% */ | 31 | PACKET_SIZE = 56, |
| 43 | #define UNKNOWN_TRIP_TIME -1.0 /* -1 seconds */ | 32 | PL = 0, |
| 44 | 33 | RTA = 1 | |
| 45 | #define PL 0 | 34 | }; |
| 46 | #define RTA 1 | ||
| 47 | 35 | ||
| 48 | int textscan (char *buf); | 36 | int textscan (char *buf); |
| 49 | int process_arguments (int, char **); | 37 | int process_arguments (int, char **); |
| @@ -52,13 +40,17 @@ void print_help (void); | |||
| 52 | void print_usage (void); | 40 | void print_usage (void); |
| 53 | 41 | ||
| 54 | char *server_name = NULL; | 42 | char *server_name = NULL; |
| 55 | int cpl = UNKNOWN_PACKET_LOSS; | ||
| 56 | int wpl = UNKNOWN_PACKET_LOSS; | ||
| 57 | double crta = UNKNOWN_TRIP_TIME; | ||
| 58 | double wrta = UNKNOWN_TRIP_TIME; | ||
| 59 | int packet_size = PACKET_SIZE; | 43 | int packet_size = PACKET_SIZE; |
| 60 | int packet_count = PACKET_COUNT; | 44 | int packet_count = PACKET_COUNT; |
| 61 | int verbose = FALSE; | 45 | int verbose = FALSE; |
| 46 | int cpl; | ||
| 47 | int wpl; | ||
| 48 | double crta; | ||
| 49 | double wrta; | ||
| 50 | int cpl_p = FALSE; | ||
| 51 | int wpl_p = FALSE; | ||
| 52 | int crta_p = FALSE; | ||
| 53 | int wrta_p = FALSE; | ||
| 62 | 54 | ||
| 63 | int | 55 | int |
| 64 | main (int argc, char **argv) | 56 | main (int argc, char **argv) |
| @@ -160,18 +152,21 @@ textscan (char *buf) | |||
| 160 | rtastr = 1 + index (rtastr, '/'); | 152 | rtastr = 1 + index (rtastr, '/'); |
| 161 | loss = strtod (losstr, NULL); | 153 | loss = strtod (losstr, NULL); |
| 162 | rta = strtod (rtastr, NULL); | 154 | rta = strtod (rtastr, NULL); |
| 163 | if (cpl != UNKNOWN_PACKET_LOSS && loss > cpl) | 155 | if (cpl_p == TRUE && loss > cpl) |
| 164 | status = STATE_CRITICAL; | 156 | status = STATE_CRITICAL; |
| 165 | else if (crta <= 0 && rta > crta) | 157 | else if (crta_p == TRUE && rta > crta) |
| 166 | status = STATE_CRITICAL; | 158 | status = STATE_CRITICAL; |
| 167 | else if (wpl != UNKNOWN_PACKET_LOSS && loss > wpl) | 159 | else if (wpl_p == TRUE && loss > wpl) |
| 168 | status = STATE_WARNING; | 160 | status = STATE_WARNING; |
| 169 | else if (wrta >= 0 && rta > wrta) | 161 | else if (wrta_p == TRUE && rta > wrta) |
| 170 | status = STATE_WARNING; | 162 | status = STATE_WARNING; |
| 171 | else | 163 | else |
| 172 | status = STATE_OK; | 164 | status = STATE_OK; |
| 173 | die (status, _("FPING %s - %s (loss=%f%%, rta=%f ms)\n"), | 165 | die (status, |
| 174 | state_text (status), server_name, loss, rta); | 166 | _("FPING %s - %s (loss=%.0f%%, rta=%f ms)|%s %s\n"), |
| 167 | state_text (status), server_name, loss, rta, | ||
| 168 | perfdata ("loss", (int)loss, "%", wpl_p, wpl, cpl_p, cpl, TRUE, 0, TRUE, 100), | ||
| 169 | perfdata ("rta", (long int)(rta*1.0e3), "us", wrta_p, (long int)(wrta*1.0e3), crta_p, (long int)(crta*1.0e3), TRUE, 0, FALSE, 0)); | ||
| 175 | 170 | ||
| 176 | } | 171 | } |
| 177 | else if(strstr (buf, "xmt/rcv/%loss") ) { | 172 | else if(strstr (buf, "xmt/rcv/%loss") ) { |
| @@ -182,15 +177,16 @@ textscan (char *buf) | |||
| 182 | loss = strtod (losstr, NULL); | 177 | loss = strtod (losstr, NULL); |
| 183 | if (atoi(losstr) == 100) | 178 | if (atoi(losstr) == 100) |
| 184 | status = STATE_CRITICAL; | 179 | status = STATE_CRITICAL; |
| 185 | else if (cpl != UNKNOWN_PACKET_LOSS && loss > cpl) | 180 | else if (cpl_p == TRUE && loss > cpl) |
| 186 | status = STATE_CRITICAL; | 181 | status = STATE_CRITICAL; |
| 187 | else if (wpl != UNKNOWN_PACKET_LOSS && loss > wpl) | 182 | else if (wpl_p == TRUE && loss > wpl) |
| 188 | status = STATE_WARNING; | 183 | status = STATE_WARNING; |
| 189 | else | 184 | else |
| 190 | status = STATE_OK; | 185 | status = STATE_OK; |
| 191 | 186 | /* loss=%.0f%%;%d;%d;0;100 */ | |
| 192 | die (status, _("FPING %s - %s (loss=%f%% )\n"), | 187 | die (status, _("FPING %s - %s (loss=%.0f%% )|%s\n"), |
| 193 | state_text (status), server_name, loss ); | 188 | state_text (status), server_name, loss , |
| 189 | perfdata ("loss", (int)loss, "%", wpl_p, wpl, cpl_p, cpl, TRUE, 0, TRUE, 100)); | ||
| 194 | 190 | ||
| 195 | } | 191 | } |
| 196 | else { | 192 | else { |
| @@ -267,22 +263,26 @@ process_arguments (int argc, char **argv) | |||
| 267 | case 'c': | 263 | case 'c': |
| 268 | get_threshold (optarg, rv); | 264 | get_threshold (optarg, rv); |
| 269 | if (rv[RTA]) { | 265 | if (rv[RTA]) { |
| 270 | crta = strtod (rv[RTA], NULL); | 266 | crta = 1e3 * strtod (rv[RTA], NULL); |
| 267 | crta_p = TRUE; | ||
| 271 | rv[RTA] = NULL; | 268 | rv[RTA] = NULL; |
| 272 | } | 269 | } |
| 273 | if (rv[PL]) { | 270 | if (rv[PL]) { |
| 274 | cpl = atoi (rv[PL]); | 271 | cpl = atoi (rv[PL]); |
| 272 | cpl_p = TRUE; | ||
| 275 | rv[PL] = NULL; | 273 | rv[PL] = NULL; |
| 276 | } | 274 | } |
| 277 | break; | 275 | break; |
| 278 | case 'w': | 276 | case 'w': |
| 279 | get_threshold (optarg, rv); | 277 | get_threshold (optarg, rv); |
| 280 | if (rv[RTA]) { | 278 | if (rv[RTA]) { |
| 281 | wrta = strtod (rv[RTA], NULL); | 279 | wrta = 1e3 * strtod (rv[RTA], NULL); |
| 280 | wrta_p = TRUE; | ||
| 282 | rv[RTA] = NULL; | 281 | rv[RTA] = NULL; |
| 283 | } | 282 | } |
| 284 | if (rv[PL]) { | 283 | if (rv[PL]) { |
| 285 | wpl = atoi (rv[PL]); | 284 | wpl = atoi (rv[PL]); |
| 285 | wpl_p = TRUE; | ||
| 286 | rv[PL] = NULL; | 286 | rv[PL] = NULL; |
| 287 | } | 287 | } |
| 288 | break; | 288 | break; |
| @@ -355,7 +355,6 @@ get_threshold (char *arg, char *rv[2]) | |||
| 355 | 355 | ||
| 356 | 356 | ||
| 357 | 357 | ||
| 358 | |||
| 359 | 358 | ||
| 360 | void | 359 | void |
| 361 | print_help (void) | 360 | print_help (void) |
| @@ -363,8 +362,10 @@ print_help (void) | |||
| 363 | 362 | ||
| 364 | print_revision (progname, "$Revision$"); | 363 | print_revision (progname, "$Revision$"); |
| 365 | 364 | ||
| 365 | printf (_("Copyright (c) 1999 Didi Rieder <adrieder@sbox.tu-graz.ac.at>\n")); | ||
| 366 | printf (_(COPYRIGHT), copyright, email); | ||
| 367 | |||
| 366 | printf (_("\ | 368 | printf (_("\ |
| 367 | Copyright (c) 1999 Didi Rieder (adrieder@sbox.tu-graz.ac.at)\n\n\ | ||
| 368 | This plugin will use the /bin/fping command (from saint) to ping the\n\ | 369 | This plugin will use the /bin/fping command (from saint) to ping the\n\ |
| 369 | specified host for a fast check if the host is alive. Note that it is\n\ | 370 | specified host for a fast check if the host is alive. Note that it is\n\ |
| 370 | necessary to set the suid flag on fping.\n\n")); | 371 | necessary to set the suid flag on fping.\n\n")); |
