Code

fixes from richard brodie (tracker id 1216576)
[nagiosplug.git] / plugins / check_time.c
index e6c3c7167cdb0d4ed098db8044ce666f248524de..ff94d9b3a3a94bcb4f0ed763ad645e10149d2110 100644 (file)
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
+ $Id$
 ******************************************************************************/
 
-#include "common.h"
-#include "netutils.h"
-#include "utils.h"
-
 const char *progname = "check_time";
 const char *revision = "$Revision$";
-const char *copyright = "1999-2003";
+const char *copyright = "1999-2004";
 const char *email = "nagiosplug-devel@lists.sourceforge.net";
 
+#include "common.h"
+#include "netutils.h"
+#include "utils.h"
+
 enum {
        TIME_PORT = 37
 };
 
 #define        UNIX_EPOCH 2208988800UL
 
-unsigned long server_time, raw_server_time;
+uint32_t server_time, raw_server_time;
 time_t diff_time;
 int warning_time = 0;
 int check_warning_time = FALSE;
@@ -53,10 +55,15 @@ int
 main (int argc, char **argv)
 {
        int sd;
-       int result;
+       int result = STATE_UNKNOWN;
+       time_t conntime;
+
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
-       if (process_arguments (argc, argv) != OK)
-               usage (_("Invalid command arguments supplied\n"));
+       if (process_arguments (argc, argv) == ERROR)
+               usage4 (_("Could not parse arguments"));
 
        /* initialize alarm signal handling */
        signal (SIGALRM, socket_timeout_alarm_handler);
@@ -117,20 +124,25 @@ main (int argc, char **argv)
                else
                        result = STATE_UNKNOWN;
                die (result,
-                                                        _("TIME UNKNOWN - no data on recv() from server %s, port %d\n"),
+                                                        _("TIME UNKNOWN - no data received from server %s, port %d\n"),
                                                         server_address, server_port);
        }
 
        result = STATE_OK;
 
-       if (check_critical_time == TRUE && (end_time - start_time) > critical_time)
+       conntime = (end_time - start_time);
+       if (check_critical_time == TRUE && conntime > critical_time)
                result = STATE_CRITICAL;
-       else if (check_warning_time == TRUE
-                                        && (end_time - start_time) > warning_time) result = STATE_WARNING;
+       else if (check_warning_time == TRUE && conntime > warning_time)
+               result = STATE_WARNING;
 
        if (result != STATE_OK)
-               die (result, _("TIME %s - %d second response time\n"),
-                                                        state_text (result), (int) (end_time - start_time));
+               die (result, _("TIME %s - %d second response time|%s\n"),
+                    state_text (result), (int)conntime,
+                    perfdata ("time", (long)conntime, "s",
+                              check_warning_time, (long)warning_time,
+                              check_critical_time, (long)critical_time,
+                              TRUE, 0, FALSE, 0));
 
        server_time = ntohl (raw_server_time) - UNIX_EPOCH;
        if (server_time > (unsigned long)end_time)
@@ -143,16 +155,21 @@ main (int argc, char **argv)
        else if (check_warning_diff == TRUE && diff_time > (time_t)warning_diff)
                result = STATE_WARNING;
 
-       printf (_("TIME %s - %lu second time difference\n"), state_text (result),
-                                       diff_time);
+       printf (_("TIME %s - %lu second time difference|%s %s\n"),
+               state_text (result), diff_time,
+               perfdata ("time", (long)conntime, "s",
+                         check_warning_time, (long)warning_time,
+                         check_critical_time, (long)critical_time,
+                         TRUE, 0, FALSE, 0),
+               perfdata ("offset", (long)diff_time, "s",
+                         check_warning_diff, (long)warning_diff,
+                         check_critical_diff, (long)critical_diff,
+                         TRUE, 0, FALSE, 0));
        return result;
 }
 
 
 
-
-
-
 /* process command-line arguments */
 int
 process_arguments (int argc, char **argv)
