On 29/01/07 10:47 PM, Thomas Guyot-Sionnest wrote:
> On 21/01/07 03:56 PM, Jan Wagner wrote:
>> Hey Guys,
>>
>> I can confirm this bug, since I'm also hit by it.
>>
>> nagios2:~# /usr/lib/nagios/plugins/check_tcp -H foobar -p 5223
>> TCP OK - 0,003 second response time on port 5223|
>> time=0,003496s;0,000000;0,000000;0,000000;10,000000
>> nagios2:~# /usr/lib/nagios/plugins/check_jabber -H foobar -p 5223
>> JABBER WARNING - 0,021 second response time on port 5223|
>> time=0,020542s;0.0;0.0;0.0;0.0
>>
>> Maybe anybody on upstream can confirm it (any hopefully fix it :-)?
> 
> The jabber check sends data and waits for a response. To get the same
> with check_tcp you would need the following additional parameters (I
> copied that from C code so I'm not sure if the escapes are all good):
> 
> --send="<stream:stream to=\'host\' xmlns=\'jabber:client\'
> xmlns:stream=\'http://etherx.jabber.org/streams\'>\n"
> 
> --expect="<?xml version=\'1.0\'?><stream:stream
> xmlns:stream=\'http://etherx.jabber.org/streams\'"
> 
> --quit="</stream:stream>\n";
> 
> --ssl
> 
> --jail
> 
> 
> The confusion here comes from --jail which does not only remove the
> output but also doesn't tell the reason of the warning. Without --jail
> you would get:
> 
> TCP WARNING - Unexpected response from host/socket: <INSERT_OUTPUT_HERE>
> 
> I'll see if there's an easy fix for that.
> 
> I also see one more possible problem. Should it be CRITICAL instead of
> WARNING when the output doesn't match? And do you have an external
> jabber host to check against so I can make sure the send/expect rules
> are right?

The attached patch (Also in CVS) will fix the reporting problem. If
there's any problem with the jabber check itself (i.e. warning status)
I'll need a server to test with. I guess that a bad server response
should mean a CRITICAL failure rather than a WARNING, right?

Regards,

Thomas
Index: plugins/check_tcp.c
===================================================================
RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/check_tcp.c,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -r1.82 -r1.83
--- plugins/check_tcp.c	28 Jan 2007 21:46:40 -0000	1.82
+++ plugins/check_tcp.c	30 Jan 2007 05:01:00 -0000	1.83
@@ -347,7 +347,10 @@
 	if(match == -2 && len && !(flags & FLAG_HIDE_OUTPUT))
 		printf("Unexpected response from host/socket: %s", status);
 	else {
-		printf("%.3f second response time on ", elapsed_time);
+		if(match == -2)
+			printf("Unexpected response from host/socket on ");
+		else
+			printf("%.3f second response time on ", elapsed_time);
 		if(server_address[0] != '/')
 			printf("port %d", server_port);
 		else
@@ -358,17 +361,24 @@
 		printf (" [%s]", status);
 
 	/* perf-data doesn't apply when server doesn't talk properly,
-	 * so print all zeroes on warn and crit */
+	 * so print all zeroes on warn and criti. Use fperfdata since
+	 * localisation settings can make different outputs */
 	if(match == -2)
-		printf ("|time=%fs;0.0;0.0;0.0;0.0", elapsed_time);
+		printf ("|%s",
+				fperfdata ("time", elapsed_time, "s",
+				TRUE, 0,
+				TRUE, 0,
+				TRUE, 0,
+				TRUE, socket_timeout)
+			);
 	else
 		printf("|%s",
 				fperfdata ("time", elapsed_time, "s",
-		                   TRUE, warning_time,
-		                   TRUE, critical_time,
-		                   TRUE, 0,
-		                   TRUE, socket_timeout)
-		      );
+				TRUE, warning_time,
+				TRUE, critical_time,
+				TRUE, 0,
+				TRUE, socket_timeout)
+			);
 
 	putchar('\n');
 	return result;
Index: plugins/t/check_tcp.t
===================================================================
RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/t/check_tcp.t,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- plugins/t/check_tcp.t	25 Jul 2005 01:47:15 -0000	1.3
+++ plugins/t/check_tcp.t	30 Jan 2007 05:01:00 -0000	1.4
@@ -10,7 +10,7 @@
 use NPTest;
 
 use vars qw($tests);
-BEGIN {$tests = 5; plan tests => $tests}
+BEGIN {$tests = 7; plan tests => $tests}
 
 my $host_tcp_http      = getTestParameter( "host_tcp_http",      "NP_HOST_TCP_HTTP",      "localhost",
 					   "A host providing the HTTP Service (a web server)" );
@@ -23,12 +23,15 @@
 
 my $successOutput = '/^TCP OK\s-\s+[0-9]?\.?[0-9]+ second response time on port [0-9]+/';
 
+my $failedExpect = '/^TCP WARNING\s-\sUnexpected response from host/socket on port [0-9]+/';
+
 my $t;
 
 $t += checkCmd( "./check_tcp $host_tcp_http      -p 80 -wt 300 -ct 600",       0, $successOutput );
 $t += checkCmd( "./check_tcp $host_tcp_http      -p 81 -wt   0 -ct   0 -to 1", 2 ); # use invalid port for this test
 $t += checkCmd( "./check_tcp $host_nonresponsive -p 80 -wt   0 -ct   0 -to 1", 2 );
 $t += checkCmd( "./check_tcp $hostname_invalid   -p 80 -wt   0 -ct   0 -to 1", 2 );
+$t += checkCmd( "./check_tcp $host_tcp_http      -p 80 -s 'GET /\n' -e 'ThisShouldntMatch' -j", 1, $failedExpect );
 
 exit(0) if defined($Test::Harness::VERSION);
 exit($tests - $t);

Reply via email to