diff options
Diffstat (limited to 'ports-mgmt/portmk/scripts/ranksites-geoip.pl')
-rw-r--r-- | ports-mgmt/portmk/scripts/ranksites-geoip.pl | 393 |
1 files changed, 0 insertions, 393 deletions
diff --git a/ports-mgmt/portmk/scripts/ranksites-geoip.pl b/ports-mgmt/portmk/scripts/ranksites-geoip.pl deleted file mode 100644 index 0777c744982f..000000000000 --- a/ports-mgmt/portmk/scripts/ranksites-geoip.pl +++ /dev/null @@ -1,393 +0,0 @@ -#!/usr/bin/perl -w -# -# Copyright (c) 2004 Oliver Eikemeier. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# 1. Redistributions of source code must retain the above copyright notice -# this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the author nor the names of its contributors may be -# used to endorse or promote products derived from this software without -# specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# $FreeBSD$ -# -# MAINTAINER= eik@FreeBSD.org -# - -require 5.005; -use strict; -use Geo::IP; -use constant PI => 3.14159265358979323846; - -my $home = $ENV{CC_HOME} ? lc $ENV{CC_HOME} : 'eu'; - -my $dbdir = $ENV{RANKDIR} ? $ENV{RANKDIR} : '/var/db/distrank'; - --d $dbdir || mkdir $dbdir, 0777 or die "Can't create $dbdir\n"; - -my $rankfile = "$dbdir/ranks-geoip"; - -my $now = time; - -my %distance; - -if (-r $rankfile) { - open RANKS, "<$rankfile"; - while (<RANKS>) { - chomp; - my ($host, $d, $e) = split; - $distance{$host} = [$d, $e] - if defined $e && $e >= $now; - } - close RANKS; -} - -my %mastersites; -my %newdistance; - -my $distgood = -1; -my $distdefault = PI/2; -my $distbad = 2; - -my $expgood = $now + 14 * 86400; -my $expdefault = $now + 7 * 86400; - -my $hostcount = 0; - -while (<>) { - chomp; - next - if exists $mastersites{$_}; - if (m'^(?:ftp|https?)://(?:[^/]*@)?([^/:]+\.[^/:]+)(?::\d+)?(?:/|$)'i) { - my $host = lc $1; - $mastersites{$_} = $host; - if (!defined $distance{$host}) { - $distance{$host} = [$distdefault, $expdefault]; - $newdistance{$host} = undef - } - $hostcount++; - } elsif (m'^file:'i) { - $mastersites{$_} = 'FILE'; - } else { - $mastersites{$_} = 'UNKNOWN'; - } -} - -# calculate_distance and the associated table is from Geo::Mirror, and therefore -# Copyright (c) 2002, T.J. Mather, tjmather@tjmather.com, New York, NY, USA - -my (%lat, %lon); - -sub getlatlon { - my ($cc) = @_; - my ($lat_cc, $lon_cc) = ($lat{$cc}, $lon{$cc}); - - # Convert all the degrees to radians - $lat_cc *= PI/180 - if defined $lat_cc; - $lon_cc *= PI/180 - if defined $lon_cc; - return ($lat_cc, $lon_cc); -} - -if (%newdistance && $hostcount > 1) { - while (<main::DATA>) { - my ($country, $lat, $lon) = split(':'); - - $lat{$country} = $lat; - $lon{$country} = $lon; - } - close main::DATA; - - my $gi = Geo::IP->new(GEOIP_MEMORY_CACHE); - - my ($lat_home, $lon_home) = getlatlon($home); - - foreach (keys %newdistance) { - my $dist; - my $cc = lc $gi->country_code_by_name($_); - - if ($cc) { - my ($lat_cc, $lon_cc) = getlatlon($cc) - if defined $cc; - - # Find the deltas - my $delta_lat = $lat_cc - $lat_home; - my $delta_lon = $lon_cc - $lon_home; - - # Find the Great Circle distance - my $temp = sin($delta_lat/2.0)**2 + cos($lat_home) * cos($lat_cc) * sin($delta_lon/2.0)**2; - $dist = atan2(sqrt($temp),sqrt(1-$temp)); - - $distance{$_} = [$dist, $expgood] - if defined $dist; - } - } - - open RANKS, ">$rankfile"; - while (my ($host, $val) = each %distance) { - printf RANKS "%s\t%.4f\t%d\n", $host, $val->[0], $val->[1] - if defined $val; - } - close RANKS; -} - -$distance{FILE} = [$distgood, 0]; -$distance{UNKNOWN} = [$distbad, 0]; - -foreach (sort {$distance{$mastersites{$a}}->[0] <=> $distance{$mastersites{$b}}->[0]} keys %mastersites) { - print $_, "\n"; -} - -__END__ -af:33:65 -al:41:20 -dz:28:3 -as:-14:-170 -ad:42:1 -ao:-12:18 -ai:18:-63 -aq:-90:0 -ag:17:-61 -ar:-34:-64 -am:40:45 -aw:12:-69 -au:-27:133 -at:47:13 -az:40:47 -bs:24:-76 -bh:26:50 -bd:24:90 -bb:13:-59 -by:53:28 -be:50:4 -bz:17:-88 -bj:9:2 -bm:32:-64 -bt:27:90 -bo:-17:-65 -ba:44:18 -bw:-22:24 -bv:-54:3 -br:-10:-55 -io:-6:71 -vg:18:-64 -bg:43:25 -bf:13:-2 -bi:-3:30 -kh:13:105 -cm:6:12 -ca:60:-95 -cv:16:-24 -ky:19:-80 -cf:7:21 -td:15:19 -cl:-30:-71 -cn:35:105 -cx:-10:105 -cc:-12:96 -co:4:-72 -km:-12:44 -cd:0:25 -cg:-1:15 -ck:-21:-159 -cr:10:-84 -ci:8:-5 -hr:45:15 -cu:21:-80 -cy:35:33 -cz:49:15 -dk:56:10 -dj:11:43 -dm:15:-61 -do:19:-70 -ec:-2:-77 -eg:27:30 -sv:13:-88 -gq:2:10 -er:15:39 -ee:59:26 -et:8:38 -fk:-51:-59 -fo:62:-7 -fj:-18:175 -fi:64:26 -fr:46:2 -gf:4:-53 -pf:-15:-140 -ga:-1:11 -gm:13:-16 -ge:42:43 -de:51:9 -eu:48:10 -gh:8:-2 -gi:36:-5 -gr:39:22 -gl:72:-40 -gd:12:-61 -gp:16:-61 -gu:13:144 -gt:15:-90 -gn:11:-10 -gw:12:-15 -gy:5:-59 -ht:19:-72 -hm:-53:72 -va:41:12 -hn:15:-86 -hk:22:114 -hu:47:20 -is:65:-18 -in:20:77 -id:-5:120 -ir:32:53 -iq:33:44 -ie:53:-8 -il:31:34 -it:42:12 -jm:18:-77 -sj:71:-8 -jp:36:138 -jo:31:36 -ke:1:38 -ki:1:173 -kp:40:127 -kr:37:127 -kw:29:45 -kg:41:75 -lv:57:25 -lb:33:35 -ls:-29:28 -lr:6:-9 -ly:25:17 -li:47:9 -lt:56:24 -lu:49:6 -mo:22:113 -mk:41:22 -mg:-20:47 -mw:-13:34 -my:2:112 -mv:3:73 -ml:17:-4 -mt:35:14 -mh:9:168 -mq:14:-61 -mr:20:-12 -mu:-20:57 -yt:-12:45 -mx:23:-102 -fm:6:158 -mc:43:7 -mn:46:105 -ms:16:-62 -ma:32:-5 -mz:-18:35 -na:-22:17 -nr:-0:166 -np:28:84 -nl:52:5 -an:12:-68 -nc:-21:165 -nz:-41:174 -ni:13:-85 -ne:16:8 -ng:10:8 -nu:-19:-169 -nf:-29:167 -mp:15:145 -no:62:10 -om:21:57 -pk:30:70 -pw:7:134 -pa:9:-80 -pg:-6:147 -py:-23:-58 -pe:-10:-76 -ph:13:122 -pn:-25:-130 -pl:52:20 -pt:39:-8 -pr:18:-66 -qa:25:51 -re:-21:55 -ro:46:25 -ru:60:100 -rw:-2:30 -sh:-15:-5 -kn:17:-62 -lc:13:-60 -pm:46:-56 -vc:13:-61 -ws:-13:-172 -sm:43:12 -st:1:7 -sa:25:45 -sn:14:-14 -sc:-4:55 -sl:8:-11 -sg:1:103 -sk:48:19 -si:46:15 -sb:-8:159 -so:10:49 -za:-29:24 -gs:-54:-37 -es:40:-4 -lk:7:81 -sd:15:30 -sr:4:-56 -sj:78:20 -sz:-26:31 -se:62:15 -ch:47:8 -sy:35:38 -tj:39:71 -tz:-6:35 -th:15:100 -tg:8:1 -tk:-9:-172 -to:-20:-175 -tt:11:-61 -tn:34:9 -tr:39:35 -tm:40:60 -tc:21:-71 -tv:-8:178 -ug:1:32 -ua:49:32 -ae:24:54 -gb:54:-2 -us:38:-97 -uy:-33:-56 -uz:41:64 -vu:-16:167 -ve:8:-66 -vn:16:106 -vi:18:-64 -wf:-13:-176 -eh:24:-13 -ye:15:48 -yu:44:21 -zm:-15:30 -zw:-20:30 -tw:23:121 |