| 1 | #!/usr/bin/env bash |
| 2 | |
| 3 | brt_speed() { |
| 4 | brt_require curl |
| 5 | brt_info "Running download speed test..." |
| 6 | |
| 7 | local url="https://speed.cloudflare.com/__down?bytes=10000000" |
| 8 | local tmp |
| 9 | tmp=$(mktemp) |
| 10 | |
| 11 | local start end elapsed bytes speed |
| 12 | start=$(date +%s) |
| 13 | curl -fsSL -o "$tmp" "$url" 2>/dev/null || { |
| 14 | url="https://proof.ovh.net/files/1Mb.dat" |
| 15 | curl -fsSL -o "$tmp" "$url" |
| 16 | } |
| 17 | end=$(date +%s) |
| 18 | elapsed=$(( end - start )) |
| 19 | [[ "$elapsed" -eq 0 ]] && elapsed=1 |
| 20 | bytes=$(wc -c < "$tmp" | tr -d ' ') |
| 21 | rm -f "$tmp" |
| 22 | |
| 23 | speed=$(awk "BEGIN { printf \"%.2f\", ($bytes * 8) / ($elapsed * 1000000) }") |
| 24 | local mbps |
| 25 | mbps=$(awk "BEGIN { printf \"%.2f\", $bytes / ($elapsed * 1048576) }") |
| 26 | |
| 27 | brt_ok "Downloaded $(numfmt --to=iec "$bytes" 2>/dev/null || echo "${bytes} bytes") in ${elapsed}s" |
| 28 | echo " Speed: ${mbps} MB/s (${speed} Mbps)" |
| 29 | } |
| 30 | |