+#!/bin/bash
+
+# ============================== SUMMARY =====================================
+#Author : Ken Roulamellah
+#Date : 19/07/2018
+#Version : 1.0
+# Licence : GPL
+# ===================== INFORMATION ABOUT THIS PLUGIN ========================
+#
+# This plugin checks the average RX and TX bandwidth utilisation. It use
+# kbytes as measure unite.
+#
+# ========================== START OF PROGRAM CODE ===========================
+
+STATE_OK=0
+STATE_WARNING=1
+STATE_CRITICAL=2
+STATE_UNKNOWN=3
+
+interface=$( ip route | grep default | awk '{print $5}' | head -n1)
+function print_usage()
+{
+ echo "Usage :"
+ echo "$0 [ -i=INTERFACE] [ -ct=COUNT ] -w WARNING -c CRITICAL"
+ echo "This script calculate the average bandwith usage."
+ echo "Default values | interface: ${interface}, counter: 10"
+}
+
+counter=10
+warning=-1
+critical=-1
+
+sum_rx=0
+sum_tx=0
+avg_rx=
+avg_tx=
+i=
+
+
+if [[ $# -lt 4 ]];
+then
+ echo "Error: Arguments are missing"
+ print_usage
+ exit $STATE_UNKNOWN
+fi
+
+while [[ $# -gt 0 ]]; do
+ case "$1" in
+ -i=*)
+ interface="$(cut -d'=' -f2 <<<"$1")"
+ shift
+ ;;
+ -ct=*)
+ counter="$(cut -d'=' -f2 <<<"$1")"
+ shift
+ ;;
+ -w)
+ warning=$2
+ shift 2
+ ;;
+ -c)
+ critical=$2
+ shift 2
+ ;;
+ *)
+ printf "\nError: Invalid option '$1'"
+ print_usage
+ exit $STATE_UNKNOWN
+ ;;
+ esac
+done
+
+if [ $warning -lt 0 ] || [ $critical -lt 0 ];
+then
+ echo "Error: You need to specify a warning and critical treshold"
+ print_usage
+ exit $STATE_UNKNOWN
+fi
+
+grep -q "up" /sys/class/net/$interface/operstate || exec echo "$interface: no such device or down"
+
+read rx <"/sys/class/net/$interface/statistics/rx_bytes"
+read tx <"/sys/class/net/$interface/statistics/tx_bytes"
+
+i=$counter
+while [ $i -gt 0 ]; do
+ sleep 1
+ read newrx <"/sys/class/net/$interface/statistics/rx_bytes"
+ read newtx <"/sys/class/net/$interface/statistics/tx_bytes"
+
+ #echo "old rx :$rx"
+ #echo "new rx :$newrx"
+ rx_cal=$(bc <<< "scale=2; ($newrx-$rx) / 1000")
+ tx_cal=$(bc <<< "scale=2; ($newtx-$tx) / 1000")
+
+ sum_rx=$(bc <<< "scale=2;$sum_rx+$rx_cal")
+ sum_tx=$(bc <<< "scale=2;$sum_tx+$tx_cal")
+
+ #echo "$interface {rx: $rx_cal ko/s, tx: $tx_cal ko/s}"
+ rx=$newrx
+ tx=$newtx
+ ((i --))
+done
+
+avg_rx=$(bc <<< "scale=2;$sum_rx/$counter")
+avg_tx=$(bc <<< "scale=2;$sum_tx/$counter")
+
+#echo "$avg_rx"
+#echo "$avg_tx"
+
+
+if [ $(bc <<< "$avg_rx > $critical || $avg_tx > $critical") -eq 1 ]; then
+ echo "$interface CRITICAL - AVG_RX: $avg_rx kb/s, AVG_TX:
+ $avg_tx kb/s | RX="$avg_rx"kbps;0;0;0; TX="$avg_tx"kbps;0;0;0;"
+ exit $STATE_CRITICAL
+elif [ $(bc <<< "$avg_rx > $warning || $avg_tx > $warning") -eq 1 ]; then
+ echo "$interface WARNING - AVG_RX: $avg_rx kb/s, AVG_TX: $avg_tx kb/s | RX="$avg_rx"kbps;0;0;0; TX="$avg_tx"kbps;0;0;0;"
+ exit $STATE_WARNING
+else
+ echo "$interface - OK AVG_RX: $avg_rx kb/s, AVG_TX: $avg_tx kb/s | RX="$avg_rx"kbps;0;0;0; TX="$avg_tx"kbps;0;0;0;"
+ exit $STATE_OK
+fi
+exit 3