X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=contrib%2Fcollectd2html.pl;h=511b3f9d585d0a8ad2bfb1ea79e396fa7b8fdbac;hp=ab22bf97be48dc88500ebe3ecf5910708ba76191;hb=master;hpb=a37c766a9309e6efe7653d81fe4c44d6dc5b0af8 diff --git a/contrib/collectd2html.pl b/contrib/collectd2html.pl index ab22bf97..511b3f9d 100644 --- a/contrib/collectd2html.pl +++ b/contrib/collectd2html.pl @@ -41,24 +41,34 @@ use Fatal qw(open close); use File::Basename; use Getopt::Long qw(:config no_ignore_case bundling pass_through); -my $DIR = "/var/lib/collectd"; -my $HOST = undef; -my $IMG_FMT = "PNG"; +my $DIR = "/var/lib/collectd"; +my $HOST = undef; +my $IMG_FMT = "PNG"; +my $RECURSIVE = 1; GetOptions ( - "host=s" => \$HOST, - "data-dir=s" => \$DIR, - "image-format=s" => \$IMG_FMT + "host=s" => \$HOST, + "data-dir=s" => \$DIR, + "image-format=s" => \$IMG_FMT, + "recursive" => \$RECURSIVE ); +if (($DIR !~ m/\/rrd\/?$/) && (-d "$DIR/rrd")) { + $DIR .= "/rrd"; +} + +if (defined($HOST) && ($DIR !~ m/\/$HOST\/?$/) && (-d "$DIR/$HOST")) { + $DIR .= "/$HOST"; +} + my @COLORS = (0xff7777, 0x7777ff, 0x55ff55, 0xffcc77, 0xff77ff, 0x77ffff, 0xffff77, 0x55aaff); -my @tmp = `/bin/hostname`; chomp(@tmp); +my @tmp = `/bin/hostname -f`; chomp(@tmp); $HOST = $tmp[0] if (! defined $HOST); my $svg_p = ($IMG_FMT eq "SVG"); my $IMG_SFX = $svg_p ? ".svg" : ".png"; my $IMG_DIR = "${HOST}.dir"; -my $HTML = "${HOST}.html"; +my $HTML = "${HOST}.xhtml"; ################################################################################ # @@ -108,54 +118,70 @@ open(OUT, ">$HTML"); my $title="Rrd plot for $HOST"; print OUT < - + + + $title + -
END # list interesting rrd my @rrds; -my @list = `ls $DIR/*.rrd`; chomp(@list); +my @list; -foreach my $rrd (sort @list){ - my $bn = basename($rrd); - $bn =~ s/\.rrd$//; - push(@rrds, $bn); +if ($RECURSIVE) { + @list = `find $DIR -type f -name '*.rrd'`; +} +else { + @list = `ls $DIR/*.rrd`; +} +chomp(@list); + +@list = sort @list; +foreach my $rrd (@list){ + $rrd =~ m/^$DIR\/(.*)\.rrd$/; + push(@rrds, $1); } # table of contents print OUT <

$title

-

+

$title

+

END foreach my $bn (@rrds){ - my $cleaned_bn = $bn; $cleaned_bn =~ s/%/_/g; + my $cleaned_bn = $bn; + $cleaned_bn =~ tr/%\//__/; print OUT <$bn +$bn END } print OUT < +

END # graph interesting rrd -foreach my $bn (@rrds){ +for (my $i = 0; $i < scalar(@rrds); ++$i) { + my $bn = $rrds[$i]; print "$bn\n"; - my $rrd = "$DIR/${bn}.rrd"; + my $rrd = $list[$i]; my $cmd = "rrdtool info $rrd |grep 'ds\\[' |sed 's/^ds\\[//'" ." |sed 's/\\].*//' |sort |uniq"; my @dss = `$cmd`; chomp(@dss); # all DEF - my $i = 0; + my $j = 0; my $defs = ""; foreach my $ds (@dss){ @@ -164,32 +190,34 @@ foreach my $bn (@rrds){ } # all AREA - $i = 0; + $j = 0; foreach my $ds (@dss){ - my $color = $COLORS[$i % scalar(@COLORS)]; $i++; + my $color = $COLORS[$j % scalar(@COLORS)]; $j++; my $faded_color = fade_color($color); $defs .= sprintf(" AREA:${ds}_max#%06x ", $faded_color); } # all LINE - $i = 0; + $j = 0; foreach my $ds (@dss){ - my $color = $COLORS[$i % scalar(@COLORS)]; $i++; + my $color = $COLORS[$j % scalar(@COLORS)]; $j++; $defs .= sprintf(" LINE2:${ds}_avg#%06x:$ds" ." GPRINT:${ds}_avg:AVERAGE:%%5.1lf%%sAvg" ." GPRINT:${ds}_max:MAX:%%5.1lf%%sMax" , $color); } - my $cleaned_bn = $bn; $cleaned_bn =~ s/%/_/g; + my $cleaned_bn = $bn; + $cleaned_bn =~ tr/%\//__/; print OUT <

$bn

+

$bn

END # graph various ranges - foreach my $span qw(1hour 1day 1week 1month){ + foreach my $span (qw(1hour 1day 1week 1month)){ + system("mkdir -p $IMG_DIR/" . dirname($bn)); my $img = "$IMG_DIR/${bn}-$span$IMG_SFX"; my $cmd = "rrdtool graph $img" @@ -201,24 +229,28 @@ END my $cleaned_img = $img; $cleaned_img =~ s/%/%25/g; if (! $svg_p) { print OUT <${bn} $span

+

${bn} $span

END } else { print OUT < - ${bn} $span

+

+ ${bn} $span

END } } print OUT <[top] +

[top]

END } print OUT < +
+

+ Valid XHTML 1.0 Strict +

END