#!/usr/bin/env perl
# Projde access log Apache za určité období a spočítá statistiky.
# Copyright © 2013 Dan Zeman <zeman@ufal.mff.cuni.cz>
# Licence: GNU GPL

use utf8;
use open ':utf8';
binmode(STDIN, ':utf8');
binmode(STDOUT, ':utf8');
binmode(STDERR, ':utf8');

#my $cesta_log = '/var/log/apache2/deskohrani.cz.access.log';
my $cesta_log = '/var/log/apache2/oldlogs/deskohrani.cz.access.log.1';
open(LOG, $cesta_log) or die("Nelze číst $cesta_log: $!");
while(<LOG>)
{
    if(m/^(\d+\.\d+\.\d+\.\d+) - - \[05\/Oct\/2013:(\d+:\d+:\d+) \+0200\] "GET (.*) HTTP\/1\.1" \d+ \d+$/)
    {
        my $ip = $1;
        my $cas = $2;
        my $soubor = $3;
        $pozadavky{$ip}++;
        my $redukip = $ip;
        #$redukip =~ s/\.\d+$//;
        $redukip =~ s/\.\d+\.\d+$//;
        $redukpozadavky{$redukip}++;
        if(!exists($priklady{$redukip}))
        {
            $priklady{$redukip} = $ip;
            $pocatky{$redukip} = $cas;
        }
        $konce{$redukip} = $cas;
    }
}
close(LOG);
my @klice = sort
{
    $redukpozadavky{$b} <=> $redukpozadavky{$a}
}
(keys(%redukpozadavky));
foreach my $ip (@klice)
{
    my $domena = nslookup($priklady{$ip});
    print("$ip\t$redukpozadavky{$ip}\t$priklady{$ip}\t$domena\t$pocatky{$ip} - $konce{$ip}\n");
}



#------------------------------------------------------------------------------
# Pokusí se podle adresy IP dohledat doménový název počítače.
#------------------------------------------------------------------------------
sub nslookup
{
    my $ip = shift;
    my $domena;
    open(NSLOOKUP, "nslookup $ip |") or die("Nelze se napojit rourou na nslookup $ip: $!");
    while(<NSLOOKUP>)
    {
        chomp();
        if(m/name\s*=\s*(.*)/)
        {
            $domena = $1;
            last;
        }
    }
    close(NSLOOKUP);
    $domena =~ s/\.$//;
    return $domena;
}