@@ -199,7 +216,7 @@ process_arguments (int argc, char **argv)
 
                switch (c) {
                case '?':                                                                       /* print short usage statement if args not parsable */
-                       usage3 (_("Unknown argument"), optopt);
+                       usage2 (_("Unknown argument"), optarg);
                case 'h':                                                                       /* help */
                        print_help ();
                        exit (STATE_OK);
@@ -208,7 +225,7 @@ process_arguments (int argc, char **argv)
                        exit (STATE_OK);
                case 'H':                                                                       /* hostname */
                        if (is_host (optarg) == FALSE)
-                               usage (_("Invalid host name/address\n"));
+                               usage2 (_("Invalid hostname/address"), optarg);
                        server_address = optarg;
                        break;
                case 'w':                                                                       /* warning-variance */
@@ -222,11 +239,11 @@ process_arguments (int argc, char **argv)
                                        check_warning_time = TRUE;
                                }
                                else {
-                                       usage (_("Warning thresholds must be a nonnegative integer\n"));
+                                       usage4 (_("Warning thresholds must be a positive integer"));
                                }
                        }
                        else {
-                               usage (_("Warning threshold must be a nonnegative integer\n"));
+                               usage4 (_("Warning threshold must be a positive integer"));
                        }
                        break;
                case 'c':                                                                       /* critical-variance */
@@ -241,36 +258,36 @@ process_arguments (int argc, char **argv)
                                        check_critical_time = TRUE;
                                }
                                else {
-                                       usage (_("Critical thresholds must be a nonnegative integer\n"));
+                                       usage4 (_("Critical thresholds must be a positive integer"));
                                }
                        }
                        else {
-                               usage (_("Critical threshold must be a nonnegative integer\n"));
+                               usage4 (_("Critical threshold must be a positive integer"));
                        }
                        break;
                case 'W':                                                                       /* warning-connect */
                        if (!is_intnonneg (optarg))
-                               usage (_("Warning threshold must be a nonnegative integer\n"));
+                               usage4 (_("Warning threshold must be a positive integer"));
                        else
                                warning_time = atoi (optarg);
                        check_warning_time = TRUE;
                        break;
                case 'C':                                                                       /* critical-connect */
                        if (!is_intnonneg (optarg))
-                               usage (_("Critical threshold must be a nonnegative integer\n"));
+                               usage4 (_("Critical threshold must be a positive integer"));
                        else
                                critical_time = atoi (optarg);
                        check_critical_time = TRUE;
                        break;
                case 'p':                                                                       /* port */
                        if (!is_intnonneg (optarg))
-                               usage (_("Server port must be a nonnegative integer\n"));
+                               usage4 (_("Port must be a positive integer"));
                        else
                                server_port = atoi (optarg);
                        break;
                case 't':                                                                       /* timeout */
                        if (!is_intnonneg (optarg))
-                               usage (_("Timeout interval must be a nonnegative integer\n"));
+                               usage2 (_("Timeout interval must be a positive integer"), optarg);
                        else
                                socket_timeout = atoi (optarg);
                        break;
@@ -283,11 +300,11 @@ process_arguments (int argc, char **argv)
        if (server_address == NULL) {
                if (argc > c) {
                        if (is_host (argv[c]) == FALSE)
-                               usage (_("Invalid host name/address\n"));
+                               usage2 (_("Invalid hostname/address"), optarg);
                        server_address = argv[c];
                }
                else {
-                       usage (_("Host name was not supplied\n"));
+                       usage4 (_("Hostname was not supplied"));
                }
        }
 
@@ -296,9 +313,6 @@ process_arguments (int argc, char **argv)
 
 
 
-
-
-\f
 void
 print_help (void)
 {
@@ -307,11 +321,10 @@ print_help (void)
 
        print_revision (progname, revision);
 
-       printf (_("Copyright (c) 1999 Ethan Galstad\n"));
-       printf (_(COPYRIGHT), copyright, email);
+       printf ("Copyright (c) 1999 Ethan Galstad\n");
+       printf (COPYRIGHT, copyright, email);
 
-       printf (_("\
-This plugin will check the time on the specified host.\n\n"));
+       printf (_("This plugin will check the time on the specified host.\n\n"));
 
        print_usage ();
 
@@ -338,12 +351,10 @@ This plugin will check the time on the specified host.\n\n"));
 
 
 
-
 void
 print_usage (void)
 {
-       printf (_("\
+       printf ("\
 Usage: %s -H <host_address> [-p port] [-u] [-w variance] [-c variance]\n\
-    [-W connect_time] [-C connect_time] [-t timeout]\n"), progname);
-       printf (_(UT_HLP_VRS), progname, progname);
+                  [-W connect_time] [-C connect_time] [-t timeout]\n", progname);
 }