#!/usr/bin/perl
###########################################
# Feed test data to RRD
# Mike Schilli, 2004 (m@perlmeister.com)
###########################################
use warnings;
use strict;

use RRDs;

my $DB    = "/tmp/mydemo.rrd";
my $start = 1080460200;
my $dst   = "MAX";
my $nof_iterations = 40;
my $end   = $start + $nof_iterations * 60;

RRDs::create(
    $DB, "--step=60",
    "--start=" . ($start-10),
    "DS:load:GAUGE:90:0:10.0",
    "RRA:$dst:0.5:1:5",
    "RRA:$dst:0.5:5:10",
) or
    die "Cannot create rrd ($RRDs::error)";

for(0..$nof_iterations) {
    my $time = $start + $_ * 60;
    my $value = 2 + $_ * 0.1;

    RRDs::update(
        $DB, "$time:$value") or
         die "Cannot update rrd ($!)";
}

print "Last 5 minutes:\n";
fetch($end - 5*60, $end, $dst);

print "Last 30 minutes:\n";
fetch($end - 30*60, $end, $dst);

###########################################
sub fetch {
###########################################
    my($start, $end, $dst) = @_;

    my ($dbstart, $step, $names, $data) =
      RRDs::fetch($DB, "--start=$start", 
        "--end=$end", $dst);

    foreach my $line (@$data) {
        print "$start: ";
        $start += $step;
        foreach my $val (@$line) {
          $val = "N/A" unless defined $val;
          print "$val\n";
        }
    }
}
