#!/usr/bin/perl -p
use strict; use warnings;
use Geo::IP;

our %geoip;

BEGIN {
	$|=1;
}
chomp;
my @f = split/\t/,$_,-1;
my ($time, $host, $user, $ip, $response, $size, $scheme, $method, $url, $referer, $location, $agent) = @f;
$agent ||= "";
if ($agent !~ /compatible/i) {
	$agent =~ s/\(.*?\)//g;
} else {
	$agent =~ s/.*compatible[:; ]*//i;
	$agent =~ s/\)$//;
}
$agent =~ s/;.*//;
$agent =~ s/  +/ /g;
$agent =~ s/^ +| +$//;
$agent = join " ", map { s/\..*//; s/\/.*//; $_ } grep {!/WebKit|Version|Presto|Win16|Glue|Me\.Dium/} split / /, $agent;
$agent =~ s/[ 0-9]*$//;
if ($agent =~ /\bChrom/i) { $agent =~ s/\s+Safari\S*//ig; }
if ($agent =~ /\bLynx/i) { $agent = "Lynx"; }
$agent =~ s/.* //;
#if (length($agent) < 8) { $agent .= " "x7; }

#$referer =~ s{(//.*?)/.+}{$1};

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($time);
$time = sprintf("%04d%02d%02d-%02d%02d%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec);


$response =~ s/ .*//;

my $geoip = geoip($ip);

@f = ($time, $host, $agent, $user, $geoip, $response, $size, $scheme, $method, $url, $referer, $location);
$_ = join("\t", @f)."\n";

sub geoip {
	my ($ip) = @_;
	return $geoip{$ip} ||= do {
		my $gi = Geo::IP->open("/home/sam/soft/GeoIPCity.dat", GEOIP_STANDARD); 
		my $record = $gi->record_by_addr($ip);
		if ($record) {
			my $country = $record->country_code||"";
			my $state = $record->region||"";
			my $city = $record->city||"";
			"$country/$state/$city";
		} else {
			$ip;
		}
	}
}
