59 lines
1.3 KiB
Bash
Executable file
59 lines
1.3 KiB
Bash
Executable file
#!/usr/bin/env dash
|
|
|
|
print_state() {
|
|
case "$1" in
|
|
eth*)
|
|
echo ethernet
|
|
;;
|
|
wlan*)
|
|
echo wireless
|
|
;;
|
|
usb*)
|
|
echo tethering
|
|
;;
|
|
*)
|
|
echo disconnected
|
|
;;
|
|
esac
|
|
}
|
|
|
|
wifi_strength() {
|
|
if [ "$1" -le -80 ]; then echo terrible
|
|
elif [ "$1" -le -70 ]; then echo bad
|
|
elif [ "$1" -le -60 ]; then echo mediocre
|
|
elif [ "$1" -le -40 ]; then echo good
|
|
else echo excellent
|
|
fi
|
|
}
|
|
|
|
print_infos() {
|
|
if [ -n "$1" ]; then
|
|
route_line=$(ip route show dev "$1" | awk '($1 == "default") { print }')
|
|
|
|
printf ',"ip":{"local":"%s","gateway":"%s"}' \
|
|
"$(echo "$route_line" | awk '{ print $7 }')" \
|
|
"$(echo "$route_line" | awk '{ print $3 }')"
|
|
|
|
if [ "$state" = wireless ]; then
|
|
signal=$(iw dev "$1" link | awk '($1 == "signal:") { print $2}')
|
|
printf ',"wifi":{"signal":"%s","ssid":"%s"}' \
|
|
"$(wifi_strength "$signal")" \
|
|
"$(iw dev wlan0 info | grep '^\s*ssid ' | xargs | cut -d \ -f 2-)"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
print_network_status() {
|
|
device=$(ip route | awk '($1 == "default") { print $5 }')
|
|
state=$(print_state "$device")
|
|
|
|
printf '{"state":"%s"%s}\n' \
|
|
"$state" \
|
|
"$(print_infos "$device")"
|
|
}
|
|
|
|
print_network_status
|
|
tail -f -n 0 /run/dhcpcd/log /var/log/iwd/current | \
|
|
while read -r _unused; do
|
|
print_network_status
|
|
done
|