Re: [Nagios-devel] command pipe concatenated messages

Support forum for Nagios Core, Nagios Plugins, NCPA, NRPE, NSCA, NDOUtils and more. Engage with the community of users including those using the open source solutions.
Locked
Guest

Re: [Nagios-devel] command pipe concatenated messages

Post by Guest »

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]
Locked