Re: [Nagios-devel] command pipe concatenated messages
Posted: Mon Dec 29, 2003 6:31 am
Jim Mozley wrote:
> I have been seeing a problem with submitting passive checks using
> version 1.0 on Solaris 8. I had some discusions on this originally on
> the nagios-users list, asked some questions on comp.lang.misc.perl and
> finally ended up discussing this with Al Tobey as he I had some
> questions on how he implemented command submission via in his perl module.
>
> The issue I see is with multiple passive checks becoming concatenated,
> so I end up with events like this:
>
> My service is Up Some description[1065056739]
> PROCESS_SERVICE_CHECK_RESULT:my-host:my-service:0:Some description.
>
> Where another passive check becomes part of the description field of the
> previous check.
>
The sample code below illustrates the problem. I have tried variations
of print, syswrite and using select to avoid I/O buffering. If the sleep
statement is commented out I see the concatenated commands. My checking
interval is set as command_check_interval=1s, I haven't tried setting
this to -1 yet!
#!/usr/local/bin/perl
# pass a nagios status code number as an argument
use strict;
use warnings;
# Modules
use Carp;
use Fcntl qw| :flock |;
# file private lexicals
my $DEBUG = 1;
my $host = "slugs";
my $service = "testing";
my $status = $ARGV[0];
die "No status number\n" unless defined $status; # status can
legitimately be 0
print "Status code: $status\n" if $DEBUG;
my $epoch = time;
for ( 1 .. 10 ) {
$status = 0 if $status > 2;
my $cmd = "[$epoch]
PROCESS_SERVICE_CHECK_RESULT;$host;$service;$status;Test $_ - status
$status";
print "$cmd\n" if $DEBUG;
nagios_cmd( $cmd );
$status++;
}
sub nagios_cmd {
my $cmd = shift;
my $pipe = '/usr/local/nagios/var/rw/nagios.cmd';
croak "$pipe does not exist!" unless ( -e $pipe );
croak "$pipe is not a pipe!" unless ( -p $pipe );
open(PIPE, "> $pipe") or croak "Cannot open pipe $!";
flock(PIPE, LOCK_EX);
#select((select(PIPE), $| = 1)[0]);
#print PIPE $cmd;
syswrite PIPE, "$cmd", length $cmd;
# wait before releasing lock so we don't overlap cmds to Nagios
sleep 2;
close PIPE or croak "Cannot close pipe $!"; # also releases lock
}
This post was automatically imported from historical nagios-devel mailing list archives
Original poster: [email protected]
> I have been seeing a problem with submitting passive checks using
> version 1.0 on Solaris 8. I had some discusions on this originally on
> the nagios-users list, asked some questions on comp.lang.misc.perl and
> finally ended up discussing this with Al Tobey as he I had some
> questions on how he implemented command submission via in his perl module.
>
> The issue I see is with multiple passive checks becoming concatenated,
> so I end up with events like this:
>
> My service is Up Some description[1065056739]
> PROCESS_SERVICE_CHECK_RESULT:my-host:my-service:0:Some description.
>
> Where another passive check becomes part of the description field of the
> previous check.
>
The sample code below illustrates the problem. I have tried variations
of print, syswrite and using select to avoid I/O buffering. If the sleep
statement is commented out I see the concatenated commands. My checking
interval is set as command_check_interval=1s, I haven't tried setting
this to -1 yet!
#!/usr/local/bin/perl
# pass a nagios status code number as an argument
use strict;
use warnings;
# Modules
use Carp;
use Fcntl qw| :flock |;
# file private lexicals
my $DEBUG = 1;
my $host = "slugs";
my $service = "testing";
my $status = $ARGV[0];
die "No status number\n" unless defined $status; # status can
legitimately be 0
print "Status code: $status\n" if $DEBUG;
my $epoch = time;
for ( 1 .. 10 ) {
$status = 0 if $status > 2;
my $cmd = "[$epoch]
PROCESS_SERVICE_CHECK_RESULT;$host;$service;$status;Test $_ - status
$status";
print "$cmd\n" if $DEBUG;
nagios_cmd( $cmd );
$status++;
}
sub nagios_cmd {
my $cmd = shift;
my $pipe = '/usr/local/nagios/var/rw/nagios.cmd';
croak "$pipe does not exist!" unless ( -e $pipe );
croak "$pipe is not a pipe!" unless ( -p $pipe );
open(PIPE, "> $pipe") or croak "Cannot open pipe $!";
flock(PIPE, LOCK_EX);
#select((select(PIPE), $| = 1)[0]);
#print PIPE $cmd;
syswrite PIPE, "$cmd", length $cmd;
# wait before releasing lock so we don't overlap cmds to Nagios
sleep 2;
close PIPE or croak "Cannot close pipe $!"; # also releases lock
}
This post was automatically imported from historical nagios-devel mailing list archives
Original poster: [email protected]