From c5d2a40e2cad0e082c55b0fa6542ebdb231ab03a Mon Sep 17 00:00:00 2001 From: oetiker Date: Wed, 25 Jan 2006 19:09:12 +0000 Subject: [PATCH] allow RRDp to catch errors git-svn-id: svn://svn.oetiker.ch/rrdtool/branches/1.2/program@752 a5681a0c-68f1-0310-ab6d-d61299d08faa --- bindings/perl-piped/RRDp.pm | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/bindings/perl-piped/RRDp.pm b/bindings/perl-piped/RRDp.pm index 1e267e7..375578a 100644 --- a/bindings/perl-piped/RRDp.pm +++ b/bindings/perl-piped/RRDp.pm @@ -16,7 +16,7 @@ $answer = B $status = B -B<$RRDp::user>, B<$RRDp::sys>, B<$RRDp::real> +B<$RRDp::user>, B<$RRDp::sys>, B<$RRDp::real>, B<$RRDp::error_mode>, B<$RRDp::error> =head1 DESCRIPTION @@ -69,6 +69,16 @@ The difference between user + system and real is the time spent waiting for things like the hard disk and new input from the perl script. +=item B<$RRDp::error_mode> and B<$RRDp::error> + +If you set the variable $RRDp::error_mode to the value 'catch' before you run RRDp::read a potential +ERROR message will not cause the program to abort but will be returned in this variable. If no error +occurs the variable will be empty. + + $RRDp::error_mode = 'catch'; + RRDp::cmd qw(info file.rrd); + print $RRDp::error if $RRDp::error; + =back @@ -128,6 +138,7 @@ sub start ($){ sub read () { croak "RRDp::read can only be called after RRDp::cmd" unless $Sequence eq 'C'; + $RRDp::error = undef; $Sequence = 'R'; my $inmask = 0; my $srbuf; @@ -148,9 +159,10 @@ sub read () { $minibuf .= $srbuf; while ($minibuf =~ s|^(.+?)\n||s) { my $line = $1; - # print $line,"\n"; - if ($line =~ m|^ERROR|) { - croak $line; + # print $line,"\n"; + $RRDp::error = undef; + if ($line =~ m|^ERROR|) { + $RRDp::error_mode eq 'catch' ? $RRDp::error = $line : croak $line; $ERR = 1; } elsif ($line =~ m|^OK u:([\d\.]+) s:([\d\.]+) r:([\d\.]+)|){ -- 2.30.2