use RRDs; RRDs::error RRDs::last ... RRDs::info ... RRDs::create ... RRDs::update ... RRDs::updatev ... RRDs::graph ... RRDs::fetch ... RRDs::tune ... RRDs::times(start, end) RRDs::dump ... RRDs::restore ... RRDs::flushcached ... RRDs::register_fetch_cb ... $RRDs::VERSION
rrdtool update mydemo.rrd --template in:out N:12:13
gets turned into
RRDs::update ("mydemo.rrd", "--template", "in:out", "N:12:13");
Note that
--template=in:out
is also valid.
The RRDs::times function takes two parameters: a ``start'' and ``end'' time. These should be specified in the AT-STYLE TIME SPECIFICATION format used by RRDtool. See the rrdfetch documentation for a detailed explanation on how to specify time.
The function RRDs::error should be called to get the error status after each function call. If RRDs::error does not return anything then the previous function has completed its task successfully.
use RRDs; RRDs::update ("mydemo.rrd","N:12:13"); my $ERR=RRDs::error; die "ERROR while updating mydemo.rrd: $ERR\n" if $ERR;
RRDs::last returns a single INTEGER representing the last update time.
$lastupdate = RRDs::last ...
RRDs::graph returns an ARRAY containing the x-size and y-size of the created image and a pointer to an array with the results of the PRINT arguments.
($result_arr,$xsize,$ysize) = RRDs::graph ... print "Imagesize: ${xsize}x${ysize}\n"; print "Averages: ", (join ", ", @$averages);
RRDs::info returns a pointer to a hash. The keys of the hash represent the property names of the RRD and the values of the hash are the values of the properties.
$hash = RRDs::info "example.rrd"; foreach my $key (keys %$hash){ print "$key = $$hash{$key}\n"; }
RRDs::graphv takes the same parameters as RRDs::graph but it returns a pointer to hash. The hash returned contains meta information about the graph. Like its size as well as the position of the graph area on the image. When calling with '-' as the filename then the contents of the graph will be returned in the hash as well (key 'image').
RRDs::updatev also returns a pointer to hash. The keys of the hash are concatenated strings of a timestamp, RRA index, and data source name for each consolidated data point (CDP) written to disk as a result of the current update call. The hash values are CDP values.
RRDs::fetch is the most complex of the pack regarding return values. There are 4 values. Two normal integers, a pointer to an array and a pointer to an array of pointers.
my ($start,$step,$names,$data) = RRDs::fetch ... print "Start: ", scalar localtime($start), " ($start)\n"; print "Step size: $step seconds\n"; print "DS names: ", join (", ", @$names)."\n"; print "Data points: ", $#$data + 1, "\n"; print "Data:\n"; for my $line (@$data) { print " ", scalar localtime($start), " ($start) "; $start += $step; for my $val (@$line) { printf "%12.1f ", $val; } print "\n"; }
RRDs::xport exposes the rrdxport functionality and returns data with the following structure:
my ($start,$end,$step,$cols,$names,$data) = RRDs::xport ... # $start : timestamp # $end : timestamp # $step : seconds # $cols : number of returned columns # $names : arrayref with the names of the columns # $data : arrayref of arrayrefs with the data (first index is time, second is column)
RRDs::times returns two integers which are the number of seconds since epoch (1970-01-01) for the supplied ``start'' and ``end'' arguments, respectively.
See the examples directory for more ways to use this extension.
To do this, you have to first write a fetch function in perl, and then register this function using "RRDs::fetch_register_callback".
Finally you can use the pseudo path name cb//[filename] to tell rrdtool to use your callback routine instead of the normal rrdtool fetch function to organize the data required.
The callback function must look like this:
sub fetch_callback { my $args_hash = shift; # { # filename => 'cb//somefilename', # cd => 'AVERAGE', # start => 1401295291, # end => 1401295591, # step => 300 } # do some clever thing to get that data ready return { start => $unix_timestamp, step => $step_width, data => { dsName1 => [ value1, value2, ... ], dsName2 => [ value1, value2, ... ], dsName3 => [ value1, value2, ... ], } }; }
use POSIX qw(tzset); $ENV{TZ} = 'CET'; POSIX::tzset();