]> git.openstreetmap.org Git - dns.git/blob - bin/sumlogs
Update log analysis script to use Maxmind GeoIP data
[dns.git] / bin / sumlogs
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Geo::IP;
7 use YAML;
8
9 my $gi = Geo::IP->open("/usr/share/GeoIP/GeoIP.dat", GEOIP_MEMORY_CACHE);
10 my $total_bytes = 0;
11 my %country_bytes;
12
13 while (my $record = <>)
14 {
15     if ($record =~ /^\d+\.\d+\s+\d+\s+(\d+\.\d+\.\d+\.\d+)\s+TCP_[A-Z_]+\/\d+\s+(\d+) (?:GET|HEAD|POST|OPTIONS|PROPFIND) /)
16     {
17         my $ip = $1;
18         my $bytes = $2;
19         my $country = $gi->country_code_by_addr($ip);
20
21         if (defined($country) &&
22             $country ne "A1" && $country ne "A2" && 
23             $country ne "01" && $country ne "--")
24         {
25             $country_bytes{$country} += $bytes;
26         }
27
28         $total_bytes += $bytes;
29     }
30     elsif ($record =~ /^\d+\.\d+\s+\d+\s+(\d+\.\d+\.\d+\.\d+)\s+TCP_DENIED\/\d+\s+(\d+) /)
31     {
32         # do nothing
33     }
34     elsif ($record =~ /^\d+\.\d+\s+\d+\s+(\d+\.\d+\.\d+\.\d+)\s+UDP_[A-Z_]+\/\d+\s+(\d+) ICP_QUERY /)
35     {
36         # do nothing
37     }
38     else
39     {
40         warn $record;
41     }
42 }
43
44 my %country_bandwidth;
45
46 while (my($country,$bytes) = each %country_bytes)
47 {
48     $country_bandwidth{$country} = $bytes * 300 * 1024 * 1024 / $total_bytes;
49 }
50
51 print Dump(\%country_bandwidth);
52
53 exit 0;