# Plot web-hits
use gifplot;
package gifplot;

sub webhits {
    my ($p3,$file) = @_;
    my @hits;
    for ($i = 0; $i < 32; $i++) {
	$hits[$i] = [];
	for ($j = 0; $j < 24; $j++) {
	    $hits[$i][$j] = 0;
	}
    }
    open(FILE,$file);
    while (<FILE>) {
	my @fields = split(/\s+/, $_);
	next if ($fields[8] != 200);
	my @datetime = split(/\[|\/|:/, $fields[3]);
	my $day = $datetime[1];
	my $time = $datetime[4];
	$hits[$day][$time]++;
    }
    my $max = 0;
    for ($i = 0; $i < 32; $i++) {
	for ($j = 0; $j < 24; $j++) {
	    if ($hits[$i][$j] > $max) { $max = $hits[$i][$j]; }
	}
    }
    my $zscale = 239.0/$max;
    my $zscale2 = 10.0/$max;
    for ($i = 0; $i < 32; $i++) {
	for ($j = 0; $j < 24; $j++) {
	    my $z1 = $hits[$i][$j];
	    my $z2 = $hits[$i+1][$j];
	    my $z3 = $hits[$i+1][$j+1];
	    my $z4 = $hits[$i][$j+1];
	    my $c1 = int ($z1*$zscale + 16);
	    my $c2 = int ($z2*$zscale + 16);
	    my $c3 = int ($z3*$zscale + 16);
	    my $c4 = int ($z4*$zscale + 16);
	    $p3->interpquad($i,$j,$z1*$zscale2,$c1,$i+1,$j,$z2*$zscale2,$c2,
                            $i+1,$j+1,$z3*$zscale2,$c3, $i,$j+1,$z4*$zscale2, $c4);
	}
    }
}

$f = new FrameBuffer(500,500);
$cm = new ColorMap("cmap");
$p3 = new Plot3D($f,0,0,0,32,24,10);
$p3->lookat(40);
$p3->autoperspective(40);
$p3->clear($BLACK);
$p3->rotu(60);
$p3->rotr(30);
$p3->rotd(10);
$p3->zoom(80);
$p3->up(20);
$p3->right(3);
$p3->start();
webhits($p3,"../Data/logs.9604");

$f->writeGIF($cm,"hits.gif");

print "Image written to 'hits.gif'\n";


syntax highlighted by Code2HTML, v. 0.9.1