Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

GD::Graph Help

by sunadmn (Curate)
on Aug 29, 2003 at 15:14 UTC ( #287698=perlquestion: print w/ replies, xml ) Need Help??
sunadmn has asked for the wisdom of the Perl Monks concerning the following question:

Good day monks I have been working with doing a bandwidth test that prints out html for a few days now and with the help of a fellow monk I was able to get a working test to run, but I am now wanting to get the thing to use GD::Graph to make a pretty image..
I have read the perldoc on GD::Graph and think I have it right but I am getting this error "can't call method "plot" on an undefined value". Now from what I can see there should be no issue, but I must be missing something. Below is my code for you to look over and let me know if I am just missing something.
#!/usr/bin/perl -w use warnings; use strict; use Time::HiRes qw ( gettimeofday ) ; use CGI qw(:standard); use GD::Graph::hbars; use CGI::Carp (fatalsToBrowser); my $data = "E"x1020; #start with using 1k blocks shall we? my %cgi_vars; foreach my $pair ( split ( "&", $ENV{'QUERY_STRING'} ) ) { my ( $var, $val ) = split ("=", $pair); $cgi_vars{$var} = $val; } #cgi headers: print "content-type: text/html\n\n"; #take time my ( $start_seconds, $start_microseconds ) = gettimeofday; print "Start Seconds:$start_seconds Start MicroSeconds:$start_microsec +onds<BR/>\n"; #print stuff to thingy if ( $cgi_vars{"data_size"} ) { for ( my $count=0; $count < $cgi_vars{"data_size"}; $count++ ) { print "<!",$data,"->\n"; } } #take time my ( $end_seconds, $end_microseconds ) = gettimeofday; print "End Seconds:$end_seconds End MicroSeconds:$end_microseconds< +BR/>\n"; #compare my $time_delta = ($end_seconds - $start_seconds) + ( ( $end_microsecon +ds - $start_microseconds) / 1000000); if ( $cgi_vars{"data_size"} ) { print "your data transfer of ", $cgi_vars{"data_size"}, "k took ", $ +time_delta, " seconds<BR/>\n"; print "your bandwidth is ",$cgi_vars{"data_size"} / $time_delta ," k +ilobytes/sec<BR/>\n"; my @data = "$time_delta"; my $graph = GD::Graph::hbars->new(400, 300); $graph->set( x_label => 'Transfer Data', y_label => 'Some Label', title => 'Adelphia Speed Test' ); my $gd = my $my_graph->plot(\@data); open(IMG, '>../htdocs/graph.png') or die $!; binmode IMG; print IMG $gd->png; close IMG; } else { print "please invoke as $ENV{'SCRIPT_NAME'}?data_size=100<BR/> \n"; } exit;
Thanks in advanced for all your help!! -Stephen

Comment on GD::Graph Help
Download Code
Re: GD::Graph Help
by tcf22 (Priest) on Aug 29, 2003 at 15:28 UTC
    You need to call the plot method from the GD::Graph object.

    Replace
    my $gd = my $my_graph->plot(\@data);
    with
    my $gd = $graph->plot(\@data);
      Great that did seem to work, well atleast I am not getting errors now, but I am alos not seeing the graph on the html page or am I seeing the file graph.png in the ../htdocs dir. Any idea of what else I am missing?? -Thanks
        Try checking to see if the GD::Image object was created.
        my $gd = $graph->plot(\@data) or die $graph->error;

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://287698]
Approved by phydeauxarff
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (9)
As of 2015-07-02 01:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (25 votes), past polls