NAME

POE::Component::Server::NRPE - A POE Component implementation of NRPE Daemon.

SYNOPSIS

  use strict;
  use POE;
  use POE::Component::Server::NRPE;

  my $port = 5666;
  
  my $nrped = POE::Component::Server::NRPE->spawn(
	port => $port;
  );

  $nrped->add_command( command => meep, program => \&_meep );

  $poe_kernel->run();
  exit 0;

  sub _meep {
    print STDOUT "OK meep\n";
    return 0;
  }

DESCRIPTION

POE::Component::Server::NRPE is a POE component that implements an NRPE (Nagios Remote Plugin Executor) daemon supporting both version 1 and version 2 protocols. It also supports SSL encryption using Net::SSLeay and a hacked version of POE::Component::SSLify.

Access is controlled by specifying Net::Netmask objects to the constructor. The default behaviour is to allow access from any IP address.

CONSTRUCTOR

spawn

Takes a number of parameters, which are optional:

'address', bind the listening socket to a particular address, default is IN_ADDR_ANY;
'port', specify a port to listen on, default is 5666;
'version', the NRPE protocol version to use, default is 2;
'usessl', set this to 0 to disable SSL support with NRPE Version 2, default is 1;
'time_out', specify a time out in seconds for socket connections and commands, default is 10;
'access', an arrayref of Net::Netmask objects that will be granted access, default is 'any';

Returns a POE::Component::Server::NRPE object.

METHODS

session_id

Returns the POE::Session ID of the component.

shutdown

Terminates the component. Shuts down the listener and disconnects connected clients.

getsockname

Access to the POE::Wheel::SocketFactory method of the underlying listening socket.

add_command

This will add a command that can be run. Takes a number of parameters:

'command', a label for the command. This is what clients will request, mandatory;
'program', the program to run. Can be a coderef, mandatory;
'args', the command line arguments to pass to the above program, must be an arrayref;

Returns 1 if successful, undef otherwise.

del_command

Removes a previously defined command. Takes one argument, the previously defined label to remove.

Returns 1 if successful, undef otherwise.

INPUT EVENTS

These are events from other POE sessions that our component will handle:

register_command

This will register the sending session with given command. Takes a number of parameters:

'command', a label for the command. This is what clients will request, mandatory;
'event', the name of the event in the registering session that will be triggered, mandatory;
'context', a scalar containing any reference data that your session demands;

The component will increment the refcount of the calling session to make sure it hangs around for events. Therefore, you should use either unregister_command or shutdown to terminate registered sessions.

Whenever clients request the given command, the component will send the indicated event to the registering session with the following parameters:

ARG0, a unique id of the client;
ARG1, the context ( if any );

Your session should then do any necessary processing and use return_result event to return the status and output to the component.

unregister_command

This will unregister the sending session with the given command. Takes one parameter:

'command', a previously registered command, mandatory;
return_result

After processing a command your session must use this event to return the status and output to the component. Takes three values:

The unique id of the client;
The status which should be 0, 1 , 2 or 3, indicating OK, WARNING, CRITICAL or UNKNOWN, respectively;
A string with some meaning output;

$kernel->post( 'nrped', 'return_result', $id, 0, 'OK Everything was cool' );
shutdown

Terminates the component. Shuts down the listener and disconnects connected clients.

CAVEATS

Due to problems with Net::SSLeay mixing of client and server SSL is not encouraged unless fork() is employed.

TODO

Add a logging capability.

AUTHOR

Chris BinGOs Williams <chris@bingosnet.co.uk>

This module uses code derived from http://www.stic-online.de/stic/html/nrpe-generic.html Copyright (C) 2006, 2007 STIC GmbH, http://www.stic-online.de

LICENSE

Copyright (C) Chris Williams and STIC GmbH

This module may be used, modified, and distributed under the same terms as Perl itself. Please see the license that came with your Perl distribution for details.

SEE ALSO

POE

POE::Component::SSLify

http://www.nagios.org/