Code

Update french translation (fix all fuzzy's)
[nagiosplug.git] / plugins / negate.c
index eccc404dfe1c3af2437e5c9e890ad918b6b6add9..8eac722023d2e28f6b7e670dc5e99843b3ede19d 100644 (file)
@@ -3,9 +3,7 @@
 * Nagios negate plugin
 * 
 * License: GPL
-* Copyright (c) 2002-2007 Nagios Plugins Development Team
-* 
-* Last Modified: $Date$
+* Copyright (c) 2002-2008 Nagios Plugins Development Team
 * 
 * Description:
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
-* $Id$
 * 
 *****************************************************************************/
 
 const char *progname = "negate";
-const char *revision = "$Revision$";
-const char *copyright = "2002-2007";
+const char *copyright = "2002-2008";
 const char *email = "nagiosplug-devel@lists.sourceforge.net";
 
-#define DEFAULT_TIMEOUT 9
+#define DEFAULT_TIMEOUT 11
 
 #include "common.h"
 #include "utils.h"
@@ -49,6 +45,7 @@ static const char **process_arguments (int, char **);
 int validate_arguments (char **);
 void print_help (void);
 void print_usage (void);
+int subst_text = FALSE;
 
 static int state[4] = {
        STATE_OK,
@@ -61,7 +58,7 @@ int
 main (int argc, char **argv)
 {
        int found = 0, result = STATE_UNKNOWN;
-       char *buf;
+       char *buf, *sub;
        char **command_line;
        output chld_out, chld_err;
        int i;
@@ -70,6 +67,8 @@ main (int argc, char **argv)
        bindtextdomain (PACKAGE, LOCALEDIR);
        textdomain (PACKAGE);
 
+       timeout_interval = DEFAULT_TIMEOUT;
+
        command_line = (char **) process_arguments (argc, argv);
 
        /* Set signal handling and alarm */
@@ -92,10 +91,22 @@ main (int argc, char **argv)
                exit (STATE_WARNING);
        }
 
+       /* Return UNKNOWN or worse if no output is returned */
        if (chld_out.lines == 0)
-               die (STATE_UNKNOWN, _("No data returned from command\n"));
+               die (max_state_alt (result, STATE_UNKNOWN), _("No data returned from command\n"));
 
        for (i = 0; i < chld_out.lines; i++) {
+               if (subst_text && result != state[result] &&
+                   result >= 0 && result <= 4) {
+                       /* Loop over each match found */
+                       while ((sub = strstr (chld_out.line[i], state_text (result)))) {
+                               /* Terminate the first part and skip over the string we'll substitute */
+                               *sub = '\0';
+                               sub += strlen (state_text (result));
+                               /* then put everything back together */
+                               asprintf (&chld_out.line[i], "%s%s%s", chld_out.line[i], state_text (state[result]), sub);
+                       }
+               }
                printf ("%s\n", chld_out.line[i]);
        }
 
@@ -119,15 +130,17 @@ process_arguments (int argc, char **argv)
                {"help", no_argument, 0, 'h'},
                {"version", no_argument, 0, 'V'},
                {"timeout", required_argument, 0, 't'},
+               {"timeout-result", required_argument, 0, 'T'},
                {"ok", required_argument, 0, 'o'},
                {"warning", required_argument, 0, 'w'},
                {"critical", required_argument, 0, 'c'},
                {"unknown", required_argument, 0, 'u'},
+               {"substitute", no_argument, 0, 's'},
                {0, 0, 0, 0}
        };
 
        while (1) {
-               c = getopt_long (argc, argv, "+hVt:o:w:c:u:", longopts, &option);
+               c = getopt_long (argc, argv, "+hVt:T:o:w:c:u:s", longopts, &option);
 
                if (c == -1 || c == EOF)
                        break;
@@ -141,7 +154,7 @@ process_arguments (int argc, char **argv)
                        exit (EXIT_SUCCESS);
                        break;
                case 'V':     /* version */
-                       print_revision (progname, revision);
+                       print_revision (progname, NP_VERSION);
                        exit (EXIT_SUCCESS);
                case 't':     /* timeout period */
                        if (!is_integer (optarg))
@@ -149,6 +162,10 @@ process_arguments (int argc, char **argv)
                        else
                                timeout_interval = atoi (optarg);
                        break;
+               case 'T':     /* Result to return on timeouts */
+                       if ((timeout_state = translate_state(optarg)) == ERROR)
+                               usage4 (_("Timeout result must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or integer (0-3)."));
+                       break;
                case 'o':     /* replacement for OK */
                        if ((state[STATE_OK] = translate_state(optarg)) == ERROR)
                                usage4 (_("Ok must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or integer (0-3)."));
@@ -170,6 +187,9 @@ process_arguments (int argc, char **argv)
                                usage4 (_("Unknown must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or integer (0-3)."));
                        permute = FALSE;
                        break;
+               case 's':     /* Substitute status text */
+                       subst_text = TRUE;
+                       break;
                }
        }
 
