[rrd-users] Re: CDEFs and graduated colors

Allan Houston ahouston at blueyonder.co.uk
Thu May 1 15:26:06 MEST 2003


> It would be nice if Dave Beaumont would post his scripts for generating
>
http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/gallery/beaumont-01.html
>
> As a matter of fact, It would be nice if the code were available for all
> the gallery images.  They would server as great examples.

Joao asked for some example graphs so here they are -
http://www.ahouston.pwp.blueyonder.co.uk/

One thing I noticed was that using stacked CDEFs made for a very "blocky"
graph - so what I've tried to do is increase the granularity by using say
200 CDEFs of 0.5 instead of stacking 100 with a value of 1.

My perl code is truly awful, so I apologise in advance ;o)

# granularity = the number of points per percent that we'll
# graph to. i.e. value of 2 means that graphs will be rounded up to the
# nearest half percent.

my $granularity = 2;


@ds_arg_rrd=("","-v","%","--title",$title,"--start",$start,"--end",$end,
"-w",$width,"-h",$height,"-c","CANVAS#000000","-c","BACK#3399FF","-c","FONT#
FFFFFF","--no-minor");

 $ds_arg_rrd[0]="downstream.gif";
 push @ds_arg_rrd,"DEF:ds=$rrd_file:$ds:AVERAGE";
 push @ds_arg_rrd,"CDEF:dsutil=ds,$speed_ref->{ds},/,100,*";

 # speed_ref is a pre-populated hash with the speed of the int


 foreach $f  (0.. ($granularity*100) )
 {
  $f_factor=$f / $granularity;
  push @ds_arg_rrd,
  "CDEF:ds_flame_$f=dsutil,$f_factor,GE,$granularity,/";
 }

 push @ds_arg_rrd,"AREA:ds_flame_0$flame[0]";

 foreach $f  (0 .. ($granularity*100) )
 {

  # @flame is an array of graduated colors,
  # 255 elements big.
  # we divide by 254 to ensure that we dont
  # index a value of out the arrays bounds.

  $f_factor=$f / ($granularity*100/254);
  push @ds_arg_rrd,
  "STACK:ds_flame_$f$flame[$f_factor]";
 }


 ($averages,$w,$h)=RRDs::graph(@ds_arg_rrd);
 my $err=RRDs::error;
 print "ERROR while updating $rrd_file: $err\n" if
 $err;


 sub flame_colors()
 {

        # This sub creates the @flame array by incrementing red
        # while decrementing blue. Green stays constant

        foreach $i (0..255)
        {
                $r = $i;
                $b = 255 - $i;
                $g = '00';

                if ($r<=15) {$r_hex='0';} else {$r_hex='';}
                if ($b<=15) {$b_hex='0';} else {$b_hex='';}
                $r_hex.=sprintf("%x",$r);
                $b_hex.=sprintf("%x",$b);
                $g_hex =$g;

                $color="#$r_hex$g_hex$b_hex";
                push @flame,$color;
        }
}


Cheers,
Allan Houston


--
Unsubscribe mailto:rrd-users-request at list.ee.ethz.ch?subject=unsubscribe
Help        mailto:rrd-users-request at list.ee.ethz.ch?subject=help
Archive     http://www.ee.ethz.ch/~slist/rrd-users
WebAdmin    http://www.ee.ethz.ch/~slist/lsg2.cgi



More information about the rrd-users mailing list