summary refs log tree commit diff
path: root/bin/netspeed
blob: 6db5dc51c0581151ae59f34cda86d5cf4b57b003 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/bin/sh

set -e
[ -n "$DEBUG" ] && set -x

if [ "$1" = "-h" ] || [ "$1" = "help" ]; then
	printf "usage: %s\n" "$(basename "$0")"
	printf "use iperf3 to benchmark connection throughput\n"
	printf "\n"
	exit 2
fi

SERVER=inazuma.moji.moe
PORT=33000

run_server() {
	printf "starting server... => %s:%s\n" "${SERVER}" "${PORT}" >&2
	ssh ${SERVER} -- iperf3 -s -D -1 -p ${PORT}
	# sleep 3
}

run_client() {
	printf "measuring...\n" >&2
	case $1 in
	dl) iperf3 -J -c ${SERVER} -p ${PORT} -R ;;
	ul) iperf3 -J -c ${SERVER} -p ${PORT} ;;
	esac
}

place() {
	iplink=$(ip link | grep UP | cut -d' ' -f2 | tr -d ':' | grep -v lo | head -n1)
	case "${iplink}" in
	wlan*) iwctl station "${iplink}" show | grep network | xargs | cut -d' ' -f3- ;;
	*) printf "?\n" ;;
	esac
}

if [ -n "$MANUAL" ]; then
	run_server
	set -x
	exec iperf3 -c ${SERVER} -p ${PORT} "$@"
fi

# measure download
run_server
bps_dl=$(run_client dl |
	jq -r '.end.sum_received.bits_per_second' |
	awk '{print $0/1000000}')

printf "DL: %.2f\n" "${bps_dl}" >&2

# measure upload
run_server
bps_ul=$(iperf3 -J -c ${SERVER} -p ${PORT} |
	jq -r '.end.sum_sent.bits_per_second' |
	awk '{print $0/1000000}')

printf "UL: %.2f\n" "${bps_ul}" >&2

# print results
printf "%s,COUNTRY,CITY,%s,%.2f,%.2f,LAT,LON\n" \
	"$(date +%d/%m/%y)" \
	"$(place)" \
	"${bps_dl}" \
	"${bps_ul}"