AccessLogParser-Virtuoso

De Dbpedia.fr.

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";
  • Dernière modification de cette page le 28 novembre 2012 à 21:12.
  • Cette page a été consultée 413 fois.