summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <LukeShu@sbcglobal.net>2013-12-08 15:13:23 -0500
committerLuke Shumaker <LukeShu@sbcglobal.net>2013-12-31 14:11:57 -0500
commit563cf021c96446aa15a41c1f532067d13d880b41 (patch)
treefaaf4094a081f22d9c1a0f356a6447bf92f121ee
parentc1bbe81b1e14f06ed49d9e0292ec9cd60903b104 (diff)
db-import: detect best package mirror
-rw-r--r--db-import.conf5
-rwxr-xr-xdb-pick-mirror24
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"]