hotsanic |
Subversion Repositories: |
Compare with Previous - Blame - Download
#!/usr/bin/env perl
use strict;
use warnings;
use diagnostics;
use lib "../../lib";
use HotSaNICparser;
use HotSaNICdiagram;
use RRDs;
# read global settings
#
my $MODNAME=HotSaNICparser::get_module_name();
my %CONFIG=HotSaNICparser::get_config("../..");
my $OUTDIR=$CONFIG{"WEBDIR"}."/".lc $MODNAME;
if ( ! -e $OUTDIR ) { mkdir "$OUTDIR",0755; }
my $IMGFMT=lc $CONFIG{"IMAGEFORMAT"};
my $TEMPNAME="$OUTDIR/temp.$IMGFMT";
my (@ITEMS,$name,$range,$descr,$CPUGRAPH,$NUMCPU);
my $FORCE=@ARGV;
my ($draw_cpu, $draw_load, $draw_proc, $draw_mem, $draw_users) = 0;
my ($draw_irq, $draw_uptime) = 0;
# read module-specific settings
#
foreach (HotSaNICparser::read_settings(".")) {
my ($var,$value)=HotSaNICparser::parse_line($_);
if ($var eq "CPUGRAPH") { $CPUGRAPH=$value; }
if ($var eq "NUMCPU") { $NUMCPU=$value; }
if ($var eq "IRQ") {
my ($num,$descr)=split /,/,$value;
$ITEMS[$num]=$descr;
}
if ($var eq "SECTIONS") {
my @sections = split " ", $value;
foreach (@sections){
if ($_ eq "cpu") {$draw_cpu=1}
if ($_ eq "load") {$draw_load=1}
if ($_ eq "proc") {$draw_proc=1}
if ($_ eq "mem") {$draw_mem=1}
if ($_ eq "users") {$draw_users=1}
if ($_ eq "int") {$draw_irq=1}
if ($_ eq "uptime") {$draw_uptime=1}
}
}
}
if ($NUMCPU < 1) { $NUMCPU=1; }
# generate diagrams
#
if ($draw_load) {plot_load()}
if ($draw_proc) {plot_proc()}
if ($draw_cpu) {plot_cpu()}
if ($draw_mem) {plot_mem()}
if ($draw_mem) {plot_swap()}
if ($draw_users) {plot_user()}
if ($draw_irq) {plot_irq()}
if ($draw_uptime) {plot_uptime()}
exit 0;
sub plot_load {
print "creating images for loadavg...\n";
opendir(DIR,"./rrd");
my @files=readdir(DIR);
closedir(DIR);
my @results=grep /load.*\.rrd/,@files;
foreach (@results) { s/\.rrd//g; }
# if database exists, create images...
if (@results) {
foreach my $dev (@results) {
print " $dev:\n";
foreach $range ("1h","6h","1day","1week","1month","1year") {
my ($descr,$file,$build,$fullrange,$DATESTRING)=HotSaNICdiagram::get_diagram_properties($range);
my $FILENAME="$OUTDIR/$dev-$file.$IMGFMT";
my $make=$FORCE;
if ($range eq "1h") { $make++; }
elsif (! -e "$FILENAME") { $make++; }
else {
my (undef,undef,undef,undef,undef,undef,undef,undef,undef,$mtime,undef,undef,undef) = stat( "$FILENAME" );
if (time > ($mtime+$build)) { $make++; }
}
if ($make>0) {
my ($prints,$xs,$ys);
if ($range eq "1h") {
($prints,$xs,$ys)=RRDs::graph $TEMPNAME, "-i",
"-s","-$range", "-w",$CONFIG{"WIDTH"}, "-h",$CONFIG{"HEIGHT"},
"-a", uc($IMGFMT), "-u 1", "--alt-autoscale-max", "-l 0", "--title", "system-load - last $descr ($DATESTRING)",
"DEF:ld1=rrd/$dev.rrd:load1:AVERAGE",
"DEF:ld2=rrd/$dev.rrd:load5:AVERAGE",
"DEF:ld3=rrd/$dev.rrd:load15:AVERAGE",
"AREA:ld1#ff0000: 1 min avg",
"GPRINT:ld1:MIN:(min\\:%1.2lf",
"GPRINT:ld1:MAX:max\\:%1.2lf)\\n",
"LINE2:ld2#aa0000: 5 min avg",
"GPRINT:ld2:MIN:(min\\:%1.2lf",
"GPRINT:ld2:MAX:max\\:%1.2lf)\\n",
"LINE2:ld3#330000:15 min avg",
"GPRINT:ld3:MIN:(min\\:%1.2lf",
"GPRINT:ld3:MAX:max\\:%1.2lf)\\n",
"HRULE:0#000000" or die "$!";
}
else {
($prints,$xs,$ys)=RRDs::graph $TEMPNAME, "-i",
"-s","-$range", "-w",$CONFIG{"WIDTH"}, "-h",$CONFIG{"HEIGHT"},
"-a", uc($IMGFMT), "-u 1", "--alt-autoscale-max", "-l 0", "--title", "system-load - last $descr ($DATESTRING)",
"DEF:avg1=rrd/$dev.rrd:load1:AVERAGE",
"DEF:min1=rrd/$dev.rrd:load1:MIN",
"DEF:max1=rrd/$dev.rrd:load1:MAX",
"DEF:avg5=rrd/$dev.rrd:load5:AVERAGE",
"DEF:avg15=rrd/$dev.rrd:load15:AVERAGE",
"AREA:max1#ffc0c0:min/max",
"LINE1:max1#a0a0a0:",
"AREA:min1#ffffff:",
"LINE1:min1#a0a0a0:",
"GPRINT:min1:MIN:(min\\:%1.2lf",
"GPRINT:min1:MAX:- %1.2lf",
"GPRINT:max1:MIN: max\\:%1.2lf",
"GPRINT:max1:MAX:- %1.2lf)",
"LINE1:avg1#ff0000:avg (1 min)",
"LINE1:avg5#aa0000:avg (5 min)",
"LINE1:avg15#330000:avg (15 min)",
"HRULE:0#000000" or die "$!";
}
rename $TEMPNAME,$FILENAME;
printf " %-7s %d"."x%d %s\n",$descr,$xs,$ys,$FILENAME;
}
}
}
}
else { print " No database found\n Please check if the daemon is running.\n"; }
print "\n";
}
sub plot_proc {
print "creating images for processes...\n";
opendir(DIR,"./rrd");
my @files=readdir(DIR);
closedir(DIR);
my @results=grep /proc.*\.rrd/,@files;
foreach (@results) { s/\.rrd//g; }
# if database exists, create images...
if (@results) {
foreach my $dev (@results) {
print " $dev:\n";
foreach $range ("1h","6h","1day","1week","1month","1year") {
my ($descr,$file,$build,$fullrange,$DATESTRING)=HotSaNICdiagram::get_diagram_properties($range);
my $FILENAME="$OUTDIR/$dev-$file.$IMGFMT";
my $make=$FORCE;
if ($range eq "1h") { $make++; }
elsif (! -e "$FILENAME") { $make++; }
else {
my (undef,undef,undef,undef,undef,undef,undef,undef,undef,$mtime,undef,undef,undef) = stat( "$FILENAME" );
if (time > ($mtime+$build)) { $make++; }
}
if ($make>0) {
my ($prints,$xs,$ys);
($prints,$xs,$ys)=RRDs::graph $TEMPNAME, "-i",
"-s","-$range", "-w",$CONFIG{"WIDTH"}, "-h",$CONFIG{"HEIGHT"},
"-a", uc($IMGFMT), "-l 0", "--title", "processes - last $descr ($DATESTRING)",
"DEF:slpmin=rrd/$dev.rrd:procslp:MIN",
"DEF:slpavg=rrd/$dev.rrd:procslp:AVERAGE",
"DEF:slpmax=rrd/$dev.rrd:procslp:MAX",
"DEF:runmin=rrd/$dev.rrd:procrun:MIN",
"DEF:runavg=rrd/$dev.rrd:procrun:AVERAGE",
"DEF:runmax=rrd/$dev.rrd:procrun:MAX",
"DEF:zmbmin=rrd/$dev.rrd:proczmb:MIN",
"DEF:zmbavg=rrd/$dev.rrd:proczmb:AVERAGE",
"DEF:zmbmax=rrd/$dev.rrd:proczmb:MAX",
"DEF:stpmin=rrd/$dev.rrd:procstp:MIN",
"DEF:stpavg=rrd/$dev.rrd:procstp:AVERAGE",
"DEF:stpmax=rrd/$dev.rrd:procstp:MAX",
"DEF:dscmin=rrd/$dev.rrd:procdsc:MIN",
"DEF:dscavg=rrd/$dev.rrd:procdsc:AVERAGE",
"DEF:dscmax=rrd/$dev.rrd:procdsc:MAX",
"AREA:slpavg#00ff00:sleeping",
"GPRINT:slpmin:MIN:(min\\:%3.0lf,",
"GPRINT:slpavg:AVERAGE:avg\\:%3.0lf,",
"GPRINT:slpmax:MAX: max\\:%3.0lf)\\n",
"STACK:dscavg#008800:disc ",
"GPRINT:dscmin:MIN:(min\\:%3.0lf,",
"GPRINT:dscavg:AVERAGE:avg\\:%3.0lf,",
"GPRINT:dscmax:MAX: max\\:%3.0lf)\\n",
"STACK:runavg#0000ff:running ",
"GPRINT:runmin:MIN:(min\\:%3.0lf,",
"GPRINT:runavg:AVERAGE:avg\\:%3.0lf,",
"GPRINT:runmax:MAX: max\\:%3.0lf)\\n",
"STACK:zmbavg#ff0000:zombie ",
"GPRINT:zmbmin:MIN:(min\\:%3.0lf,",
"GPRINT:zmbavg:AVERAGE:avg\\:%3.0lf,",
"GPRINT:zmbmax:MAX: max\\:%3.0lf)\\n",
"STACK:stpavg#505050:stopped ",
"GPRINT:stpmin:MIN:(min\\:%3.0lf,",
"GPRINT:stpavg:AVERAGE:avg\\:%3.0lf,",
"GPRINT:stpmax:MAX: max\\:%3.0lf)\\n",
"HRULE:0#000000";
rename $TEMPNAME,$FILENAME;
printf " %-7s %d"."x%d %s\n",$descr,$xs,$ys,$FILENAME;
}
}
}
}
else { print " No database found\n Please check if the daemon is running.\n"; }
print "\n";
}
sub plot_cpu {
print "creating images for CPU-usage...\n";
my ($PERCENT,$SIGN,$SIGN1);
if ($CPUGRAPH eq "percent" ) { $PERCENT="100"; $SIGN=" (%)"; $SIGN1=" %% "; }
else { $PERCENT="1"; $SIGN=""; $SIGN1=""; }
opendir(DIR,"./rrd");
my @files=readdir(DIR);
closedir(DIR);
my @results=grep /cpu.*\.rrd/,@files;
foreach (@results) { s/\.rrd//g; }
# if database exists, create images...
if (@results) {
foreach my $dev (@results) {
print " $dev:\n";
foreach $range ("1h","6h","1day","1week","1month","1year") {
my ($descr,$file,$build,$fullrange,$DATESTRING)=HotSaNICdiagram::get_diagram_properties($range);
my $FILENAME="$OUTDIR/$dev-$file.$IMGFMT";
my $make=$FORCE;
if ($range eq "1h") { $make++; }
elsif (! -e "$FILENAME") { $make++; }
else {
my (undef,undef,undef,undef,undef,undef,undef,undef,undef,$mtime,undef,undef,undef) = stat( "$FILENAME" );
if (time > ($mtime+$build)) { $make++; }
}
if ($make>0) {
my ($prints,$xs,$ys);
# for multicpu: plot range 0..1 for cpu0, cpu1, ... else range 0...$NUMCPU
#
my $NUM=$NUMCPU;
if ( $dev =~ /[0-9]/ ) { $NUM=1; }
if ( ($^O eq "linux") || ($^O eq "solaris") ) {
($prints,$xs,$ys)=RRDs::graph $TEMPNAME, "-i", "-b", "1024",
"-s","-$range", "-w",$CONFIG{"WIDTH"}, "-h",$CONFIG{"HEIGHT"},
"-u $NUMCPU", "-l 0", "-r", "--title", "CPU usage - last $descr ($DATESTRING)",
"-a", uc($IMGFMT),
"DEF:usrdat=rrd/$dev.rrd:cpuusr:AVERAGE",
"DEF:nicdat=rrd/$dev.rrd:cpunic:AVERAGE",
"DEF:sysdat=rrd/$dev.rrd:cpusys:AVERAGE",
"DEF:idldat=rrd/$dev.rrd:cpuidl:AVERAGE",
"CDEF:usravg=usrdat,$NUM,$PERCENT,*,*",
"CDEF:nicavg=nicdat,$NUM,$PERCENT,*,*",
"CDEF:sysavg=sysdat,$NUM,$PERCENT,*,*",
"CDEF:idlavg=idldat,$NUM,$PERCENT,*,*",
# "DEF:usrdx=rrd/$dev.rrd:cpuusr:MAX",
# "DEF:nicdx=rrd/$dev.rrd:cpunic:MAX",
# "DEF:sysdt=rrd/$dev.rrd:cpusys:MAX",
# "CDEF:usrmax=usrdx,$NUM,$PERCENT,*,*",
# "CDEF:nicmax=nicdx,$NUM,$PERCENT,*,*",
# "CDEF:sysmax=sysdx,$NUM,$PERCENT,*,*",
"AREA:sysavg#ff0000:system\\g",
"GPRINT:sysavg:MIN: (min\\:%7.2lf$SIGN1,\\g",
"GPRINT:sysavg:AVERAGE: avg\\:%7.2lf$SIGN1,\\g",
"GPRINT:sysavg:MAX: max\\:%7.2lf$SIGN1)\\n",
"STACK:usravg#0000ff:user\\g",
"GPRINT:usravg:MIN: (min\\:%7.2lf$SIGN1,\\g",
"GPRINT:usravg:AVERAGE: avg\\:%7.2lf$SIGN1,\\g",
"GPRINT:usravg:MAX: max\\:%7.2lf$SIGN1)\\n",
"STACK:nicavg#ffff00:nice\\g",
"GPRINT:nicavg:MIN: (min\\:%7.2lf$SIGN1,\\g",
"GPRINT:nicavg:AVERAGE: avg\\:%7.2lf$SIGN1,\\g",
"GPRINT:nicavg:MAX: max\\:%7.2lf$SIGN1)\\n",
"STACK:idlavg#00ff00:idle\\g",
"GPRINT:idlavg:MIN: (min\\:%7.2lf$SIGN1,\\g",
"GPRINT:idlavg:AVERAGE: avg\\:%7.2lf$SIGN1,\\g",
"GPRINT:idlavg:MAX: max\\:%7.2lf$SIGN1)\\n",
# "LINE1:sysmax#ff0000:",
# "LINE1:usrmax#0000ff:",
# "LINE1:nicmax#ffff00:",
"HRULE:0#000000";
}
elsif ( ($^O eq "freebsd") || ($^O eq "netbsd")) {
($prints,$xs,$ys)=RRDs::graph $TEMPNAME, "-i", "-b", "1024",
"-s","-$range", "-w",$CONFIG{"WIDTH"}, "-h",$CONFIG{"HEIGHT"},
"-u $NUMCPU", "-l 0", "--title", "CPU usage - last $descr ($DATESTRING)",
"-a", uc($IMGFMT),
"DEF:usravg=rrd/$dev.rrd:cpuusr:AVERAGE",
"DEF:nicavg=rrd/$dev.rrd:cpunic:AVERAGE",
"DEF:sysavg=rrd/$dev.rrd:cpusys:AVERAGE",
"DEF:idlavg=rrd/$dev.rrd:cpuidl:AVERAGE",
"DEF:intavg=rrd/$dev.rrd:cpuint:AVERAGE",
"AREA:sysavg#ff0000:system",
"GPRINT:sysavg:MIN:(min\\:%1.2lf,",
"GPRINT:sysavg:AVERAGE:avg\\:%1.2lf,",
"GPRINT:sysavg:MAX: max\\:%1.2lf)\\n",
"STACK:intavg#ff8c05:interrupt",
"GPRINT:intavg:MIN:(min\\:%1.2lf,",
"GPRINT:intavg:AVERAGE:avg\\:%1.2lf,",
"GPRINT:intavg:MAX: max\\:%1.2lf)\\n",
"STACK:usravg#0000ff:user",
"GPRINT:usravg:MIN:(min\\:%1.2lf,",
"GPRINT:usravg:AVERAGE:avg\\:%1.2lf,",
"GPRINT:usravg:MAX: max\\:%1.2lf)\\n",
"STACK:nicavg#ffff00:nice",
"GPRINT:nicavg:MIN:(min\\:%1.2lf,",
"GPRINT:nicavg:AVERAGE:avg\\:%1.2lf,",
"GPRINT:nicavg:MAX: max\\:%1.2lf)\\n",
"STACK:idlavg#00ffff:idle",
"GPRINT:idlavg:MIN:(min\\:%1.2lf,",
"GPRINT:idlavg:AVERAGE:avg\\:%1.2lf,",
"GPRINT:idlavg:MAX: max\\:%1.2lf)\\n",
"HRULE:0#000000";
}
rename $TEMPNAME,$FILENAME;
printf " %-7s %d"."x%d %s\n",$descr,$xs,$ys,$FILENAME;
}
}
}
}
else { print " No database found\n Please check if the daemon is running.\n"; }
print "\n";
}
sub plot_mem {
print "creating images for memory-usage...\n";
opendir(DIR,"./rrd");
my @files=readdir(DIR);
closedir(DIR);
my @results=grep /mem.*\.rrd/,@files;
foreach (@results) { s/\.rrd//g; }
# if database exists, create images...
if (@results) {
foreach my $dev (@results) {
print " $dev:\n";
foreach $range ("1h","6h","1day","1week","1month","1year") {
my ($descr,$file,$build,$fullrange,$DATESTRING)=HotSaNICdiagram::get_diagram_properties($range);
my $FILENAME="$OUTDIR/$dev-$file.$IMGFMT";
my $make=$FORCE;
if ($range eq "1h") { $make++; }
elsif (! -e "$FILENAME") { $make++; }
else {
my (undef,undef,undef,undef,undef,undef,undef,undef,undef,$mtime,undef,undef,undef) = stat( "$FILENAME" );
if (time > ($mtime+$build)) { $make++; }
}
if ($make>0) {
my ($prints,$xs,$ys);
if ($^O eq "linux") {
($prints,$xs,$ys)=RRDs::graph $TEMPNAME, "-i", "-b", "1024",
"-s","-$range", "-w",$CONFIG{"WIDTH"}, "-h",$CONFIG{"HEIGHT"},
"-u 1", "--alt-autoscale-max", "-l 0", "--title", "memory usage - last $descr ($DATESTRING)",
"-a", uc($IMGFMT),
"DEF:memfre=rrd/$dev.rrd:memfre:AVERAGE",
"DEF:memshr=rrd/$dev.rrd:memshr:AVERAGE",
"DEF:membuf=rrd/$dev.rrd:membuf:AVERAGE",
"DEF:memcac=rrd/$dev.rrd:memcac:AVERAGE",
"AREA:memcac#ffa000:cached ",
"GPRINT:memcac:MIN:(min\\:%7.2lf%s,",
"GPRINT:memcac:AVERAGE:avg\\:%7.2lf%s,",
"GPRINT:memcac:MAX: max\\:%7.2lf%s)\\n",
"STACK:memshr#ffff00:shared ",
"GPRINT:memshr:MIN:(min\\:%7.2lf%s,",
"GPRINT:memshr:AVERAGE:avg\\:%7.2lf%s,",
"GPRINT:memshr:MAX: max\\:%7.2lf%s)\\n",
"STACK:membuf#00ff00:buffered",
"GPRINT:membuf:MIN:(min\\:%7.2lf%s,",
"GPRINT:membuf:AVERAGE:avg\\:%7.2lf%s,",
"GPRINT:membuf:MAX: max\\:%7.2lf%s)\\n",
"STACK:memfre#00c000:free ",
"GPRINT:memfre:MIN:(min\\:%7.2lf%s,",
"GPRINT:memfre:AVERAGE:avg\\:%7.2lf%s,",
"GPRINT:memfre:MAX: max\\:%7.2lf%s)\\n",
"HRULE:0#000000";
}
if ($^O eq "solaris") {
($prints,$xs,$ys)=RRDs::graph $TEMPNAME, "-i", "-b", "1024",
"-s","-$range", "-w",$CONFIG{"WIDTH"}, "-h",$CONFIG{"HEIGHT"},
"-u 1", "--alt-autoscale-max", "-l 0", "--title", "memory usage - last $descr ($DATESTRING)",
"-a", uc($IMGFMT),
"DEF:memfre=rrd/$dev.rrd:memfre:AVERAGE",
"DEF:memshr=rrd/$dev.rrd:memshr:AVERAGE",
"AREA:memshr#ff0000:used ",
"GPRINT:memshr:MIN:(min\\:%7.2lf%s,",
"GPRINT:memshr:AVERAGE:avg\\:%7.2lf%s,",
"GPRINT:memshr:MAX: max\\:%7.2lf%s)\\n",
"STACK:memfre#00c000:free ",
"GPRINT:memfre:MIN:(min\\:%7.2lf%s,",
"GPRINT:memfre:AVERAGE:avg\\:%7.2lf%s,",
"GPRINT:memfre:MAX: max\\:%7.2lf%s)\\n",
"HRULE:0#000000";
}
elsif ($^O eq "freebsd") {
($prints,$xs,$ys)=RRDs::graph $TEMPNAME, "-i", "-b", "1024",
"-s","-$range", "-w",$CONFIG{"WIDTH"}, "-h",$CONFIG{"HEIGHT"},
"-u 1", "--alt-autoscale-max", "-l 0", "--title", "memory usage - last $descr ($DATESTRING)",
"-a", uc($IMGFMT),
"DEF:memfree=rrd/$dev.rrd:memfree:AVERAGE",
"DEF:memwire=rrd/$dev.rrd:memwire:AVERAGE",
"DEF:memactv=rrd/$dev.rrd:memactv:AVERAGE",
"DEF:meminac=rrd/$dev.rrd:meminac:AVERAGE",
"DEF:memcach=rrd/$dev.rrd:memcach:AVERAGE",
"AREA:memwire#0000ff:wired",
"GPRINT:memwire:MIN:(min\\:%1.2lf%s,",
"GPRINT:memwire:AVERAGE:avg\\:%1.2lf%s,",
"GPRINT:memwire:MAX: max\\:%1.2lf%s)\\n",
"STACK:memactv#ff0000:active",
"GPRINT:memactv:MIN:(min\\:%1.2lf%s,",
"GPRINT:memactv:AVERAGE:avg\\:%1.2lf%s,",
"GPRINT:memactv:MAX: max\\:%1.2lf%s)\\n",
"STACK:memcach#ffa000:cached",
"GPRINT:memcach:MIN:(min\\:%1.2lf%s,",
"GPRINT:memcach:AVERAGE:avg\\:%1.2lf%s,",
"GPRINT:memcach:MAX: max\\:%1.2lf%s)\\n",
"STACK:meminac#00ff00:inactive",
"GPRINT:meminac:MIN:(min\\:%1.2lf%s,",
"GPRINT:meminac:AVERAGE:avg\\:%1.2lf%s,",
"GPRINT:meminac:MAX: max\\:%1.2lf%s)\\n",
"STACK:memfree#00c000:free",
"GPRINT:memfree:MIN:(min\\:%1.2lf%s,",
"GPRINT:memfree:AVERAGE:avg\\:%1.2lf%s,",
"GPRINT:memfree:MAX: max\\:%1.2lf%s)\\n",
"HRULE:0#000000";
}
elsif ($^O eq "netbsd") {
($prints,$xs,$ys)=RRDs::graph $TEMPNAME, "-i", "-b", "1024",
"-s","-$range", "-w",$CONFIG{"WIDTH"}, "-h",$CONFIG{"HEIGHT"},
"-u 1", "--alt-autoscale-max", "-l 0", "--title", "memory usage - last $descr ($DATESTRING)",
"-a", uc($IMGFMT),
"DEF:memfree=rrd/$dev.rrd:memfree:AVERAGE",
"DEF:meminac=rrd/$dev.rrd:meminac:AVERAGE",
"DEF:memacti=rrd/$dev.rrd:memacti:AVERAGE",
"DEF:memwire=rrd/$dev.rrd:memwire:AVERAGE",
"DEF:memcach=rrd/$dev.rrd:memcach:AVERAGE",
"AREA:memcach#0000ff:cached",
"GPRINT:memcach:MIN:(min\\:%1.2lf%s,",
"GPRINT:memcach:AVERAGE:avg\\:%1.2lf%s,",
"GPRINT:memcach:MAX: max\\:%1.2lf%s)\\n",
"STACK:memwire#00dd55:wired",
"GPRINT:memwire:MIN:(min\\:%1.2lf%s,",
"GPRINT:memwire:AVERAGE:avg\\:%1.2lf%s,",
"GPRINT:memwire:MAX: max\\:%1.2lf%s)\\n",
"STACK:memacti#ff0000:active",
"GPRINT:memacti:MIN:(min\\:%1.2lf%s,",
"GPRINT:memacti:AVERAGE:avg\\:%1.2lf%s,",
"GPRINT:memacti:MAX: max\\:%1.2lf%s)\\n",
"STACK:meminac#993300:inactive",
"GPRINT:meminac:MIN:(min\\:%1.2lf%s,",
"GPRINT:meminac:AVERAGE:avg\\:%1.2lf%s,",
"GPRINT:meminac:MAX: max\\:%1.2lf%s)\\n",
"STACK:memfree#00ff00:free",
"GPRINT:memfree:MIN:(min\\:%1.2lf%s,",
"GPRINT:memfree:AVERAGE:avg\\:%1.2lf%s,",
"GPRINT:memfree:MAX: max\\:%1.2lf%s)\\n",
"HRULE:0#000000";
}
elsif ($^O eq "darwin") {
($prints,$xs,$ys)=RRDs::graph $TEMPNAME, "-i", "-b", "1024",
"-s","-$range", "-w",$CONFIG{"WIDTH"}, "-h",$CONFIG{"HEIGHT"},
"-u 1", "--alt-autoscale-max", "-l 0", "--title", "memory usage - last $descr ($DATESTRING)",
"-a", uc($IMGFMT),
"DEF:memfree=rrd/$dev.rrd:memfree:AVERAGE",
"DEF:memwire=rrd/$dev.rrd:memwire:AVERAGE",
"DEF:memactv=rrd/$dev.rrd:memactv:AVERAGE",
"DEF:meminac=rrd/$dev.rrd:meminac:AVERAGE",
"AREA:memwire#0000ff:wired",
"GPRINT:memwire:MIN:(min\\:%1.2lf%s,",
"GPRINT:memwire:AVERAGE:avg\\:%1.2lf%s,",
"GPRINT:memwire:MAX: max\\:%1.2lf%s)\\n",
"STACK:memactv#ff0000:active",
"GPRINT:memactv:MIN:(min\\:%1.2lf%s,",
"GPRINT:memactv:AVERAGE:avg\\:%1.2lf%s,",
"GPRINT:memactv:MAX: max\\:%1.2lf%s)\\n",
"STACK:meminac#00ff00:inactive",
"GPRINT:meminac:MIN:(min\\:%1.2lf%s,",
"GPRINT:meminac:AVERAGE:avg\\:%1.2lf%s,",
"GPRINT:meminac:MAX: max\\:%1.2lf%s)\\n",
"STACK:memfree#00c000:free",
"GPRINT:memfree:MIN:(min\\:%1.2lf%s,",
"GPRINT:memfree:AVERAGE:avg\\:%1.2lf%s,",
"GPRINT:memfree:MAX: max\\:%1.2lf%s)\\n",
"HRULE:0#000000";
}
rename $TEMPNAME,$FILENAME;
printf " %-7s %d"."x%d %s\n",$descr,$xs,$ys,$FILENAME;
}
}
}
}
else { print " No database found\n Please check if the daemon is running.\n"; }
print "\n";
}
sub plot_swap {
print "creating images for swapfile-usage...\n";
opendir(DIR,"./rrd");
my @files=readdir(DIR);
closedir(DIR);
my @results=grep /mem.*\.rrd/,@files;
foreach (@results) { s/\.rrd//g; }
# if database exists, create images...
if (@results) {
foreach my $dev (@results) {
print " $dev:\n";
foreach $range ("1h","6h","1day","1week","1month","1year") {
my ($descr,$file,$build,$fullrange,$DATESTRING)=HotSaNICdiagram::get_diagram_properties($range);
(my $dev1=$dev) =~ s/^mem/swap/g;
my $FILENAME="$OUTDIR/$dev1-$file.$IMGFMT";
my $make=$FORCE;
if ($range eq "1h") { $make++; }
elsif (! -e "$FILENAME") { $make++; }
else {
my (undef,undef,undef,undef,undef,undef,undef,undef,undef,$mtime,undef,undef,undef) = stat( "$FILENAME" );
if (time > ($mtime+$build)) { $make++; }
}
if ($make>0) {
my ($prints,$xs,$ys);
($prints,$xs,$ys)=RRDs::graph $TEMPNAME, "-i", "-b", "1024",
"-s","-$range", "-w",$CONFIG{"WIDTH"}, "-h",$CONFIG{"HEIGHT"},
"-u 1", "--alt-autoscale-max", "-l 0", "--title", "swapfile usage - last $descr ($DATESTRING)",
"-a", uc($IMGFMT),
"DEF:swpfre=rrd/$dev.rrd:swpfre:AVERAGE",
"DEF:swpuse=rrd/$dev.rrd:swpuse:AVERAGE",
"DEF:maxswpuse=rrd/$dev.rrd:swpuse:MAX",
"AREA:swpuse#c00000:used ",
"GPRINT:swpuse:MIN:(min\\:%7.2lf%s,",
"GPRINT:swpuse:AVERAGE:avg\\:%7.2lf%s,",
"GPRINT:swpuse:MAX: max\\:%7.2lf%s)\\n",
"STACK:swpfre#00c000:free ",
"GPRINT:swpfre:MIN:(min\\:%7.2lf%s,",
"GPRINT:swpfre:AVERAGE:avg\\:%7.2lf%s,",
"GPRINT:swpfre:MAX: max\\:%7.2lf%s)\\n",
"LINE1:maxswpuse#c0c000:max used",
"GPRINT:maxswpuse:MIN:(min\\:%7.2lf%s,",
"GPRINT:maxswpuse:AVERAGE:avg\\:%7.2lf%s,",
"GPRINT:maxswpuse:MAX: max\\:%7.2lf%s)\\n",
"HRULE:0#000000";
rename $TEMPNAME,$FILENAME;
printf " %-7s %d"."x%d %s\n",$descr,$xs,$ys,$FILENAME;
}
}
}
}
else { print " No database found\n Please check if the daemon is running.\n"; }
print "\n";
}
sub plot_user {
print "creating images for user-stats...\n";
opendir(DIR,"./rrd");
my @files=readdir(DIR);
closedir(DIR);
my @results=grep /users.*\.rrd/,@files;
foreach (@results) { s/\.rrd//g; }
# if database exists, create images...
if (@results) {
foreach my $dev (@results) {
print " $dev:\n";
foreach $range ("1h","6h","1day","1week","1month","1year") {
my ($descr,$file,$build,$fullrange,$DATESTRING)=HotSaNICdiagram::get_diagram_properties($range);
my $FILENAME="$OUTDIR/$dev-$file.$IMGFMT";
my $make=$FORCE;
if ($range eq "1h") { $make++; }
elsif (! -e "$FILENAME") { $make++; }
else {
my (undef,undef,undef,undef,undef,undef,undef,undef,undef,$mtime,undef,undef,undef) = stat( "$FILENAME" );
if (time > ($mtime+$build)) { $make++; }
}
if ($make>0) {
my ($prints,$xs,$ys);
($prints,$xs,$ys)=RRDs::graph $TEMPNAME, "-i", "-b", "1024",
"-s","-$range", "-w",$CONFIG{"WIDTH"}, "-h",$CONFIG{"HEIGHT"},
"-u 1", "--alt-autoscale-max", "-l 0", "--title", "users - last $descr ($DATESTRING)",
"-a", uc($IMGFMT),
"DEF:ttymin=rrd/$dev.rrd:tty:MIN",
"DEF:ttyavg=rrd/$dev.rrd:tty:AVERAGE",
"DEF:ttymax=rrd/$dev.rrd:tty:MAX",
"DEF:ptymin=rrd/$dev.rrd:pty:MIN",
"DEF:ptyavg=rrd/$dev.rrd:pty:AVERAGE",
"DEF:ptymax=rrd/$dev.rrd:pty:MAX",
"DEF:ptsmin=rrd/$dev.rrd:pts:MIN",
"DEF:ptsavg=rrd/$dev.rrd:pts:AVERAGE",
"DEF:ptsmax=rrd/$dev.rrd:pts:MAX",
"AREA:ttymax#000000:tty users",
"GPRINT:ttymin:MIN:(min\\:%3.0lf%s,",
"GPRINT:ttyavg:AVERAGE:avg\\:%3.0lf%s,",
"GPRINT:ttymax:MAX: max\\:%3.0lf%s)\\n",
"STACK:ptymax#808080:pty users",
"GPRINT:ptymin:MIN:(min\\:%3.0lf%s,",
"GPRINT:ptyavg:AVERAGE:avg\\:%3.0lf%s,",
"GPRINT:ptymax:MAX: max\\:%3.0lf%s)\\n",
"STACK:ptsmax#d0d0d0:pts users",
"GPRINT:ptsmin:MIN:(min\\:%3.0lf%s,",
"GPRINT:ptsavg:AVERAGE:avg\\:%3.0lf%s,",
"GPRINT:ptsmax:MAX: max\\:%3.0lf%s)\\n",
# "CDEF:totavg=ttyavg,ptyavg,ptsavg,+,+",
# "LINE1:totavg#c00000:total average",
# "GPRINT:totavg:MIN:(min\\:%3.0lf%s,",
# "GPRINT:totavg:AVERAGE:avg\\:%3.0lf%s,",
# "GPRINT:totavg:MAX: max\\:%3.0lf%s)\\n",
"HRULE:0#000000";
rename $TEMPNAME,$FILENAME;
printf " %-7s %d"."x%d %s\n",$descr,$xs,$ys,$FILENAME;
}
}
}
}
else { print " No database found\n Please check if the daemon is running.\n"; }
print "\n";
}
sub plot_irq {
print "creating images for interrupts...\n";
for (my $nn=0;$nn<18;$nn++) {
if (!defined $ITEMS[$nn]) { $ITEMS[$nn]="?"; }
if ($ITEMS[$nn] eq "") { $ITEMS[$nn]="?"; }
$ITEMS[$nn]=substr("(".substr($ITEMS[$nn],0,5).") ",0,7);
}
my $LEGEND="irq/s";
# if database exists, create images...
if ( -e "./rrd/irq.rrd") {
foreach $range ("1h","6h","1day","1week","1month","1year") {
my ($descr,$file,$build,$fullrange,$DATESTRING)=HotSaNICdiagram::get_diagram_properties($range);
my $FILENAME="$OUTDIR/irq-$file.$IMGFMT";
my $make=$FORCE;
if ($range eq "1h") { $make++; }
elsif (! -e "$FILENAME") { $make++; }
else {
my (undef,undef,undef,undef,undef,undef,undef,undef,undef,$mtime,undef,undef,undef) = stat( "$FILENAME" );
if (time > ($mtime+$build)) { $make++; }
}
if ($make>0) {
my ($prints,$xs,$ys);
($prints,$xs,$ys)=RRDs::graph $TEMPNAME, "-i", "-b","1024", "-v", $LEGEND,
"-s","-$range", "-w",$CONFIG{"WIDTH"}, "-h",$CONFIG{"HEIGHT"},
"-l 0", "--title", "total IRQ/s - last $descr ($DATESTRING)",
"-a", uc($IMGFMT),
"DEF:irqiall=rrd/irq.rrd:irqall:MIN",
"DEF:irqaall=rrd/irq.rrd:irqall:AVERAGE",
"DEF:irqxall=rrd/irq.rrd:irqall:MAX",
"DEF:irqa00=rrd/irq.rrd:irq00:AVERAGE",
"DEF:irqa01=rrd/irq.rrd:irq01:AVERAGE",
"DEF:irqa02=rrd/irq.rrd:irq02:AVERAGE",
"DEF:irqa03=rrd/irq.rrd:irq03:AVERAGE",
"DEF:irqa04=rrd/irq.rrd:irq04:AVERAGE",
"DEF:irqa05=rrd/irq.rrd:irq05:AVERAGE",
"DEF:irqa06=rrd/irq.rrd:irq06:AVERAGE",
"DEF:irqa07=rrd/irq.rrd:irq07:AVERAGE",
"DEF:irqa08=rrd/irq.rrd:irq08:AVERAGE",
"DEF:irqa09=rrd/irq.rrd:irq09:AVERAGE",
"DEF:irqa10=rrd/irq.rrd:irq10:AVERAGE",
"DEF:irqa11=rrd/irq.rrd:irq11:AVERAGE",
"DEF:irqa12=rrd/irq.rrd:irq12:AVERAGE",
"DEF:irqa13=rrd/irq.rrd:irq13:AVERAGE",
"DEF:irqa14=rrd/irq.rrd:irq14:AVERAGE",
"DEF:irqa15=rrd/irq.rrd:irq15:AVERAGE",
"AREA:irqxall#c0c0ff:total",
"AREA:irqiall#ffffff:\\g",
"GPRINT:irqiall:MIN: (min\\:%7.2lf %s /\\g",
"GPRINT:irqaall:AVERAGE: avg\\:%7.2lf %s /\\g",
"GPRINT:irqxall:MAX: max\\:%7.2lf %s $LEGEND)\\n",
"LINE1:irqxall#ff0000:",
"LINE1:irqiall#00ff00:",
"LINE1:irqaall#000000:",
"COMMENT:Averages (min/max)\\:\\n",
"LINE2:irqa00#a00000:00".$ITEMS[0],
"GPRINT:irqa00:MIN:%5.1lf%s/\\g",
"GPRINT:irqa00:MAX:%5.1lf%s",
"LINE2:irqa01#ff0000:01".$ITEMS[1],
"GPRINT:irqa01:MIN:%5.1lf%s/\\g",
"GPRINT:irqa01:MAX:%5.1lf%s",
"LINE2:irqa02#ff5050:02".$ITEMS[2],
"GPRINT:irqa02:MIN:%5.1lf%s/\\g",
"GPRINT:irqa02:MAX:%5.1lf%s",
"LINE2:irqa03#ffa0a0:03".$ITEMS[3],
"GPRINT:irqa03:MIN:%5.1lf%s/\\g",
"GPRINT:irqa03:MAX:%5.1lf%s\\n",
"LINE2:irqa04#00a000:04".$ITEMS[4],
"GPRINT:irqa04:MIN:%5.1lf%s/\\g",
"GPRINT:irqa04:MAX:%5.1lf%s",
"LINE2:irqa05#00ff00:05".$ITEMS[5],
"GPRINT:irqa05:MIN:%5.1lf%s/\\g",
"GPRINT:irqa05:MAX:%5.1lf%s",
"LINE2:irqa06#50ff50:06".$ITEMS[6],
"GPRINT:irqa06:MIN:%5.1lf%s/\\g",
"GPRINT:irqa06:MAX:%5.1lf%s",
"LINE2:irqa07#a0ffa0:07".$ITEMS[7],
"GPRINT:irqa07:MIN:%5.1lf%s/\\g",
"GPRINT:irqa07:MAX:%5.1lf%s\\n",
"LINE2:irqa08#0000a0:08".$ITEMS[8],
"GPRINT:irqa08:MIN:%5.1lf%s/\\g",
"GPRINT:irqa08:MAX:%5.1lf%s",
"LINE2:irqa09#0000ff:09".$ITEMS[9],
"GPRINT:irqa09:MIN:%5.1lf%s/\\g",
"GPRINT:irqa09:MAX:%5.1lf%s",
"LINE2:irqa10#5050ff:10".$ITEMS[10],
"GPRINT:irqa10:MIN:%5.1lf%s/\\g",
"GPRINT:irqa10:MAX:%5.1lf%s",
"LINE2:irqa11#a0a0ff:11".$ITEMS[11],
"GPRINT:irqa11:MIN:%5.1lf%s/\\g",
"GPRINT:irqa11:MAX:%5.1lf%s\\n",
"LINE2:irqa12#a000a0:12".$ITEMS[12],
"GPRINT:irqa12:MIN:%5.1lf%s/\\g",
"GPRINT:irqa12:MAX:%5.1lf%s",
"LINE2:irqa13#ff00ff:13".$ITEMS[13],
"GPRINT:irqa13:MIN:%5.1lf%s/\\g",
"GPRINT:irqa13:MAX:%5.1lf%s",
"LINE2:irqa14#ff50ff:14".$ITEMS[14],
"GPRINT:irqa14:MIN:%5.1lf%s/\\g",
"GPRINT:irqa14:MAX:%5.1lf%s",
"LINE2:irqa15#ffa0ff:15".$ITEMS[15],
"GPRINT:irqa15:MIN:%5.1lf%s/\\g",
"GPRINT:irqa15:MAX:%5.1lf%s",
"HRULE:0#000000";
rename $TEMPNAME,$FILENAME;
printf " %-7s %d"."x%d %s\n",$descr,$xs,$ys,$FILENAME;
}
}
}
else { print " No database found\n Please check if the daemon is running.\n"; }
print "\n";
}
sub plot_uptime {
print "creating images for uptime...\n";
opendir(DIR,"./rrd");
my @files=readdir(DIR);
closedir(DIR);
my @results=grep /uptime.*\.rrd/,@files;
foreach (@results) { s/\.rrd//g; }
# if database exists, create images...
if (@results) {
foreach my $dev (@results) {
print " $dev:\n";
foreach $range ("1day","1week","1month","1year") {
my ($descr,$file,$build,$fullrange,$DATESTRING)=HotSaNICdiagram::get_diagram_properties($range);
my $FILENAME="$OUTDIR/$dev-$file.$IMGFMT";
my $make=$FORCE;
if ($range eq "1h") { $make++; }
elsif (! -e "$FILENAME") { $make++; }
else {
my (undef,undef,undef,undef,undef,undef,undef,undef,undef,$mtime,undef,undef,undef) = stat( "$FILENAME" );
if (time > ($mtime+$build)) { $make++; }
}
if ($make>0) {
my ($prints,$xs,$ys)=RRDs::graph $TEMPNAME, "-i",
"-s","-$range", "-w",$CONFIG{"WIDTH"}, "-h",$CONFIG{"HEIGHT"},
"-u 2", "--alt-autoscale-max", "-l 0", "--title", "system-uptime - last $descr ($DATESTRING)",
"-a", uc($IMGFMT),
"DEF:up=rrd/$dev.rrd:up:AVERAGE",
"DEF:idle=rrd/$dev.rrd:idle:AVERAGE",
"AREA:up#00c000:uptime",
"GPRINT:up:MAX:(%1.2lf days)\\n",
"AREA:idle#aa0000:idle time",
"GPRINT:idle:MAX:(%1.2lf days)\\n",
"HRULE:0#000000";
rename $TEMPNAME,$FILENAME;
printf " %-7s %d"."x%d %s\n",$descr,$xs,$ys,$FILENAME;
}
}
}
}
else { print " No database found\n Please check if the daemon is running.\n"; }
print "\n";
}