Files
dots/dwm/.dwm.old/bar/bar-functions/dwm_network_speed.sh

66 lines
2.1 KiB
Bash
Executable File

#!/bin/sh
# A dwm_bar function to show the speed of download and upload.
# Johan Chane <johanchanex@gmail.com>
# GNU GPLv3
# Dependencies:
# This function parses /proc/net/dev file searching for a line containing $interface data.
# Within that line, the first and ninth numbers after ':' are respectively the received and transmited bytes.
# parameters: name_of_received_bytes, name_of_transmitted_bytes
function get_bytes {
# Find active network interface
#interface=$(ip route get 8.8.8.8 2>/dev/null | grep 'dev \S\+' -o | awk '{print $2}')
local interface=$(route | grep '^default' | grep -o '[^ ]*$')
local bytes_concat_args=$(grep ${interface:-lo} /proc/net/dev | cut -d ':' -f 2 | awk -v rb="$1" -v tb="$2" '{print rb"="$1, tb"="$9}')
eval $bytes_concat_args
}
# Function which calculates the speed using actual and old byte number.
# Speed is shown in KByte per second when greater or equal than 1 KByte per second.
# This function should be called each second.
# parameters: value, old_value, now, old_time
function get_velocity {
local timediff=$(($3 - $4))
local vel_kb=$(echo "1000000000 * ($1 - $2) / 1024 / $timediff" | bc)
if test "$vel_kb" -gt 1024; then
echo $(echo "scale = 2; $vel_kb / 1024" | bc)MB/s
else
echo ${vel_kb}KB/s
fi
}
function dwm_network_speed_record {
get_bytes 'received_bytes' 'transmitted_bytes'
old_received_bytes=$received_bytes
old_transmitted_bytes=$transmitted_bytes
old_time=$(date +%s%N)
}
function download_speed {
get_velocity $received_bytes $old_received_bytes $now $old_time
}
function upload_speed {
get_velocity $transmitted_bytes $old_transmitted_bytes $now $old_time
}
# The greater interval ($now - $old_time) is, the be exacter the speed is.
function dwm_network_speed {
get_bytes 'received_bytes' 'transmitted_bytes'
now=$(date +%s%N)
printf "%s" "$SEP1"
if [ "$IDENTIFIER" = "unicode" ]; then
printf "李 %s %s" "$(download_speed)" "$(upload_speed)"
else
printf "Net %s %s" "$(download_speed)" "$(upload_speed)"
fi
printf "%s\n" "$SEP2"
}
dwm_network_speed_record
dwm_network_speed