From 563cf021c96446aa15a41c1f532067d13d880b41 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sun, 8 Dec 2013 15:13:23 -0500 Subject: db-import: detect best package mirror --- db-import.conf | 5 ++++- db-pick-mirror | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100755 db-pick-mirror 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"] -- cgit v1.2.3-2-g168b