All pastes #347864 Raw Edit

Someone

public text v1 · immutable
·published 2007-02-09 19:30 UTC
rendered paste body
#!/usr/bin/perl

## upd.pl - update rrdtool rrds & graphs
## By //YorHel-kun

use strict;

## Import vars from the BEGIN (see below)
our $DEBUG;
our $scriptstart;

## /me wants to know how long this scripts executes,
## this includes loading the modules, so start in a BEGIN :)
BEGIN {
  our $DEBUG = $ARGV[0] || 0;
  $DEBUG && require Time::HiRes;
  $DEBUG && ( our $scriptstart = [Time::HiRes::gettimeofday()] );
}

use RRDp;
use Linux::stat;
use Sys::Uptime;
use Net::HTTP;
use Linux::net::dev;

my @graphs =  ( [ "1day", 300, 574, "HOUR:1:HOUR:6:HOUR:6:0:%H", "Hours ->", "past 2 days" ],
                [ "2week", 1800, 670, "DAY:1:WEEK:1:DAY:1:86400:%a", "", "past 2 weeks" ],
                [ "3month", 7200, 730, "DAY:1:WEEK:1:WEEK:1:604800:%W", "Weeks ->", "past 2 months" ],
                [ "4year", 43200, 1458, "MONTH:1:YEAR:1:MONTH:2:2592000:%b", "", "past 2 years" ] );
my($rdir, $gdir) = ("/var/www/lero/rrds", "/var/www/lero/graphs");
my $date = `date`; $date =~ s/\:/\\\:/g;
my $allops = qq ( 
	--imgformat PNG
	--height 200
	--width 600
	--color BACK#DDDDDD
	--color SHADEA#DDDDDD
	--color SHADEB#DDDDDD
 );

mkdr($gdir) if !-d $gdir;

RRDp::start "/usr/bin/rrdtool";

##### - Apache requests/second - #####
 $DEBUG && print "\nApache req/sec:\n";
 my $requests = 0; 
 my $httpd_kbytes = 0; ## for Apache bandwidth usage, see below
 if( my $req = Net::HTTP->new(Host => "localhost") ) {
   $req->write_request(GET => "/server-status/?auto");
   my $data;
   $req->read_entity_body($data, 1024) if $req->read_response_headers;
   $requests = $1 if $data =~ /Total\s*Accesses\:\s*([0-9]+)/mi;
   $httpd_kbytes = $1 if $data =~ /Total\s*kBytes\:\s*([0-9]+)/mi;
 }
 $DEBUG && print "  updating httpdreq.rrd with requests=$requests\n";
 RRDp::cmd  qq(update $rdir/httpdreq.rrd N:$requests );
  my $answer = RRDp::read;
 $DEBUG && print "   update httpdreq.rrd returned: $$answer\n";

 $DEBUG && print "  Creating graphs: httpdreq-day, httpdreq-week, httpdreq-month & httpdreq-year\n";
 foreach my $cg (@graphs) {
   my @cg = @$cg;
   my $end = int(time/$cg[1])*$cg[1];
   my $start = $end-(1*$cg[1]*$cg[2]);
   RRDp::cmd qq (graph $gdir/20httpdreq-$cg[0].png
        $allops
	--end $end
	--start $start
	--step $cg[1]
	--vertical-label "Requests/second"
	--title "//Apache requests/second - $cg[5]"
	--x-grid $cg[3]
	--alt-y-grid
	--units-exponent 0
	--alt-autoscale-max
	--lower-limit 0
	DEF:r=$rdir/httpdreq.rrd:httpd_requests:AVERAGE
	COMMENT:"$cg[4]   \\r"
	LINE1:r#FF0000:"Requests/second"
	 GPRINT:r:LAST:"   Current\\: %5.2lf  "
	 GPRINT:r:AVERAGE:"Avg\\: %5.2lf  "
	 GPRINT:r:MIN:"Min\\: %5.2lf  "
	 GPRINT:r:MAX:"Max\\: %5.2lf \\n"
	COMMENT:"\\n"
	COMMENT:"Last Updated\\: $date\\r"
    );
   my $answer = RRDp::read; $$answer =~ tr/\r\n/  /;
   $DEBUG && print "   graph 20httpdreq-$cg[0].png returned: $$answer\n";
 }  

##### - Apache bandwidth usage - #####
 $DEBUG && print "\nApache bandwidth:\n";
 my $bytes = $httpd_kbytes*1024;
 $DEBUG && print "  updating httpdnet.rrd with httpd_bytes=$bytes\n";
 RRDp::cmd  qq(update $rdir/httpdnet.rrd N:$bytes );
  my $answer = RRDp::read;
 $DEBUG && print "   update httpdnet.rrd returned: $$answer\n";

 $DEBUG && print "  Creating graphs: httpdnet-day, httpdnet-week, httpdnet-month & httpdnet-year\n";
 foreach my $cg (@graphs) {
   my @cg = @$cg;
   my $end = int(time/$cg[1])*$cg[1];
   my $start = $end-(1*$cg[1]*$cg[2]);
   RRDp::cmd qq (graph $gdir/21httpdnet-$cg[0].png
        $allops
	--end $end
	--start $start
	--step $cg[1]
	--vertical-label "Bytes/second"
	--title "//Apache bandwidth usage - $cg[5]"
	--x-grid $cg[3]
	--alt-y-grid
	--base 1024
	--alt-autoscale-max
	--lower-limit 0
	DEF:r=$rdir/httpdnet.rrd:httpd_bytes:AVERAGE
	COMMENT:"$cg[4]   \\r"
	LINE1:r#FF0000:"Bytes/second"
	 GPRINT:r:LAST:"   Current\\: %6.2lf %sb "
	 GPRINT:r:AVERAGE:"Avg\\: %6.2lf %sb "
	 GPRINT:r:MIN:"Min\\: %6.2lf %sb "
	 GPRINT:r:MAX:"Max\\: %6.2lf %sb\\n"
	COMMENT:"\\n"
	COMMENT:"Last Updated\\: $date\\r"
    );
   my $answer = RRDp::read; $$answer =~ tr/\r\n/  /;
   $DEBUG && print "   graph 21httpdnet-$cg[0].png returned: $$answer\n";
 }