AccessLogParser-Virtuoso
De Dbpedia.fr.
Version du 28 novembre 2012 à 21:12 par Julien.Cojan (discuter | contributions)
AccessLogParser-Virtuoso.pl
Script Perl pour parser les logs de Virtuoso:
#!/usr/bin/perl @DereferencingDirs = ( "/resource/", "/resourceById/", "/property/", "/data/" ); $sparqlDir = "/sparql"; sub getDateLogFormat{ my ($monthDay_n, $month_n, $year_n) = @_; %MonthRevCode = ( 1 => 'Jan', 2 => 'Feb', 3 => 'Mar', 4 => 'Apr', 5 => 'May', 6 => 'Jun', 7 => 'Jul', 8 => 'Aug', 9 => 'Sep', 10 => 'Oct', 11 => 'Nov', 12 => 'Dec' ); return "$monthDay_n/$MonthRevCode{int($month_n)}/$year_n"; } sub parseLogFile { my $fileName = $_[0]; my $monthDay_n = $_[1]; my $month_n = $_[2]; my $year_n = $_[3]; my $date_log_format = getDateLogFormat($monthDay_n, $month_n, $year_n); print "date: $date_log_format\n"; my %ip_adresses = {}; my $nbSPARQLqueries=0; my $nbDeref=0; print " --reading file $fileName\n"; open FILE, "<", $fileName or die $!; # Open the file LogEntries:while(($line = <FILE>)) { #print "$line"; if($line =~ m/^(\d+.\d+.\d+.\d+) - - \[(\d+\/\w+\/\d+):(.*)\] \"(GET|POST) (\S*)/){ #if($line =~ m/^(\d+.\d+.\d+.\d+) - - \[.*\]/){ my $ip=$1; my $day=$2; my $adress=$5; #print "$day = $date_log_format ?"; if($day == $date_log_format){ #print "$ip -> $adress\n"; if($adress=~/^$sparqlDir/){ $nbSPARQLqueries++; $ip_adresses->{$ip}++; next LogEntries; } foreach $term (@DereferencingDirs){ if($adress =~ m/^$term/i){ $nbDeref++; $ip_adresses->{$ip}++; next LogEntries; } } } } } my $nb_ipAdresses= keys %$ip_adresses; return ("nbQueries" => $nbSPARQLqueries, "nbDerefs" => $nbDeref, "nbUniqueAccess" => $nb_ipAdresses); close(FILE); }
Utilisation
En supposant que $file contient le chemin du fichier de log à parser, $day, $month et $year contiennent respectivement le numéro du jour dans le mois, le numéro du mois et l'année, le nombre de requêtes SPARQL, de déréférencements et d'accès uniques sont obtenus de cette façon :
my %results = parseLogFile($fileName, $day, $monthNb, $year); $nbSPARQLqueries = $results{'nbQueries'}; $nbDeref = $results{'nbDerefs'}; $nb_ipAdresses = $results{'nbUniqueAccess'}; print "nb queries:$nbSPARQLqueries,\n" . "nb dereferencements:$nbDeref,\n". "nb unique user: $nb_ipAdresses,\n";