[asql-commits] asql: New upstream version.

From: <steve_at_steve.org.uk>
Date: Tue, 15 Jan 2008 18:44:53 +0000
details:   http://asql.repository.steve.org.uk/?rev/fc80c84cfdab
changeset: 43:fc80c84cfdab
user:      Steve Kemp <steve_at_steve.org.uk>
date:      Tue Jan 15 18:44:51 2008 +0000
description:
New upstream version.

diffs (193 lines):

diff -r 1a4250265ff5 -r fc80c84cfdab Makefile
--- a/Makefile	Wed Jan 02 15:36:41 2008 +0000
+++ b/Makefile	Tue Jan 15 18:44:51 2008 +0000
@@ -10,7 +10,7 @@
 #  Only used to build distribution tarballs.
 #
 DIST_PREFIX = ${TMP}
-VERSION     = 0.7
+VERSION     = 0.8
 BASE        = asql
 
 
diff -r 1a4250265ff5 -r fc80c84cfdab bin/asql
--- a/bin/asql	Wed Jan 02 15:36:41 2008 +0000
+++ b/bin/asql	Tue Jan 15 18:44:51 2008 +0000
@@ -1040,7 +1040,7 @@ sub do_load
             local $CONFIG{'dbi'}->{PrintError} = 0;
             $CONFIG{'dbi'}->do("DROP TABLE logs");
         };
-        $CONFIG{'dbi'}->do( "CREATE TABLE logs (id INTEGER PRIMARY KEY, source, request, status, size, method, referer, agent, version, date, label);" );
+        $CONFIG{'dbi'}->do( "CREATE TABLE logs (id INTEGER PRIMARY KEY, source, request, status, size, method, referer, agent, version, date, user, label);" );
 
         $CONFIG{'loaded'} = 1;
     }
@@ -1245,6 +1245,7 @@ sub do_show
   version - The HTTP version used by this client.
   date    - The date and time at which the request was made.
   label   - Any label applied when the logfile was read.
+  user    - The remote (authenticated) user, if any.
 
 EOF
 }
@@ -1277,7 +1278,7 @@ sub loadFile
     #  Get the database handle and prepare the insertion query.
     #
     my $dbh = $CONFIG{'dbi'};
-    my $sth = $dbh->prepare( "INSERT INTO logs( source, request, status, size, method, referer, agent, version, date, label ) VALUES( ?,?,?,?,?,?,?,?,?,? )" );
+    my $sth = $dbh->prepare( "INSERT INTO logs( source, request, status, size, method, referer, agent, version, date, user, label ) VALUES( ?,?,?,?,?,?,?,?,?,?,? )" );
 
     #
     #  Open the named logfile, using a pipe for .bz2/.gz files.
@@ -1309,56 +1310,45 @@ sub loadFile
     #
     #  Parse each line in a minimal fashion.
     #
-    #  TODO: Make the format configurable?
-    #
     foreach my $line ( <INPUT> )
     {
-        if ( $line =~ /^([^ \t]+)(.*)\"([^"]+)\" (\d+) (\d+|-) "([^"]+)" "([^"]+)"/ )
+        #
+        #  Parse.
+        #
+        my $results = parseApacheLogLine( $line );
+
+        #
+        #  Get the results, if they are present.
+        #
+        my $host     = $results->{'host'}  || "";
+        my $size     = $results->{'bytes'} || "";
+        my $version  = $results->{'proto'} || "";
+        my $time     = $results->{'time'}  || "";
+        my $date     = $results->{'date'}  || "";
+        my $path     = $results->{'file'}  || "";
+        my $protocol = $results->{'rtype'} || "";
+        my $agent    = $results->{'agent'} || "";
+        my $user     = $results->{'user'}  || "";
+        my $refer    = $results->{'refer'} || "";
+        my $code     = $results->{'code'}  || "";
+
+        if ( $date =~ /^([^\/]+)\/([^\/]+)\/(.*)/ )
         {
-            my $ip     = $1;
-            my $req    = $3;
-            my $status = $4;
-            my $size   = $5;
-            my $refer  = $6;
-            my $agent  = $7;
+            my $day  = $1;
+            my $mon  = $2;
+            my $year = $3;
 
-            my @in = split( / /, $req );
-            my $method = $in[0];
-            my $path   = $in[1];
-            my $ver    = $in[2];
+            $mon = $months{lc($mon)};
+            $date = $year . "-" . $mon . "-" . $day . 'T' . $time;
+        }
 
