X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/upsgraph/blobdiff_plain/2c148a8ed56c09cb34ba4c44f5d6b84c06afb50c..5225937733d50608843fbf146b6ddda2b48ca237:/upsgraph.pl?ds=sidebyside
diff --git a/upsgraph.pl b/upsgraph.pl
index 24d196a..05553fd 100755
--- a/upsgraph.pl
+++ b/upsgraph.pl
@@ -8,6 +8,7 @@ if ((@ARGV != 1) && (@ARGV != 2)) {
use Net::SNMP;
use IO::Socket::INET;
use RRDs;
+use File::Copy;
use Data::Dumper;
$UPSGRAPH::outdir = "";
@@ -107,6 +108,11 @@ if ($> == 0) {
foreach my $host (@$hosts) {
my $rrdfile = $host->{'rrdfile'};
+ foreach my $var (keys(%{$host->{'vars'}})) {
+ $host->{'vars'}->{$var}->{'min'} = 'U' if (!defined($host->{'vars'}->{$var}->{'min'}));
+ $host->{'vars'}->{$var}->{'max'} = 'U' if (!defined($host->{'vars'}->{$var}->{'max'}));
+ }
+
if (-e "${rrdfile}") {
print "Reading old ${rrdfile} to preserve data...\n";
@@ -173,6 +179,36 @@ foreach my $host (@$hosts) {
exit 1;
}
+ if (defined($rrdinfo->{"ds[${field}].min"})) {
+ if ($rrdinfo->{"ds[${field}].min"} ne $host->{'vars'}->{$field}->{'min'}) {
+ RRDs::tune("${rrdfile}.${field}","-i",$field.":".$host->{'vars'}->{$field}->{'min'});
+ }
+ } else {
+ if ($host->{'vars'}->{$field}->{'min'} ne 'U') {
+ RRDs::tune("${rrdfile}.${field}","-i",$field.":".$host->{'vars'}->{$field}->{'min'});
+ }
+ }
+
+ if (RRDs::error) {
+ print "Error while setting min: " . RRDs::error . "\n";
+ exit 1;
+ }
+
+ if (defined($rrdinfo->{"ds[${field}].max"})) {
+ if ($rrdinfo->{"ds[${field}].max"} ne $host->{'vars'}->{$field}->{'max'}) {
+ RRDs::tune("${rrdfile}.${field}","-a",$field.":".$host->{'vars'}->{$field}->{'max'});
+ }
+ } else {
+ if ($host->{'vars'}->{$field}->{'max'} ne 'U') {
+ RRDs::tune("${rrdfile}.${field}","-a",$field.":".$host->{'vars'}->{$field}->{'max'});
+ }
+ }
+
+ if (RRDs::error) {
+ print "Error while setting max: " . RRDs::error . "\n";
+ exit 1;
+ }
+
if ($rrdinfo->{'rra[0].rows'} != $keep) {
print "Resizing ${rrdfile}.${field} from " . $rrdinfo->{'rra[0].rows'} .
" to ${keep} samples.\n";
@@ -288,15 +324,23 @@ while(1) {
}
foreach my $var (@{$host->{'fields'}}) {
- my @graphdef = ("-t", $hostname." - ".$vars->{$var}->{'name'}, "DEF:${var}=${rrdfile}.${var}:${var}:AVERAGE", "LINE1:${var}#FF0000");
+ my @graphdef = ("--lazy", "-t", $hostname." - ".$vars->{$var}->{'name'}, "DEF:${var}=${rrdfile}.${var}:${var}:AVERAGE", "LINE1:${var}#FF0000");
+
+ my $mtime;
+ $mtime=(stat("${outdir}/${hostname}.${var}.png.work"))[9];
+
(my $averages, my $width, my $height) =
- RRDs::graph("${outdir}/${hostname}.${var}.png.new",
+ RRDs::graph("${outdir}/${hostname}.${var}.png.work",
"-w", "720", @graphdef);
if (RRDs::error) {
print "Error while graphing: " . RRDs::error . "\n";
} else {
- rename("${outdir}/${hostname}.${var}.png.new", "${outdir}/${hostname}.${var}.png");
+ my $newmtime=(stat("${outdir}/${hostname}.${var}.png.work"))[9];
+ if ($newmtime != $mtime) {
+ copy("${outdir}/${hostname}.${var}.png.work", "${outdir}/${hostname}.${var}.png.new");
+ rename("${outdir}/${hostname}.${var}.png.new", "${outdir}/${hostname}.${var}.png");
+ }
}
print HTML "
\n";
@@ -318,38 +362,53 @@ while(1) {
push @graphdef, "VDEF:cur=${var},LAST";
push @graphdef, "GPRINT:cur:Current\\: %.2lf";
+ $mtime=(stat("${outdir}/${hostname}.${var}.long.png.work"))[9];
($averages, $width, $height) =
- RRDs::graph("${outdir}/${hostname}.${var}.long.png.new",
+ RRDs::graph("${outdir}/${hostname}.${var}.long.png.work",
"-w", "1008", @graphdef);
if (RRDs::error) {
print "Error while graphing: " . RRDs::error . "\n";
} else {
- rename("${outdir}/${hostname}.${var}.long.png.new", "${outdir}/${hostname}.${var}.long.png");
+ my $newmtime=(stat("${outdir}/${hostname}.${var}.long.png.work"))[9];
+ if ($newmtime != $mtime) {
+ copy("${outdir}/${hostname}.${var}.long.png.work", "${outdir}/${hostname}.${var}.long.png.new");
+ rename("${outdir}/${hostname}.${var}.long.png.new", "${outdir}/${hostname}.${var}.long.png");
+ }
}
print HTML2 "
";
+ $mtime=(stat("${outdir}/${hostname}.${var}.week.png.work"))[9];
($averages, $width, $height) =
- RRDs::graph("${outdir}/${hostname}.${var}.week.png.new",
+ RRDs::graph("${outdir}/${hostname}.${var}.week.png.work",
"-w", "1008", "-e", "now", "-s", "end-1w", @graphdef);
if (RRDs::error) {
print "Error while graphing: " . RRDs::error . "\n";
} else {
- rename("${outdir}/${hostname}.${var}.week.png.new", "${outdir}/${hostname}.${var}.week.png");
+ my $newmtime=(stat("${outdir}/${hostname}.${var}.week.png.work"))[9];
+ if ($newmtime != $mtime) {
+ copy("${outdir}/${hostname}.${var}.week.png.work", "${outdir}/${hostname}.${var}.week.png.new");
+ rename("${outdir}/${hostname}.${var}.week.png.new", "${outdir}/${hostname}.${var}.week.png");
+ }
}
print HTML2 "
";
+ $mtime=(stat("${outdir}/${hostname}.${var}.year.png.work"))[9];
($averages, $width, $height) =
- RRDs::graph("${outdir}/${hostname}.${var}.year.png.new",
+ RRDs::graph("${outdir}/${hostname}.${var}.year.png.work",
"-w", "1008", "-e", "now", "-s", "end-1y", @graphdef);
if (RRDs::error) {
print "Error while graphing: " . RRDs::error . "\n";
} else {
- rename("${outdir}/${hostname}.${var}.year.png.new", "${outdir}/${hostname}.${var}.year.png");
+ my $newmtime=(stat("${outdir}/${hostname}.${var}.year.png.work"))[9];
+ if ($newmtime != $mtime) {
+ copy("${outdir}/${hostname}.${var}.year.png.work", "${outdir}/${hostname}.${var}.year.png.new");
+ rename("${outdir}/${hostname}.${var}.year.png.new", "${outdir}/${hostname}.${var}.year.png");
+ }
}
print HTML2 "
";