Hi all,
I still have not solved my RRDp::read problem, so I've written my own rrdp_read
function based off of the RRDp::read() code in RRDp 12019.
I basically simplified the read function, and changed a few of the regular
expressions and it seems to work for me. However, I removed the vec() and
select() lines, and things are still functioning properly. Can someone explain
what those are actually doing and if they're necessary?
I'm doing my own time calculations with Time::HiRes, so I removed the
^OK regexp almost completely, the only problem with my version of rrdtool, is
that for some reason the buffer was registering "\nOK" instead of "OK" (new
line before OK), so it never got into the $minibuf loop, it just sat in the
while(1) infinitely.
Here is my read function. It seems to work well. Can anyone see any holes in
it?
The return function returns two vars: success/failure and the address of error
msg.
Thanks,
Jason Schoonover
---------------------------------------
sub rrdtool_read {
my $sys_buffer;
my $mini_buffer;
my $buffer;
while (1) {
sysread (READ, $sys_buffer, 4096);
$mini_buffer .= $sys_buffer;
while ($mini_buffer =~ s|^\s*(.+?)\n||s) {
my $line = $1;
## this means there was an error
if ($line =~ /^ERROR/) {
return (1, \$line);
## this means either it was finished and everything is
good
## or the syntax or command was wrong
## either way, we need to exit after this and say it
was a success
} elsif ($line =~ /^OK/) {
return (0, \$buffer);
} else {
$buffer .= $line . "\n";
}
}
}
}
_______________________________________________
rrd-users mailing list
[email protected]
https://lists.oetiker.ch/cgi-bin/listinfo/rrd-users