#!/usr/bin/env ruby require 'json' require 'net/http' protocol = ARGV[0] jsonurl = ARGV[1] data = JSON::parse(Net::HTTP.get(URI(jsonurl))) if data["version"] != 3 print "Data format version != 3" exit 1 end # Filter out URLs with incomplete information urls = data["urls"].select{|a| a.none?{|k,v|v.nil?}} 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 best = rsync_urls.sort{|a,b| a["delay"]/a["completion_pct"] <=> b["delay"]/b["completion_pct"] }.first puts best["url"]