-            #
-            #  Parse date and time.  Minimally.
-            #
-            my $date = '';
-            if ( $line =~ /(.*)\[([^]]+)\](.*)/ )
-            {
-                my $timestr = $2;
-                if ( $timestr =~ /^([^:]+):([^ ]+)/ )
-                {
-                    my $d = $1;
-                    my $t = $2;
 
-                    if ( $d =~ /^([^\/]+)\/([^\/]+)\/(.*)/ )
-                    {
-                        my $day  = $1;
-                        my $mon  = $2;
-                        my $year = $3;
+        #
+        #  HTTP version is of the form HTTP/N.N
+        #
+        $version = $1 if ( $version =~ /HTTP\/([0-9\.]+)/ );
 
-                        $mon = $months{lc($mon)};
-                        $date = $year . "-" . $mon . "-" . $day . 'T' . $t;
-                    }
-                }
-            }
-
-            $ver = $1 if ( $ver =~ /HTTP\/([0-9\.]+)/ );
-
-            $sth->execute( $ip, $path, $status, $size, $method, $refer, $agent, $ver, $date, $label );
-        }
-        else
-        {
-            print "Ignored: $line\n";
-        }
+        $sth->execute( $host, $path, $code, $size, $protocol, $refer, $agent, $version, $date, $user, $label );
     }
 
     #
@@ -1366,6 +1356,47 @@ sub loadFile
     #
     close( INPUT );
     $sth->finish();
+}
+
+
+
+=begin doc
+
+  Parse a single line of Apache logfile into a hash-reference
+ we can work with.
+
+  This code was taken directly from the CPAN module
+ Parse::AccessLogEntry by Marc Slagle.
+
+=end doc
+
+=cut
+
+sub parseApacheLogLine
+{
+        my $Line=shift;
+        my $Ref;
+        my $Rest;
+        my $R2;
+        ($Ref->{host},$Ref->{user},$Ref->{date},$Rest)= $Line=~m,^([^\s]+)\s+-\s+([^ ]+)\s+\[(.*?)\]\s+(.*),;
+        my @Dsplit=split(/\s+/,$Ref->{date});
+	$Ref->{diffgmt}=$Dsplit[1];
+	my @Ds2=split(/\:/,$Dsplit[0],2);
+        $Ref->{date}=$Ds2[0];
+        $Ref->{time}=$Ds2[1];
+        if ($Rest)
+        {
+                ($Ref->{rtype},$Ref->{file},$Ref->{proto},$Ref->{code},$Ref->{bytes},$R2)=split(/\s/,$Rest,6);
+		$Ref->{rtype}=~tr/\"//d;
+		$Ref->{proto}=~tr/\"//d;
+                if ($R2)
+                {
+                        my @Split=split(/\"/,$R2);
+                        $Ref->{refer}=$Split[1];
+                        $Ref->{agent}=$Split[3];
+                }
+        }
+        return $Ref;
 }
 
 
diff -r 1a4250265ff5 -r fc80c84cfdab debian/changelog
--- a/debian/changelog	Wed Jan 02 15:36:41 2008 +0000
+++ b/debian/changelog	Tue Jan 15 18:44:51 2008 +0000
@@ -1,3 +1,11 @@ asql (0.7-1) unstable; urgency=low
+asql (0.8-1) unstable; urgency=low
+
+  * New upstream release:
+    - Adds support for both "common" and "combined" format.
+    - Adds support for the "user" field.
+
+ -- Steve Kemp <skx_at_debian.org>  Tue, 15 Jan 2007 18:43:32 +0000
+
 asql (0.7-1) unstable; urgency=low
 
   * New upstream release:
Received on Tue Jan 15 2008 - 18:44:57 GMT

This archive was generated by hypermail 2.2.0 : Tue Jan 06 2009 - 21:30:02 GMT