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

Reply via email to