SF.net SVN: nagiosplug:[2178] nagiosplug/trunk

[email protected]
Newsgroups gmane.network.nagios.plugins.cvs
Message-ID <[email protected]>
Revision: 2178
          http://nagiosplug.svn.sourceforge.net/nagiosplug/?rev=2178&view=rev
Author:   dermoth
Date:     2009-03-20 06:29:37 +0000 (Fri, 20 Mar 2009)

Log Message:
-----------
negate: make timeouts configurable

From: Thomas Guyot-Sionnest <[email protected]>

Modified Paths:
--------------
    nagiosplug/trunk/NEWS
    nagiosplug/trunk/plugins/negate.c
    nagiosplug/trunk/plugins/t/negate.t

Modified: nagiosplug/trunk/NEWS
===================================================================
--- nagiosplug/trunk/NEWS	2009-03-20 06:29:25 UTC (rev 2177)
+++ nagiosplug/trunk/NEWS	2009-03-20 06:29:37 UTC (rev 2178)
@@ -26,6 +26,7 @@
 	Fixed check_http sending HTTP/1.0 with v1.1 headers (#2638765)
 	Fixed check_http not timing-out on redirects
 	Fixed negate not printing the real timeout in ALRM handler when left to default
+	negate timeout result is now configurable
 
 1.4.13 25th Sept 2008
 	Fix Debian bug #460097: check_http --max-age broken (Hilko Bengen)

Modified: nagiosplug/trunk/plugins/negate.c
===================================================================
--- nagiosplug/trunk/plugins/negate.c	2009-03-20 06:29:25 UTC (rev 2177)
+++ nagiosplug/trunk/plugins/negate.c	2009-03-20 06:29:37 UTC (rev 2178)
@@ -130,6 +130,7 @@
 		{"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'},
@@ -139,7 +140,7 @@
 	};
 
 	while (1) {
-		c = getopt_long (argc, argv, "+hVt:o:w:c:u:s", longopts, &option);
+		c = getopt_long (argc, argv, "+hVt:T:o:w:c:u:s", longopts, &option);
 
 		if (c == -1 || c == EOF)
 			break;
@@ -161,6 +162,10 @@
 			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)."));
@@ -246,6 +251,8 @@
 
 	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");
@@ -270,6 +277,9 @@
 	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));
 }
@@ -280,5 +290,5 @@
 print_usage (void)
 {
 	printf (_("Usage:"));
-	printf ("%s [-t timeout] [-owcu STATE] [-s] <definition of wrapped plugin>\n", progname);
+	printf ("%s [-t timeout] [-Towcu STATE] [-s] <definition of wrapped plugin>\n", progname);
 }

Modified: nagiosplug/trunk/plugins/t/negate.t
===================================================================
--- nagiosplug/trunk/plugins/t/negate.t	2009-03-20 06:29:25 UTC (rev 2177)
+++ nagiosplug/trunk/plugins/t/negate.t	2009-03-20 06:29:37 UTC (rev 2178)
@@ -8,8 +8,8 @@
 use Test::More;
 use NPTest;
 
-# 15 tests in the first part and 32 in the last loop
-plan tests => 47;
+# 15 tests in the first part, 9 in timeout tests and 2 * 32 in the last loops
+plan tests => 88;
 
 my $res;
 
@@ -53,18 +53,37 @@
 $res = NPTest->testCmd( './negate $PWD/check_dummy 0 \'$$ a dummy okay\'' );
 is( $res->output, 'OK: $$ a dummy okay', 'Proves that $$ is not being expanded again' );
 
-
 my %state = (
 	ok => 0,
 	warning => 1,
 	critical => 2,
 	unknown => 3,
 	);
-foreach my $current_state (qw(ok warning critical unknown)) {
-	foreach my $new_state (qw(ok warning critical unknown)) {
+
+# Timeout tests
+$res = NPTest->testCmd( "./negate -t 2 /bin/sh -c 'sleep 5'" );
+is( $res->output, 'CRITICAL - Plugin timed out after 2 seconds' );
+
+foreach my $state (keys(%state)) {
+	$res = NPTest->testCmd( "./negate -t 2 -T $state /bin/sh -c 'sleep 5'" );
+	is( $res->return_code, $state{$state}, "Got timeout state $state" );
+	is( $res->output,  uc($state)." - Plugin timed out after 2 seconds", "Timeout state $state output");
+}
+
+foreach my $current_state (keys(%state)) {
+	foreach my $new_state (keys(%state)) {
 		$res = NPTest->testCmd( "./negate --$current_state=$new_state ./check_dummy ".$state{$current_state}." 'Fake $new_state'" );
 		is( $res->return_code, $state{$new_state}, "Got fake $new_state" );
-		is( $res->output, uc($current_state).": Fake $new_state" );
+		is( $res->output, uc($current_state).": Fake $new_state", "Fake $new_state output");
 	}
 }
 
+# Same as aboce with substitute
+foreach my $current_state (keys(%state)) {
+	foreach my $new_state (keys(%state)) {
+		$res = NPTest->testCmd( "./negate -s --$current_state=$new_state ./check_dummy ".$state{$current_state}." 'Fake $new_state'" );
+		is( $res->return_code, $state{$new_state}, "Got fake $new_state (with substitute)" );
+		is( $res->output, uc($new_state).": Fake $new_state", "Substitued fake $new_state output");
+	}
+}
+


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.