123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #!/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
|