Skip to content

Instantly share code, notes, and snippets.

@kratuvid
Created February 28, 2022 05:42
Show Gist options
  • Save kratuvid/9856926513cb7690e6081ce56a5ef335 to your computer and use it in GitHub Desktop.
Save kratuvid/9856926513cb7690e6081ce56a5ef335 to your computer and use it in GitHub Desktop.
Find latency of Yggdrasil public peers
#!/usr/bin/fish
# After running this script
# To sort by fastest 10: cat OUTPUT_FILE | sort -n | head -n10
# To randomly output 10: cat OUTPUT_FILE | shuf -n10
# Then to convert into a format for yggdrasil config
# ... (Anyone of the above commands) | awk '{print "\"" $2 "\""}'
set output (mktemp -u)
for p in (curl 'https://publicpeers.neilalexander.dev/publicnodes.json' | jq '.[]' | jq -r 'keys[]' | uniq | shuf)
set rm_proto (echo $p | sed -E 's/^(tcp|tls):\/\///')
set rm_port (echo $rm_proto | sed -E 's/:[0-9]+?$//')
set rm_bracket (echo $rm_port | sed -E 's/\[//' | sed -E 's/\]//')
set rm_key (echo $rm_bracket | sed -E 's/\?key=.*$//')
set rm_port2 (echo $rm_key | sed -E 's/:[0-9]+?$//')
if not echo $urls_done | grep -F "$rm_port2" &>/dev/null
echo INFO: Testing $rm_port2 1>&2
set result (ping -qc4 $rm_port2 2>/dev/null)
if test $status -eq 0
set latency (echo $result | grep -Po '\d+\.\d+/\d+\.\d+/\d+\.\d+/\d+\.\d+' | cut -d'/' -f2)
echo $latency $p
else
echo INFO: Can\'t reach $rm_port2 1>&2
end
set -a urls_done "$rm_port2"
else
echo INFO: Skipping $rm_port2, already done 1>&2
end
end | tee $output
echo INFO: Output written to $output 1>&2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment