#!/usr/bin/perl -w use strict; use DBI; # # Connect to the database. # my $dbh = DBI->connect( "dbi:SQLite:dbname=logs.db", "", "" ); # # Delete the table if it already exists. # eval { local $dbh->{PrintError} = 0; $dbh->do("DROP TABLE accesses"); }; # # Create it afresh. # $dbh->do( "CREATE TABLE accesses (id INTEGER PRIMARY KEY, ip, request, code, size);" ); # # Open the specified Apache access log. # my $filename = shift; die "No filename...." if ( ! defined( $filename ) ); open( INPUT, "<$filename" ) or die "Cannot open $filename - $!"; # # Parse each line in a *very* simplistic and fragile way. # # Insert items into database # foreach my $line ( ) { my ( $ip, $request, $code, $size )= ""; chomp( $line ); if ( $line =~ /^([^ ]+) / ) { $ip = $1; } if ( $line =~ /GET ([^ ]+) HTTP/ ) { $request = $1; } if ( $line =~ /HTTP\/1.[01]" ([0-9]+) / ) { $code = $1; } if ( $line =~ /HTTP\/1.[01]" ([0-9]+) ([0-9]+) / ) { $size = $2; } else { $size = 0; } $dbh->do( "INSERT INTO accesses( ip, request, code, size ) VALUES( '$ip', '$request', $code, $size);" ); } close( INPUT ); # # Disconnect. # $dbh->disconnect();