The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

# Send a selection command to a host that is running an rrdselect process
# and collect its details. You can then send this to whatever..
# Hey its and example OK!

# rrdcommand -s 4803@hostname 'routername:ping:MAX:-s:-5443200'

use Spread::Message;
use Data::Dumper;
use Getopt::Std;

use vars qw/$opt_s $opt_m $opt_t/;   # spread, manager, timeout
unless(getopts('s:m:t:'))
{
	print "rrdcommand [-s spread] [-t timeout]\n";
	exit 1;
}

my $spread  = $opt_s || '4803@localhost';
my $timeout = $opt_t || 3;

my $command = "@ARGV";
unless($command)
{
	print "rrdcommand [-s spread] [-t timeout] command\n";
	exit 1;
}

my $Got_message = 0;
my $Timedout = 0;

my $Sent = 0;     # Have we sent our command
my $name = "rrdc$$";
my $mbox = Spread::Message->new(
	name        => $name,
	spread_name => $spread,
	group       => ['selecting-rrd'],
#	debug       => 1,
	member_sub  => \&control,
	message_sub => \&message,
	error_sub   => \&message,
	timeout_sub => \&bye,
);
$mbox->connect() || die "Can't connect to Spread Daemon";


$mbox->send('selecting-rrd',$command);
while(1){ $mbox->rx(1); last if $Timedout > 3;}

exit;

sub control
{
	my $mbox = shift;
}

sub message
{
	my $mbox = shift;
	if($mbox->aimed_at_me && $mbox->new_msg)
	{
		print $mbox->msg;
		$Timedout = 4;
	}
}

sub bye
{
	exit if $Got_message;
	$Timedout++;
}