From 8e55797aba245ed781a76e5ac3cbf2a0c7243f88 Mon Sep 17 00:00:00 2001
From: Karl DeBisschop <kdebisschop@users.sourceforge.net>
Date: Tue, 26 Aug 2003 10:51:03 +0000
Subject: print perfdata

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@697 f882894a-f735-0410-b71e-b25c423dba1c

diff --git a/plugins/check_fping.c b/plugins/check_fping.c
index 0753cf3..7b8e764 100644
--- a/plugins/check_fping.c
+++ b/plugins/check_fping.c
@@ -1,35 +1,24 @@
 /******************************************************************************
-*
-* CHECK_FPING.C
-*
-* Program: Fping plugin for Nagios
-* License: GPL
-* Copyright (c) 1999 Didi Rieder (adrieder@sbox.tu-graz.ac.at)
-* $Id$
-*
-* Modifications:
-*
-* 08-24-1999 Didi Rieder (adrieder@sbox.tu-graz.ac.at)
-*            Intial Coding
-* 09-11-1999 Karl DeBisschop (kdebiss@alum.mit.edu)
-*            Change to spopen
-*            Fix so that state unknown is returned by default
-*            (formerly would give state ok if no fping specified)
-*            Add server_name to output
-*            Reformat to 80-character standard screen
-* 11-18-1999 Karl DeBisschop (kdebiss@alum.mit.edu)
-*            set STATE_WARNING of stderr written or nonzero status returned
-*
-* Description:
-*
-* This plugin will use the /bin/fping command (from saint) to ping
-* the specified host for a fast check if the host is alive. Note that
-* it is necessary to set the suid flag on fping.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
 ******************************************************************************/
 
 const char *progname = "check_fping";
 const char *revision = "$Revision$";
-const char *copyright = "1999-2003";
+const char *copyright = "2000-2003";
 const char *email = "nagiosplug-devel@lists.sourceforge.net";
 
 #include "common.h"
@@ -37,13 +26,12 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net";
 #include "netutils.h"
 #include "utils.h"
 
-#define PACKET_COUNT 1
-#define PACKET_SIZE 56
-#define UNKNOWN_PACKET_LOSS 200	/* 200% */
-#define UNKNOWN_TRIP_TIME -1.0	/* -1 seconds */
-
-#define PL 0
-#define RTA 1
+enum {
+	PACKET_COUNT = 1,
+	PACKET_SIZE = 56,
+	PL = 0,
+	RTA = 1
+};
 
 int textscan (char *buf);
 int process_arguments (int, char **);
@@ -52,13 +40,17 @@ void print_help (void);
 void print_usage (void);
 
 char *server_name = NULL;
-int cpl = UNKNOWN_PACKET_LOSS;
-int wpl = UNKNOWN_PACKET_LOSS;
-double crta = UNKNOWN_TRIP_TIME;
-double wrta = UNKNOWN_TRIP_TIME;
 int packet_size = PACKET_SIZE;
 int packet_count = PACKET_COUNT;
 int verbose = FALSE;
+int cpl;
+int wpl;
+double crta;
+double wrta;
+int cpl_p = FALSE;
+int wpl_p = FALSE;
+int crta_p = FALSE;
+int wrta_p = FALSE;
 
 int
 main (int argc, char **argv)
@@ -160,18 +152,21 @@ textscan (char *buf)
 		rtastr = 1 + index (rtastr, '/');
 		loss = strtod (losstr, NULL);
 		rta = strtod (rtastr, NULL);
-		if (cpl != UNKNOWN_PACKET_LOSS && loss > cpl)
+		if (cpl_p == TRUE && loss > cpl)
 			status = STATE_CRITICAL;
-		else if (crta <= 0 && rta > crta)
+		else if (crta_p == TRUE  && rta > crta)
 			status = STATE_CRITICAL;
-		else if (wpl != UNKNOWN_PACKET_LOSS && loss > wpl)
+		else if (wpl_p == TRUE && loss > wpl)
 			status = STATE_WARNING;
-		else if (wrta >= 0 && rta > wrta)
+		else if (wrta_p == TRUE && rta > wrta)
 			status = STATE_WARNING;
 		else
 			status = STATE_OK;
-		die (status, _("FPING %s - %s (loss=%f%%, rta=%f ms)\n"),
-							 state_text (status), server_name, loss, rta);
+		die (status,
+		      _("FPING %s - %s (loss=%.0f%%, rta=%f ms)|%s %s\n"),
+				 state_text (status), server_name, loss, rta,
+		     perfdata ("loss", (int)loss, "%", wpl_p, wpl, cpl_p, cpl, TRUE, 0, TRUE, 100),
+		     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));
 
 	}
 	else if(strstr (buf, "xmt/rcv/%loss") ) {
@@ -182,15 +177,16 @@ textscan (char *buf)
 		loss = strtod (losstr, NULL);
 		if (atoi(losstr) == 100)
 			status = STATE_CRITICAL;
-		else if (cpl != UNKNOWN_PACKET_LOSS && loss > cpl)
+		else if (cpl_p == TRUE && loss > cpl)
 			status = STATE_CRITICAL;
-		else if (wpl != UNKNOWN_PACKET_LOSS && loss > wpl)
+		else if (wpl_p == TRUE && loss > wpl)
 			status = STATE_WARNING;
 		else
 			status = STATE_OK;
-		
-		die (status, _("FPING %s - %s (loss=%f%% )\n"),
-							 state_text (status), server_name, loss );		
+		/* loss=%.0f%%;%d;%d;0;100 */
+		die (status, _("FPING %s - %s (loss=%.0f%% )|%s\n"),
+		     state_text (status), server_name, loss ,
+		     perfdata ("loss", (int)loss, "%", wpl_p, wpl, cpl_p, cpl, TRUE, 0, TRUE, 100));
 	
 	}
 	else {
@@ -267,22 +263,26 @@ process_arguments (int argc, char **argv)
 		case 'c':
 			get_threshold (optarg, rv);
 			if (rv[RTA]) {
-				crta = strtod (rv[RTA], NULL);
+				crta = 1e3 * strtod (rv[RTA], NULL);
+				crta_p = TRUE;
 				rv[RTA] = NULL;
 			}
 			if (rv[PL]) {
 				cpl = atoi (rv[PL]);
+				cpl_p = TRUE;
 				rv[PL] = NULL;
 			}
 			break;
 		case 'w':
 			get_threshold (optarg, rv);
 			if (rv[RTA]) {
-				wrta = strtod (rv[RTA], NULL);
+				wrta = 1e3 * strtod (rv[RTA], NULL);
+				wrta_p = TRUE;
 				rv[RTA] = NULL;
 			}
 			if (rv[PL]) {
 				wpl = atoi (rv[PL]);
+				wpl_p = TRUE;
 				rv[PL] = NULL;
 			}
 			break;
@@ -355,7 +355,6 @@ get_threshold (char *arg, char *rv[2])
 
 
 
-
 
 void
 print_help (void)
@@ -363,8 +362,10 @@ print_help (void)
 
 	print_revision (progname, "$Revision$");
 
+	printf (_("Copyright (c) 1999 Didi Rieder <adrieder@sbox.tu-graz.ac.at>\n"));
+	printf (_(COPYRIGHT), copyright, email);
+
 	printf (_("\
-Copyright (c) 1999 Didi Rieder (adrieder@sbox.tu-graz.ac.at)\n\n\
 This plugin will use the /bin/fping command (from saint) to ping the\n\
 specified host for a fast check if the host is alive. Note that it is\n\
 necessary to set the suid flag on fping.\n\n"));
-- 
cgit v0.10-9-g596f

