diff options
-rw-r--r-- | db-import.conf | 5 | ||||
-rwxr-xr-x | db-pick-mirror | 24 |
2 files changed, 28 insertions, 1 deletions
diff --git a/db-import.conf b/db-import.conf index ef96568..1ba50ba 100644 --- a/db-import.conf +++ b/db-import.conf @@ -7,5 +7,8 @@ _archrepos=( community{,-testing}-{i686,x86_64} multilib{,-testing}-x86_64 ) + +_archpkgmirror=$(db-pick-mirror rsync https://www.archlinux.org/mirrors/status/json/) + # name pkgmirror absmirror repo-arch... -imports=("archlinux archlinux.c3sl.ufpr.br/archlinux rsync.archlinux.org ${_archrepos[*]}") +imports=("archlinux ${_archpkgmirror} rsync.archlinux.org ${_archrepos[*]}") diff --git a/db-pick-mirror b/db-pick-mirror new file mode 100755 index 0000000..7cbc032 --- /dev/null +++ b/db-pick-mirror @@ -0,0 +1,24 @@ +#!/usr/bin/env ruby + +require 'json' +require 'rest_client' + +protocol = ARGV[0] +jsonurl = ARGV[1] + +data = JSON::parse(RestClient.get(jsonurl)) + +if data["version"] != 3 + print "Data format version != 3" + exit 1 +end + +urls = data["urls"] +rsync_urls = urls.select{|a| a["protocol"]==protocol} + +# By score ( (delay+speed)/completion ) +#best = rsync_urls.sort{|a,b| (a["score"] || Float::INFINITY) <=> (b["score"] || Float::INFINITY) }.first +# By delay/completion ; hopefully this gives us a tier 1 mirror +best = rsync_urls.sort{|a,b| a["delay"]/a["completion_pct"] <=> b["delay"]/b["completion_pct"] }.first + +puts best["url"] |