X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=blobdiff_plain;f=bindings%2Fperl-piped%2FRRDp.pm;h=65e9bb664112787a1c7ea54d846deb5fb0f432c3;hp=fb8e9e82a099d709c51feee962d158b968272ab6;hb=2a9b0ff9cf29cf82b7b12ea80889c59273d66008;hpb=fbe390e15d3484315efe5802577249c8959e3556 diff --git a/bindings/perl-piped/RRDp.pm b/bindings/perl-piped/RRDp.pm index fb8e9e8..65e9bb6 100644 --- a/bindings/perl-piped/RRDp.pm +++ b/bindings/perl-piped/RRDp.pm @@ -42,9 +42,12 @@ start RRDtool. The argument must be the path to the RRDtool executable =item B I -pass commands on to RRDtool. check the RRDtool documentation for +pass commands on to RRDtool. Check the RRDtool documentation for more info on the RRDtool commands. +B: Due to design limitations, B does not support the +C command - use C instead. + =item $answer = B read RRDtool's response to your command. Note that the $answer variable will @@ -66,7 +69,7 @@ running, System time is the time spend in system calls and real time is the total time RRDtool has been running. The difference between user + system and real is the time spent -waiting for things like the hard disk and new input from the perl +waiting for things like the hard disk and new input from the Perl script. =item B<$RRDp::error_mode> and B<$RRDp::error> @@ -102,6 +105,7 @@ For more information on how to use RRDtool, check the manpages. Tobias Oetiker =cut + #' this is to make cperl.el happy use strict; @@ -120,7 +124,7 @@ sub cmd (@); sub end (); sub read (); -$VERSION=1.2021; +$VERSION=1.4002; sub start ($){ croak "rrdtool is already running" @@ -146,7 +150,6 @@ sub read () { my $buffer; my $nfound; my $timeleft; - my $ERR = 0; vec($inmask,fileno(RRDreadHand),1) = 1; # setup select mask for Reader while (1) { my $rout; @@ -163,11 +166,14 @@ sub read () { $RRDp::error = undef; if ($line =~ m|^ERROR|) { $RRDp::error_mode eq 'catch' ? $RRDp::error = $line : croak $line; - $ERR = 1; + $RRDp::sys = undef; + $RRDp::user = undef; + $RRDp::real = undef; + return undef; } - elsif ($line =~ m|^OK u:([\d\.]+) s:([\d\.]+) r:([\d\.]+)|){ + elsif ($line =~ m|^OK(?: u:([\d\.]+) s:([\d\.]+) r:([\d\.]+))?|){ ($RRDp::sys,$RRDp::user,$RRDp::real)=($1,$2,$3); - return $ERR == 1 ? undef : \$buffer; + return \$buffer; } else { $buffer .= $line. "\n"; } @@ -184,6 +190,13 @@ sub cmd (@){ } $cmd =~ s/\n/ /gs; $cmd =~ s/\s/ /gs; + + # The generated graphs aren't necessarily terminated by a newline, + # causing RRDp::read() to wait for a line matching '^OK' forever. + if ($cmd =~ m/^\s*graph\s+-\s+/) { + croak "RRDp does not support the 'graph -' command - " + . "use 'graphv -' instead"; + } print RRDwriteHand "$cmd\n"; }