#!/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++;
}