[rrd-users] Dump and rebuild and restore XML with perl

0xception 0xception at gmail.com
Mon Mar 10 22:16:12 CET 2008


Hello, I'm currently working with several hundred RRD files and a large
chunk have the incorrect step and heartbeat .they were setup with a step of
300 and heartbeat of 900 where i would like to change them to 600 and 1800.
I've read that in order to accomplish this you need to dump the database
into XML with the rrdtool dump command and then alter the XML files
(adding/removing data points, and updating the settings) and then restore
the database from the modified XML, please correct me if i'm wrong about
that.

Anyway I've created a Perl script to dump to XML, read in the XML and change
the values of heartbeat and step and then remove every other data collection
point to be inline with the step of 600 sec. I then rebuild the XML and save
that to a file. The new XML file does not have any comments but contains
everything else. When i try and restore the database from this XML file i
get the error

*   'ERROR: Incompatible file version, detected version . This is not
supported by the version 0003 restore tool.*'

returned. I've looked through the modified XML file and i don't see anything
different, other then the order the tags are listed in the file. could this
cause a problem? or could the lack of comments cause a problem? I'm also
using the same version of rrdtool to dump as i am to restore the database,
RRDtool 1.2.23.

Original XML:
https://www.ondashboard.com/origional.xml

Modified XML:
https://www.ondashboard.com/modified.xml

Part of the Perl Script:

    # read XML file
    my $data = $xml->XMLin("dump.xml");

    $data->{step} = 600;

    my @xml;

    for my $rra ( @{ $data->{rra} } ) {
        my $lcv=0;
        my @new;

        # Loop through database and remove every other entry.
        for my $value ( @{ $rra->{database}->{row} } ) {
            if($lcv % 2 == 0 || $lcv == 0) {
                push(@new, \%$value);
            }
            $lcv++;
        }

        # Append XML with new Database
        $rra->{database}->{row} = \@new;
        push(@xml, $rra);
    }

    $data->{rra} = \@xml;

    # Export the perl structure into XML
    XMLout($data,     OutputFile => $file.".xml",
            RootName => 'rrd',
            NoAttr => 1);




Thanks.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.oetiker.ch/pipermail/rrd-users/attachments/20080310/64615364/attachment.html 


More information about the rrd-users mailing list