#!/usr/bin/perl ########################################### # rrdload -- Measure CPU load over time # Mike Schilli, 2004 (m@perlmeister.com) ########################################### use warnings; use strict; use RRDs; use Getopt::Std; getopts("ug", \my %opts); my $DB = "/tmp/load.rrd"; my $SERVER = "/www/htdocs"; my $UPTIME = "uptime"; if(! -f $DB) { RRDs::create($DB, "--step=300", "DS:load:GAUGE:330:U:U", "RRA:MAX:0.5:1:288", "RRA:MAX:0.5:12:168", "RRA:MAX:0.5:288:365", ) or die "Create error: ($RRDs::error)"; } if(exists $opts{u}) { my $uptime = `$UPTIME`; my ($load) = ($uptime =~ /(\d\.\d+)/); RRDs::update($DB, time() . ":$load") or die "Update error: ($RRDs::error)"; } if(exists $opts{g}) { RRDs::graph("$SERVER/load.png", "--vertical-label=Load perlmeister.com", "--start=" . rrd_start_time(), "--end=" . time(), "DEF:myload=$DB:load:MAX", "LINE2:myload#FF0000") or die "graph failed ($RRDs::error)"; } ########################################### sub rrd_start_time { ########################################### my ($start,$step,$names,$data) = RRDs::fetch($DB, "MAX"); foreach my $line (@$data) { if(! defined $line->[0]) { $start += $step; next; } return $start; } }