Hi all,
I'm having trouble with error handling using the RRDp module. I need to be
able to handle the error if the RRDp::cmd command fails for any reason, but I
cannot, for the life of me, figure out how to get it out properly.
I've just been doing speed tests using RRDp vs. using /usr/bin/rrdtool and RRDp
is so much faster for multiple requests. The only problem is, when the
RRDp::cmd fails, the RRDp::read will just hang, forever. If I unset
RRDp::error_mode, then the RRDp pipe will just croak and my pipe is closed. I
guess if the pipe closes, then I could grab the error message from STDOUT and
re-open the pipe, however it would just be nice to able to use RRDp::read to
get the error message and not have to worry about it closing on me.
I've attached the test code that I've been working on. If the command is
successful, everything is fine, however if I the command fails, it will hang
forever. To simulate a failure, I just removed the write permissions on the
rrd directory. Same happens if I send RRDp::cmd bogus arguments.
Can anyone shed some light on this?
RRDTool version 1.2.19
Perl version 5.8.8
Debian Linux 2.6.17
Thanks very much,
Jason Schoonover
Code:
-----------------------------------------------------
use strict;
use RRDp;
my $rrdtool_bin = '/usr/bin/rrdtool';
my $pid = RRDp::start $rrdtool_bin;
$RRDp::error_mode = 'catch';
my $dir = './t';
system ("rm -fr $dir");
mkdir $dir;
my $now = time;
foreach my $num (0..10) {
my $rrd = $dir . '/' . $num . '.rrd';
RRDp::cmd "create --start $now $rrd DS:speed:GAUGE:86400:0:U
DS:in:COUNTER:86400:0:U DS:out:COUNTER:86400:0:U RRA:AVERAGE:0.5:1:600
RRA:AVERAGE:0.5:6:700 RRA:AVERAGE:0.5:24:775 RRA:AVERAGE:0.5:288:797
RRA:MAX:0.5:1:600 RRA:MAX:0.5:6:700 RRA:MAX:0.5:24:775 RRA:MAX:0.5:288:797";
my $answer = RRDp::read;
print $RRDp::error if $RRDp::error;
my ($usertime,$systemtime,$realtime) =
($RRDp::user,$RRDp::sys,$RRDp::real);
print "$rrd: $realtime\n";
}
my $end_res = RRDp::end;
print "end_res is $end_res\n";
_______________________________________________
rrd-users mailing list
[email protected]
https://lists.oetiker.ch/cgi-bin/listinfo/rrd-users