From 08721598fcbfafa5c63f3977678c5f246daf7b84 Mon Sep 17 00:00:00 2001 From: octo Date: Sun, 5 Mar 2006 19:49:18 +0000 Subject: [PATCH] =?utf8?q?Added=20`collectd2html.pl'=20by=20Vincent=20Steh?= =?utf8?q?l=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- contrib/collectd2html.pl | 203 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 contrib/collectd2html.pl diff --git a/contrib/collectd2html.pl b/contrib/collectd2html.pl new file mode 100644 index 00000000..6ff1c479 --- /dev/null +++ b/contrib/collectd2html.pl @@ -0,0 +1,203 @@ +#!/usr/bin/perl + +################################################################################ +# +# collectd2html.pl +# +# Description: +# Generate an html page with all rrd data gathered by collectd. +# +# Usage: +# collectd2html.pl +# +# When run on , it generated .html and .dir, the latter +# containing all necessary images. +# +# +# Copyright 2006 Vincent Stehlé +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +################################################################################ + +use warnings; +use strict; +use Fatal qw(open close); +use File::Basename; + +my $DIR = "/var/lib/collectd"; +my @COLORS = (0xff7777, 0x7777ff, 0x55ff55, 0xffcc77, 0xff77ff, 0x77ffff, + 0xffff77, 0x55aaff); +my @tmp = `/bin/hostname`; chomp(@tmp); +my $HOST = $tmp[0]; +my $IMG_DIR = "${HOST}.dir"; +my $HTML = "${HOST}.html"; + +################################################################################ +# +# fade_component +# +# Description: +# Fade a color's component to the white. +# +################################################################################ +sub fade_component($) +{ + my($component) = @_; + return (($component + 255 * 5) / 6); +} + +################################################################################ +# +# fade_color +# +# Description: +# Fade a color to the white. +# +################################################################################ +sub fade_color($) +{ + my($color) = @_; + my $r = 0; + + for my $i (0 .. 2){ + my $shft = ($i * 8); + my $component = (($color >> $shft) & 255); + $r |= (fade_component($component) << $shft); + } + + return $r; +} + +################################################################################ +# +# main +# +################################################################################ +system("rm -fR $IMG_DIR"); +system("mkdir -p $IMG_DIR"); +local *OUT; +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); + +foreach my $rrd (sort @list){ + my $bn = basename($rrd); + $bn =~ s/\.rrd$//; + push(@rrds, $bn); +} + +# table of contents +print OUT <

$title

+

+END + +foreach my $bn (@rrds){ + my $cleaned_bn = $bn; $cleaned_bn =~ s/%/_/g; + print OUT <$bn +END +} + +print OUT < +END + +# graph interesting rrd +foreach my $bn (@rrds){ + print "$bn\n"; + + my $rrd = "$DIR/${bn}.rrd"; + 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 $defs = ""; + + foreach my $ds (@dss){ + $defs .= " DEF:${ds}_avg=$rrd:$ds:AVERAGE" + ." DEF:${ds}_max=$rrd:$ds:MAX "; + } + + # all AREA + $i = 0; + + foreach my $ds (@dss){ + my $color = $COLORS[$i % scalar(@COLORS)]; $i++; + my $faded_color = fade_color($color); + $defs .= sprintf(" AREA:${ds}_max#%06x ", $faded_color); + } + + # all LINE + $i = 0; + + foreach my $ds (@dss){ + my $color = $COLORS[$i % scalar(@COLORS)]; $i++; + $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; + print OUT <

$bn

+END + + # graph various ranges + foreach my $span qw(1hour 1day 1week 1month){ + my $png = "$IMG_DIR/${bn}-$span.png"; + + my $cmd = "rrdtool graph $png" + ." -t \"$bn $span\" --imgformat PNG --width 600 --height 100" + ." --start now-$span --end now --interlaced" + ." $defs >/dev/null 2>&1"; + system($cmd); + + my $cleaned_png = $png; $cleaned_png =~ s/%/%25/g; + print OUT <${bn} $span

+END + } + + print OUT <[top] +END +} + +print OUT < + + +END + +close(OUT); -- 2.11.0