100 行
3.1 KiB
Bash
実行ファイル
100 行
3.1 KiB
Bash
実行ファイル
#!/bin/sh -e
|
|
#
|
|
# network: calculate the network up/down rates
|
|
#
|
|
# Copyright (C) 2008 Canonical Ltd.
|
|
# Copyright (C) 2011-2014 Dustin Kirkland
|
|
#
|
|
# Authors: Dustin Kirkland <kirkland@byobu.org>
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, version 3 of the License.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
__network_detail() {
|
|
get_network_interface; local interface="$_RET"
|
|
LC_ALL=C /sbin/ip addr show "$interface" | $BYOBU_SED 's/\s*$//'
|
|
}
|
|
|
|
__network() {
|
|
get_network_interface; local interface="$_RET"
|
|
local x1=0 x2=0 tx1=0 i= t= unit= symbol= cache= rate=
|
|
status_freq network
|
|
t="$_RET"
|
|
# By default, we won't bug the user with the display of network traffic
|
|
# below NETWORK_THRESHOLD in kbps; override in $BYOBU_CONFIG_DIR/status
|
|
[ -n "$NETWORK_THRESHOLD" ] || NETWORK_THRESHOLD=20
|
|
for i in up down; do
|
|
unit="kb"
|
|
case $i in
|
|
up) symbol="$ICON_UP" ;;
|
|
down) symbol="$ICON_DN" ;;
|
|
esac
|
|
cache="$BYOBU_RUN_DIR/cache.$BYOBU_BACKEND/network.$i"
|
|
[ -r "$cache" ] && read x1 < "$cache" || tx1=0
|
|
local iface rbytes rpackets rerrs rdrop rfifo rframe rcompressed rmulticast tbytes tpackets terrs tdrop tfifo tcolls tcarrier tcompressed
|
|
cat /proc/net/dev > "$cache".dev
|
|
while read iface rbytes rpackets rerrs rdrop rfifo rframe rcompressed rmulticast tbytes tpackets terrs tdrop tfifo tcolls tcarrier tcompressed; do
|
|
case "$iface" in
|
|
${interface}:)
|
|
[ "$i" = "up" ] && x2=${tbytes} || x2=${rbytes}
|
|
break;
|
|
;;
|
|
${interface}:*)
|
|
# Interface and tbytes got munged together
|
|
[ "$i" = "up" ] && x2=${rmulticast##*:} || x2=${iface##*:}
|
|
break;
|
|
;;
|
|
esac
|
|
done < "$cache".dev
|
|
printf "%s" "$x2" > "$cache"
|
|
rate=$((8*($x2 - $x1) / $t / 1024)) # in kbps
|
|
[ "$rate" -lt 0 ] && rate=0
|
|
if [ $rate -gt $NETWORK_THRESHOLD ]; then
|
|
case "$NETWORK_UNITS" in
|
|
bytes)
|
|
rate=$(($rate/8))
|
|
if [ "$rate" -gt 1048576 ]; then
|
|
fpdiv "$rate" 1048576 1
|
|
rate=${_RET}
|
|
unit="GB/s"
|
|
elif [ "$rate" -gt 1024 ]; then
|
|
fpdiv "$rate" 1024 1
|
|
rate=${_RET}
|
|
unit="MB/s"
|
|
else
|
|
unit="kB/s"
|
|
fi
|
|
;;
|
|
*)
|
|
# Default to bps
|
|
# Why 1000 and not 1024? http://en.wikipedia.org/wiki/Data_rate_units
|
|
if [ "$rate" -gt 1000000 ]; then
|
|
fpdiv "$rate" 1000000 1
|
|
rate=${_RET}
|
|
unit="Gb"
|
|
elif [ "$rate" -gt 1000 ]; then
|
|
fpdiv "$rate" 1000 1
|
|
rate=${_RET}
|
|
unit="Mb"
|
|
fi
|
|
;;
|
|
esac
|
|
[ -n "$rate" ] || continue
|
|
color b m w; printf "%s%s" "$symbol" "$rate"; color -; color m w; printf "%s" "$unit"; color --
|
|
else
|
|
rm -f "$BYOBU_RUN_DIR/status.$BYOBU_BACKEND/network"*
|
|
fi
|
|
done
|
|
}
|
|
|
|
# vi: syntax=sh ts=4 noexpandtab
|