Michael,

I have done some graphs with GD::Graph which is pretty nice.  I have also
written some code to dump an RRD to a perl hash (ass. array) so combining
these two bits you could have a Pie Chart pretty quickly.  Code below, needs
tie'ing together but should be enough, would need to massage the data a
little before sticking into a PIE chart, need to do some quick
consolidation/summarisation, I have been meaning to whip something up but
busy with work.

Regards


Keith

# get stats
my ($statval,$head) = &getRRDasHash(rrd => $rrdfile, type => "AVERAGE",
start => $args{start}, end => $args{end});

# walk stats and do something with them (prints out as CSV file)
        print "Content-type: text/plain\n\n";
        foreach my $m (sort keys %{$statval}) {
                if ($f) {
                        $f = 0;
                        foreach my $h (@$head) {
                                push(@line,$h);
                                print STDERR "@line\n";
                        }
                        #print STDERR "@line\n";
                        $row = join("\t",@line);
                        print "$row\n";
                        @line = ();
                }
                $content = 0;
                foreach my $h (@$head) {
                        if ( defined $statval->{$m}{$h}) {
                                $content = 1;
                        }
                        push(@line,$statval->{$m}{$h});
                }
                if ( $content ) {
                        $row = join("\t",@line);
                        print "$row\n";
                }
                @line = ();
        }

# draw a pie chart
use GD::Graph::pie3d;
if ( -r $config{Technology_Table} ) {
        print &elapTime($stime) ." Technology Graph 
$config{Technology_Table}\n";
        my %tech_list = 
loadCSV($config{Technology_Table},$config{Technology_Key});
        @data;
        @d1;
        @d2;
        @d3;
        $i = 0;
        $max = 0;
        foreach my $key ( sort (keys %tech_list) ) {
                if  ($tech_list{$key}{type} eq "Technology" ) {
                        if ( $max < $tech_list{$key}{count} ) {
                                $max = $tech_list{$key}{count};
                        }
                        $d1[$i] = "$tech_list{$key}{technology}";
                        $d2[$i] = $tech_list{$key}{count};
                        ++$i;
                }
        }
        @data = ( [EMAIL PROTECTED], [EMAIL PROTECTED] );

        my $graph = GD::Graph::pie3d->new(640, 480);
        $graph->set(
                x_label           => 'Technology',
                y_label           => 'Node Count',
                #title             => 'Technology Profile',
                x_labels_vertical => 1,
                y_max_value       => $max,
                y_tick_number     => 8,
                y_label_skip      => 2
        );
        my $gd = $graph->plot([EMAIL PROTECTED]);
        open(IMG, ">$config{tech_image}") or die "ERROR with 
$config{tech_image}.
$!\n";
        binmode IMG;
        print IMG $gd->png;
        close IMG;
}


sub getRRDasHash {
        my %arg = @_;
        my ($begin,$step,$name,$data) =
RRDs::fetch($arg{rrd},$arg{type},"--start",$arg{start},"--end",$arg{end});
        my %s;
        my @h;
        my $f = 1;
        my $date;
        my $d;
        my $time = $begin;
        for(my $a = 0; $a <= $#{$data}; ++$a) {
                $d = 0;
                for(my $b = 0; $b <= $#{$data->[$a]}; ++$b) {
                        if ($f) { push(@h,$name->[$b]) }
                        $s{$time}{$name->[$b]} = $data->[$a][$b];
                        if ( defined $data->[$a][$b] ) { $d = 1; }
                }
                if ($d) {
                        $date = returnDateStamp($time);
                        $s{$time}{time} = $time;
                        $s{$time}{date} = $date;
                }
                if ($f) {
                        push(@h,"time");
                        push(@h,"date");
                }
                $f = 0;
                $time = $time + $step;
        }
        return (\%s,[EMAIL PROTECTED]);
}

> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] Behalf Of Michael T.
> Babcock
> Sent: Wednesday, June 05, 2002 10:09 AM
> To: [EMAIL PROTECTED]
> Subject: [rrd-developers] Re: PIE CHART ???
>
>
>
> > Hi, is there a way to graph PIE Charts using RRD ?
>
> It would be nice to have a good graphing tool that used the rrdtool
> libraries as a back-end.  On second thought, however, there are some
> good graphing libraries out there that do a lot more than what rrdtool
> does now.  Instead of reimplementing them, why not pick one and write an
> input module to rrdtool's database format for them, using an
> intermediary file to describe the data wanted (as per my prior
> XML-related message)?
>
> Some quick examples:
> http://www.aditus.nu/jpgraph/
> http://ourworld.compuserve.com/homepages/jsieberer/
> http://www.tulip-software.org/
> http://www.phplot.com/
> --
> Michael T. Babcock
> CTO, FibreSpeed Ltd.
> http://www.fibrespeed.net/~mbabcock/
>
> --
> Unsubscribe
> mailto:[EMAIL PROTECTED]
> Help        mailto:[EMAIL PROTECTED]
> Archive     http://www.ee.ethz.ch/~slist/rrd-developers
> WebAdmin    http://www.ee.ethz.ch/~slist/lsg2.cgi
>

--
Unsubscribe mailto:[EMAIL PROTECTED]
Help        mailto:[EMAIL PROTECTED]
Archive     http://www.ee.ethz.ch/~slist/rrd-developers
WebAdmin    http://www.ee.ethz.ch/~slist/lsg2.cgi

Reply via email to