matomo-clickheat/libs/scripts/parseClickLogs.pl
YAMAMOTO Takashi c7ee69e3e7 First release
2015-04-19 14:38:49 +09:00

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;