@@ -216,7 +236,7 @@ translate_state (char *state_text)
 void
 print_help (void)
 {
-       print_revision (progname, revision);
+       print_revision (progname, NP_VERSION);
 
        printf (COPYRIGHT, copyright, email);
 
@@ -229,16 +249,20 @@ print_help (void)
 
        printf (_(UT_HELP_VRSN));
 
-       printf (_(UT_TIMEOUT), DEFAULT_TIMEOUT);
+       printf (_(UT_TIMEOUT), timeout_interval);
        printf ("    %s\n", _("Keep timeout longer than the plugin timeout to retain CRITICAL status."));
+       printf (" -T, --timeout-result=STATUS\n");
+       printf ("    %s\n", _("Custom result on Negate timeouts; see below for STATUS definition\n"));
 
-       printf(" -o,--ok=STATUS\n");
-       printf(" -w,--warning=STATUS\n");
-       printf(" -c,--critical=STATUS\n");
-       printf(" -u,--unknown=STATUS\n");
+       printf(" -o, --ok=STATUS\n");
+       printf(" -w, --warning=STATUS\n");
+       printf(" -c, --critical=STATUS\n");
+       printf(" -u, --unknown=STATUS\n");
        printf(_("    STATUS can be 'OK', 'WARNING', 'CRITICAL' or 'UNKNOWN' without single\n"));
        printf(_("    quotes. Numeric values are accepted. If nothing is specified, permutes\n"));
        printf(_("    OK and CRITICAL.\n"));
+       printf(" -s, --substitute\n");
+       printf(_("    Substitute output text as well. Will only substitute text in CAPITALS\n"));
 
        printf ("\n");
        printf ("%s\n", _("Examples:"));
@@ -248,11 +272,14 @@ print_help (void)
        printf ("    %s\n", _("This will return OK instead of WARNING and UNKNOWN instead of CRITICAL"));
        printf ("\n");
        printf ("%s\n", _("Notes:"));
-       printf ("%s\n", _("This plugin is a wrapper to take the output of another plugin and invert it."));
-       printf ("%s\n", _("The full path of the plugin must be provided."));
-       printf ("%s\n", _("If the wrapped plugin returns OK, the wrapper will return CRITICAL."));
-       printf ("%s\n", _("If the wrapped plugin returns CRITICAL, the wrapper will return OK."));
-       printf ("%s\n", _("Otherwise, the output state of the wrapped plugin is unchanged."));
+       printf (" %s\n", _("This plugin is a wrapper to take the output of another plugin and invert it."));
+       printf (" %s\n", _("The full path of the plugin must be provided."));
+       printf (" %s\n", _("If the wrapped plugin returns OK, the wrapper will return CRITICAL."));
+       printf (" %s\n", _("If the wrapped plugin returns CRITICAL, the wrapper will return OK."));
+       printf (" %s\n", _("Otherwise, the output state of the wrapped plugin is unchanged."));
+       printf ("\n");
+       printf (" %s\n", _("Using timeout-result, it is possible to override the timeout behaviour or a"));
+       printf (" %s\n", _("plugin by setting the negate timeout a bit lower."));
 
        printf (_(UT_SUPPORT));
 }
@@ -263,5 +290,5 @@ void
 print_usage (void)
 {
        printf (_("Usage:"));
-       printf ("%s [-t timeout] [-owcu STATE] <definition of wrapped plugin>\n", progname);
+       printf ("%s [-t timeout] [-Towcu STATE] [-s] <definition of wrapped plugin>\n", progname);
 }