lib/speed.sh

837 B · 30 lines · bash

1#!/usr/bin/env bash
2
3brt_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