Thanks for the suggestions. I'll try that and see if I can get it closer to working.
Thanks! Laura Joshua Keroes wrote: > See below > > On Fri, Sep 26, 2008 at 8:05 AM, Laura McCord > <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote: > > I have my data loaded into an array but everytime I try to graph the > data I get a "Can't call method "png" on an undefined value... > > I am using Perl and the Graph module to produce a bar graph. Here is a > sample of my data and my source code. Perhaps someone will notice > what I > am doing wrong. > > Thanks. > > > Here is some sample data: > > Fri Sep 26 00:00:00 2008 0.1 > Fri Sep 26 01:00:00 2008 0.0 > Fri Sep 26 02:00:00 2008 0.1 > Fri Sep 26 03:00:00 2008 0.1 > Fri Sep 26 04:00:00 2008 0.2 > Fri Sep 26 05:00:00 2008 0.1 > Fri Sep 26 06:00:00 2008 0.2 > Fri Sep 26 07:00:00 2008 0.1 > Fri Sep 26 08:00:00 2008 0.2 > Fri Sep 26 09:00:00 2008 0.2 > Fri Sep 26 10:00:00 2008 0.2 > > Here is a snippet of code: > > > # Got use strict; use warnings; in your code? They'll help. > > > > #Every Hour > my $res = '60'; > > # Start on Sep 1st > my $start_t = "1220227200"; > > > # This is really Aug 31 > > > my $start_t_res = int($start_t/$res)*$res; > > > # And if you start to --start from this time, then you've just > overflowed time_t and you're trying to start at Wed Dec 31 15:59:59 > 1969, or time 0. > > > > #End on Today's Date > my $end_t = "(int($start_t/$res)*$res)"; > > > # unused. But you don't want to quote it anyway. That won't work. > > > > my ($start,$step,$names,$data) = > RRDs::fetch("stats.rrd","AVERAGE","-r","$res","-s", > "$start_t_res","-e","now"); > > > # see above about starting at wrong time. > > > > print "Start: ", scalar localtime($start), " ($start)\n"; > print "Step size: $step seconds\n"; > print "DS names: ", join (", ", @$names)."\n"; > print "Data points: ", $#$data + 1, "\n"; > > > # Try scalar @data here instead. > > # Consider renaming @array1 to @timestamps and @array2 to @values or > # better: @whatever_those_values_actually_are. That makes it easier for > # us to read your code. > # > # There are faster ways to do this, but if it works, then I'll skip > over it for the most part. > # The only point I'll make is that if there are multiple DS's in your > RRD, then you'll > # only see the last one because the inner foreach loop will overwrite > all of the prior > # values in @line with just the last. > # > > print "Data:\n"; > foreach my $line (@$data) { > $start += $step; > $min++; > #Here I am only loading hourly data into the array > if($min == 60){ > $array1[$i] = localtime($start); > foreach my $val (@$line) { > $array2[$i] = $val; > } > $i++; > $min=0; > } > } > > for($i=0;$i < @array1; $i++){ > print $array1[$i]." "; > printf "%12.1f ", $array2[$i]; > print "\n"; > } > > > # I prefer something like this here: > # > # for my $i (0..$#timestamps) { > # printf "$timestamps[$i]: %12.1f\n", $values[$i]; > # } > > @actualdata = ([EMAIL PROTECTED],[EMAIL PROTECTED]); > > > # Let's comment the above line out and ... > > > > my $graph = new GD::Graph::bars; > $graph->set( > x_label => 'Date/Time', > y_label => 'Messages', > title => 'Dropped Messages', > y_max_value => 10, > y_tick_number => 1, > y_label_skip => 1, > > # shadows > bar_spacing => 10, > shadow_depth => 4, > shadowclr => 'dred', > > transparent => 0, > ) or warn $graph->error; > > > my $image = $graph->plot([EMAIL PROTECTED])->png(); > > # ...move it down here where it's a little closer to the action thusly: > # > # my $image = $graph->plot( [EMAIL PROTECTED], [EMAIL PROTECTED] )->png; > > Maybe that'll get you a little closer. > > Good luck, > Joshua > _______________________________________________ rrd-users mailing list [email protected] https://lists.oetiker.ch/cgi-bin/listinfo/rrd-users
