gnuplot / webplot / access_cgi (E)
Make a graphReal-time counting with CGI The previous method counts Again we define the place of files firstly. However we have to distinguish $abspath='/absolute/path/to/parent_of_image/'; $webpath='/relative/path/to/parent_of_image/'; $imgfile="access.png"; $logfile='/home/www/httpd/logs/access_log'; $gnuplot='/path/to/gnuplot'; The $abspath variable is the directory which is specified by The structure of this script is the same as the previous one. open(LOG,$logfile); while(<LOG>){ if(/.html/){ split; $day = substr($_[3],1,2); $mon = substr($_[3],4,3); $year= substr($_[3],8,4); $count[$day]++; } } close(LOG); $day=$#count; $count[$day+1]=$count[$day]; & make_gnuplot; open(GNUPLOT,"| ".$gnuplot); foreach $i (0..$#plot){ print GNUPLOT $plot[$i]; } for($i=1;$i<=$#count;$i++){ printf(GNUPLOT "%10d%10dn",$i,$count[$i]); } print GNUPLOT "endn"; close(GNUPLOT); & generate_html; exit 0; sub make_gnuplot{ $i=0; $plot[$i++]=sprintf("set term png colorn"); $plot[$i++]=sprintf("set output '%s'n",$abspath.$imgfile); $plot[$i++]=sprintf("set size 0.7,0.7n"); $plot[$i++]=sprintf("set xrange [0:32]n"); $plot[$i++]=sprintf("set yrange [0:*]n"); $plot[$i++]=sprintf("set xtics 1,7,31n"); $plot[$i++]=sprintf("set mxtics 7n"); $plot[$i++]=sprintf("set nokeyn"); $plot[$i++]=sprintf("set gridn"); $plot[$i++]=sprintf("set title '%s %s'n",$mon,$year); $plot[$i++]=sprintf("plot '-' with stepn"); } Newly added lines are the next subroutine which generates HTML sub generate_html{ print << "EOF"; Content-Type: text/html <html> <head><title> access_log stat </title></head> <body bgcolor="white"> <center><img src="$webpath$imgfile"></center> </body> </html> EOF This perl script is copied into cgi-bin, and you make a following < a href=”/cgi-bin/webplot_cgi.pl/”> Web Plot </a>
Since browsers cache image files generally, and if the file name is |