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);