119 lines
2.8 KiB
Perl
119 lines
2.8 KiB
Perl
#!/usr/bin/perl -w
|
|
###
|
|
## ClickHeat : Apache log parser
|
|
##
|
|
## Developpement effectue pour/developed for WAT (www.wat.tv)
|
|
## WAT - Partagez votre univers (vidéos, musique, photos) entre amis
|
|
## WAT - Share your videos, music and photos with your friends
|
|
## Si vous appreciez ce script, utilisez le site WAT !
|
|
## If you like this script, use WAT !
|
|
##
|
|
## Plus d'informations : http://www.dugwood.fr/clickheat/performance.html
|
|
## More information: http://www.dugwood.com/clickheat/performance.html
|
|
##
|
|
## @author Vincent Audino pour WAT - www.wat.tv
|
|
## @since 03/28/2007
|
|
## @update 31/07/2007 - Yvan Taviaud : correction du paramètre «p=» qui devient «g=»
|
|
###
|
|
|
|
|
|
use Date::Manip;
|
|
use strict;
|
|
|
|
my $date;
|
|
my $page;
|
|
my $x;
|
|
my $y;
|
|
my $w;
|
|
my $c;
|
|
my $browser;
|
|
my $random;
|
|
my $referer;
|
|
my %fdcache;
|
|
my $maxcached = 10;
|
|
my $currentfd;
|
|
|
|
|
|
if ($#ARGV < 1)
|
|
{
|
|
die "usage: ./parseClickLogs.pl apache_logs_file dest_path [domain_ignored]\n";
|
|
}
|
|
|
|
my $srcFile = $ARGV[0];
|
|
my $destPath = $ARGV[1] . '/';
|
|
my $ignored = defined($ARGV[2]) ? $ARGV[2] : '';
|
|
|
|
mkdir($destPath) if (!-d $destPath);
|
|
|
|
open(LOGFILE, $srcFile) or die("Impossible d'ouvrir le fichier ".$srcFile);
|
|
|
|
while(<LOGFILE>)
|
|
{
|
|
if (/.*clickheat.*/
|
|
&& ($ignored eq "" || !/.*http:\/\/.*$ignored.*/) )
|
|
{
|
|
if (s/.*\[(.*)\].*g=(.*)&x=([0-9]*)&y=([0-9]*)&w=([0-9]*)&b=(.*)&c=([0-9])&random=(.*) HTTP.* \"(http:\/\/.*)\" \".*\" .*/$1, $2, $3, $4, $5, $6, $7, $8, $9/)
|
|
{
|
|
$date = ParseDate($1); $page = $2; $x = $3; $y = $4; $w = $5; $browser = $6; $c = $7; $random = $8; $referer = $9;
|
|
$page = 'none' if ($page eq '');
|
|
|
|
$date =~ s#^(....)(..)(..)(..):(..):(..)#$1-$2-$3#;
|
|
|
|
my $writeDir = $destPath.$page;
|
|
my $writeFile = $writeDir.'/'.$date.'.log';
|
|
mkdir($writeDir) if (!-d $destPath.$page);
|
|
|
|
|
|
if (defined($fdcache{$writeFile}))
|
|
{
|
|
$currentfd = $fdcache{$writeFile};
|
|
}
|
|
else
|
|
{
|
|
open(my $fd, ">>".$writeFile) or die ("Erreur d'ouverture de " . $writeFile);
|
|
chmod 0606, $writeFile;
|
|
|
|
if (keys(%fdcache) == $maxcached)
|
|
{
|
|
# cache plein
|
|
# on vire le dernier
|
|
my @fdcache = %fdcache;
|
|
close pop @fdcache;
|
|
pop @fdcache;
|
|
%fdcache = @fdcache;
|
|
}
|
|
|
|
$fdcache{$writeFile} = $fd;
|
|
|
|
$currentfd = $fdcache{$writeFile};
|
|
}
|
|
print $currentfd $x.'|'.$y.'|'.$w.'|'.$browser.'|'.$c."\n";
|
|
|
|
|
|
#
|
|
# REFERRER
|
|
#
|
|
if ($referer ne '')
|
|
{
|
|
$writeFile = $writeDir . '/url.txt';
|
|
|
|
if (!-f $writeFile)
|
|
{
|
|
open(my $fd,">".$writeFile) or die ("Erreur d'ouverture de " . $writeFile) ;
|
|
chmod 0606, $writeFile;
|
|
print $fd $referer.'>0>0>0';
|
|
close $fd;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
while( my ($k, $v) = each %fdcache )
|
|
{
|
|
close $v;
|
|
}
|
|
|
|
close LOGFILE;
|
|
|