dotfiles

Dash Eclipse's dotfiles
git clone git://ezup.dev/dotfiles.git
Log | Files | Refs | README | LICENSE

voidlinux-mirror-speedtest.sh (3124B)


      1#!/bin/sh
      2
      3PKG_PATH="current/glibc-2.32_2.x86_64.xbps"
      4SPEED_LIMIT="1048576"
      5# https://docs.voidlinux.org/xbps/repositories/mirrors/index.html
      6MIRRORLIST="\
      7https://alpha.de.repo.voidlinux.org/			T1 EU: Finland
      8https://mirrors.servercentral.com/voidlinux/		T1 USA: Chicago
      9https://alpha.us.repo.voidlinux.org/			T1 USA: Kansas City
     10https://mirror.ps.kz/voidlinux/				T2 Asia: Almaty, KZ
     11https://mirrors.bfsu.edu.cn/voidlinux/			T2 Asia: China
     12https://mirrors.cnnic.cn/voidlinux/			T2 Asia: China
     13https://mirrors.tuna.tsinghua.edu.cn/voidlinux/		T2 Asia: China
     14https://mirror.sjtu.edu.cn/voidlinux/			T2 Asia: China
     15https://mirror.maakpain.kro.kr/void/			T2 Asia: Seoul, SK
     16https://void.webconverger.org/				T2 Asia: Singapore
     17https://mirror.aarnet.edu.au/pub/voidlinux/		T2 AU: Canberra
     18https://ftp.swin.edu.au/voidlinux/			T2 AU: Melbourne
     19https://void.cijber.net/				T2 EU: Amsterdam, NL
     20https://mirror.easylee.nl/voidlinux/			T2 EU: Amsterdam, NL
     21http://ftp.dk.xemacs.org/voidlinux/			T2 EU: Denmark
     22https://mirrors.dotsrc.org/voidlinux/			T2 EU: Denmark
     23https://quantum-mirror.hu/mirrors/pub/voidlinux/	T2 EU: Hungary
     24https://voidlinux.qontinuum.space:4443/			T2 EU: Monaco
     25http://ftp.debian.ru/mirrors/voidlinux/			T2 EU: Russia
     26https://mirror.yandex.ru/mirrors/voidlinux/		T2 EU: Russia
     27https://cdimage.debian.org/mirror/voidlinux/		T2 EU: Sweden
     28https://ftp.acc.umu.se/mirror/voidlinux/		T2 EU: Sweden
     29https://ftp.lysator.liu.se/pub/voidlinux/		T2 EU: Sweden
     30https://ftp.sunet.se/mirror/voidlinux/			T2 EU: Sweden
     31https://mirror.clarkson.edu/voidlinux/			T2 USA: New York"
     32
     33show_usage() {
     34	: "${progname:="${0##*/}"}"
     35	cat <<_EOF | GREP_COLORS='ms=1' egrep --color "$progname|$"
     36Usage: $progname                    show usage info
     37       $progname -w [file.csv]      save speedtest results to file
     38       $progname -r file.csv        format speedtest results from file
     39       $progname -f file.csv        format speedtest results from file and pass to fzf
     40
     41pkg path: ${PKG_PATH}
     42speed limit: $(echo $SPEED_LIMIT | numfmt --to=iec-i --suffix=B/s)
     43mirrors for testing: $(echo "$MIRRORLIST" | wc -l)
     44_EOF
     45}
     46
     47format_speedtest_results() {
     48	cat "$1" | sort -t, -nrk4 | while IFS=, read url info time_appconnect download_speed; do
     49		f_time=$(printf "%.2fs" $time_appconnect)
     50		f_speed=$(echo $download_speed | numfmt --to=iec-i --suffix=B/s)
     51		echo "${url},${info},${f_time},${f_speed}"
     52	done | column -s, -t
     53}
     54
     55time_appconnect() {
     56	curl --connect-timeout 2 -o/dev/null -sw '%{time_appconnect}' -I $1
     57}
     58
     59download_speed() {
     60	curl -Y $SPEED_LIMIT --progress-bar $1 -o/dev/null --write-out "%{speed_download}"
     61}
     62
     63mirror_speedtest() {
     64	count=1
     65	echo "$MIRRORLIST" | while read -r mirror etc; do
     66		pkg_url="${mirror}${PKG_PATH}"
     67		info=$(echo $etc | sed 's/,//g')
     68		>&2 echo "${count}. $pkg_url"
     69		echo "${mirror},${info},$(time_appconnect $pkg_url),$(download_speed $pkg_url)"
     70		>&2 echo
     71		count=$((count + 1))
     72	done
     73}
     74
     75case $1 in
     76	-r) format_speedtest_results $2;;
     77	-f) format_speedtest_results $2 | fzf +s;;
     78	-w) [ -z $2 ] && { mirror_speedtest; exit 0; } || { mirror_speedtest >"$2"; exit 0; };;
     79	*) show_usage;;
     80esac
     81exit 0