Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- ##
- # Bandwidth me!
- # Bandwidth monitor script written by Manfred Dellkrantz in 2012.
- # I run it every five minutes using crontab.
- # */5 * * * * /home/whatever/bwme.sh >> /home/whatever/bwme.log
- # Outputs totals by the hour, day, week, month and year.
- # Also outputs some preliminary numbers
- ##
- function byte {
- echo $1|awk '
- BEGIN {
- split("B,KiB,MiB,GiB,TiB,PiB,EiB,ZiB,YiB", Units, ",");
- }
- {
- u = 1;
- while ($1 >= 1024) {
- $1 = $1 / 1024;
- u += 1
- }
- $1 = sprintf("%.2f %s", $1, Units[u]);
- print $0;
- }
- '
- }
- mkdir $0.lock || exit 1
- #echo "## Running" `date`
- net=(`grep eth0 /proc/net/dev`)
- in=${net[1]}
- out=${net[9]}
- let tot=$in+$out
- year=`date +%Y`
- month=`date +%B`
- week=`date +%W`
- day=`date +%d`
- hour=`date +%H`
- min=`date +%M`
- if [ -f $0.db ]; then
- data=(`cat $0.db`);
- else
- data=($in $out $year $month $week $day $hour $min 0 0 0 0 0 0)
- fi
- let oTot=${data[0]}+${data[1]}
- if (( $oTot > $tot )); then
- echo "## Has there been a reboot?"
- dIn=$in
- dOut=$out
- else
- let dIn=$in-${data[0]}
- let dOut=$out-${data[1]}
- fi
- data[0]=$in
- data[1]=$out
- for i in `seq 8 13`; do
- let data[$i]=data[$i]+$dIn+$dOut
- done
- if [ "${data[2]}" != "$year" ]; then
- echo "End of year ${data[2]}:" `byte ${data[8]}`
- data[2]=$year
- data[8]=0
- fi
- if [ "${data[3]}" != "$month" ]; then
- echo "End of month ${data[3]}: `byte ${data[9]}`, so far for year ${data[2]}: `byte ${data[8]}`"
- data[3]=$month
- data[9]=0
- fi
- if [ "${data[4]}" != "$week" ]; then
- echo "End of week ${data[4]}:" `byte ${data[10]}`
- data[4]=$week
- data[10]=0
- fi
- if [ "${data[5]}" != "$day" ]; then
- echo "End of day ${data[5]}: `byte ${data[11]}`, so far for week ${data[4]}: `byte ${data[10]}`, ${data[3]}: `byte ${data[9]}`"
- data[5]=$day
- data[11]=0
- fi
- if [ "${data[6]}" != "$hour" ]; then
- echo "End of hour ${data[6]}: `byte ${data[12]}`, so far for day ${data[5]}: `byte ${data[11]}`"
- data[6]=$hour
- data[12]=0
- fi
- if [ "${data[7]}" != "$min" ]; then
- # echo "End of minute ${data[7]}: `byte ${data[13]}`, so far for hour ${data[6]}: `byte ${data[12]}`"
- data[7]=$min
- data[13]=0
- fi
- echo ${data[@]}>$0.db
- rmdir $0.lock
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement