ページ

2019年4月21日日曜日

RRD::Editor


RRD ファイルの構造を変更するときに CPAN の RRD::Editor は何かと便利です。

例 DS の type を COUNTER から DERIVE に変更する。

use File::Find;
use RRD::Editor;

$SIG{__DIE__} = sub {
    print $File::Find::name, "\n";
};

$| = 1;

$top_dir = "/path/to/rrd/.";

sub process {
    return unless (/\.rrd$/);
    return unless (-f $File::Find::name);

    print $File::Find::name, " ... ";
    my ($min_pdp, $max_pdp);
    my $rrd = RRD::Editor->new();
    $rrd->open($File::Find::name);
    foreach $name ($rrd->DS_names()) {
        if ($rrd->DS_type($name) eq "COUNTER") {
            $rrd->set_DS_type($name, "DERIVE");
        }
    }
    $rrd->save();
    $rrd->close();
};

find(\&process, $top_dir);

例 RRA のレコード数を変更する。

use File::Find;
use RRD::Editor;

$SIG{__DIE__} = sub {
    print $File::Find::name, "\n";
};

$| = 1;

$top_dir = "/path/to/rrd/.";

sub process {
    return unless (/\.rrd$/);
    return unless (-f $File::Find::name);

    print $File::Find::name, " ... ";
    my ($min_pdp, $max_pdp);
    my $rrd = RRD::Editor->new();
    $rrd->open($File::Find::name);
    for ($i=0; $i < $rrd->{rrd}->{rra_cnt}; $i++) {
        if ($rrd->{rrd}->{rra}[$i]->{pdp_cnt} == 1) {
            if ($rrd->{rrd}->{rra}[$i]->{row_cnt} < 18432) {
                $rrd->resize_RRA($i, 18432);
            }
        }
        if ($rrd->{rrd}->{rra}[$i]->{pdp_cnt} == 6) {
            if ($rrd->{rrd}->{rra}[$i]->{row_cnt} < 3072) {
                $rrd->resize_RRA($i, 3072);
            }
        }
        if ($rrd->{rrd}->{rra}[$i]->{pdp_cnt} == 24) {
            if ($rrd->{rrd}->{rra}[$i]->{row_cnt} < 768) {
                $rrd->resize_RRA($i, 768);
            }
        }
        if ($rrd->{rrd}->{rra}[$i]->{pdp_cnt} == 288) {
            if ($rrd->{rrd}->{rra}[$i]->{row_cnt} < 797) {
                $rrd->resize_RRA($i, 797);
            }
        }
    }
    $rrd->save();
    $rrd->close();
};
find(\&process, $top_dir);

0 件のコメント:

コメントを投稿