Outils personnels
User menu

AccessLogParser-Virtuoso

De Dbpedia.fr.

Version du 28 novembre 2012 à 21:12 par Julien.Cojan (discuter | contributions)
(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

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";