diff --git a/check_netio b/check_netio index cd012f9d970f5232773894ab8f74e1187dacb603..9b5cc8d5d0bd66c6f274889de3c0c8e0024f0a0c 100755 --- a/check_netio +++ b/check_netio @@ -6,19 +6,66 @@ # # ---------------------------------------------------------------------- # 2020-07-08 v1.0 <axel.hahn@iml.unibe.ch> +# 2023-08-21 v1.1 <axel.hahn@unibe.ch> add help; add param -i # ====================================================================== -. `dirname $0`/inc_pluginfunctions +. $( dirname $0 )/inc_pluginfunctions + +export self_APPVERSION=1.1 + + +# ---------------------------------------------------------------------- +# FUNCTIONS +# ---------------------------------------------------------------------- + +# show help text +function showHelp(){ + local _self; _self=$(basename $0) +cat <<EOF +$( ph.showImlHelpHeader ) + +Show network io for all or selected interfaces. +It shows the current counter value from /proc/net/dev and the speed +in byte per sec since last execution. + +This plugin sends performancedata. + +SYNTAX: + $_self [-h] [-i INTERFACE(S)] + +OPTIONS: + -h this help + +PARAMETERS: + -i INTERFACE show this interface only. Quote multiple interfaces. + The check returns unknown if an interface does not + exist. + +EXAMPLES: + + $_self show netio of all network interfaces + $_self -i "eth0 eth1" + show netio of given interfaces. + +EOF +} # ---------------------------------------------------------------------- # MAIN # ---------------------------------------------------------------------- +bOptHelp=$( ph.hasParamoption "h" "$@") + +if [ $bOptHelp -eq 1 ]; then + showHelp + exit 0 +fi -tmpfile1=`mktemp` tmpfile2=`mktemp` +typeset -i iCountInterfaces + typeset -i iRead=0 typeset -i iTrans=0 typeset -i iSpeedRead=0 @@ -26,54 +73,63 @@ typeset -i iSpeedTrans=0 typeset -i iTotalRead=0 typeset -i iTotalTrans=0 -cat /proc/net/dev | grep -E "(eth|en[ops][0-9]*)" >$tmpfile1 +data=$( cat /proc/net/dev | grep -E "(eth|en[ops][0-9]*)" ) + +allInterfaces=$( cut -f 1 -d ":" <<< "$data" | tr -d " " ) +sInterface=$( ph.getValueWithParam "$allInterfaces" "i" "$@") -for myinterface in `cat $tmpfile1 | cut -f 1 -d ":" | tr -d " "` +iCountInterfaces=$( wc -w <<< "$sInterface" ) +for myinterface in $sInterface do - echo >>$tmpfile2 - echo "--- $myinterface" >> $tmpfile2 - line=`grep "${myinterface}\:" $tmpfile1` - # echo "SOURCE: $line" >> $tmpfile2 + echo >>"$tmpfile2" + echo "--- ${myinterface}:" >> "$tmpfile2" + line=$( grep "${myinterface}:" <<< "$data" ) + if [ -n "$line" ] ; then - # total value of byte - iRead=`echo $line | awk '{ print $2 }'` - iTrans=`echo $line | awk '{ print $10 }'` + # echo "SOURCE: $line" >> $tmpfile2 - # speed in byte per sec based on last stored value and its age - iSpeedRead=` ph.perfdeltaspeed "netio-${myinterface}-rx" $iRead` - iSpeedTrans=`ph.perfdeltaspeed "netio-${myinterface}-tx" $iTrans` + # total value of byte + iRead=$( echo "$line" | awk '{ print $2 }') + iTrans=$(echo "$line" | awk '{ print $10 }') - # echo " > receive : $iRead .. $iSpeedRead byte/s" >> $tmpfile2 - # echo " > transmit: $iTrans .. $iSpeedTrans byte/s" >> $tmpfile2 + # speed in byte per sec based on last stored value and its age + iSpeedRead=$( ph.perfdeltaspeed "netio-${myinterface}-rx" $iRead) + iSpeedTrans=$(ph.perfdeltaspeed "netio-${myinterface}-tx" $iTrans) - printf "%15s %15s %10s %-10s \n" "receive:" $iRead $iSpeedRead "byte/s" >> $tmpfile2 - printf "%15s %15s %10s %-10s \n" "transmit:" $iTrans $iSpeedTrans "byte/s" >> $tmpfile2 + printf "%15s %15s %10s %-10s \n" "receive:" $iRead $iSpeedRead "byte/s" >> "$tmpfile2" + printf "%15s %15s %10s %-10s \n" "transmit:" $iTrans $iSpeedTrans "byte/s" >> "$tmpfile2" - # to store data for each interface - # mylabel=`echo $line | awk '{ print $1 }' | tr [:upper:] [:lower:]` - # ph.perfadd "${myinterface}-rx" "$iSpeedRead" - # ph.perfadd "${myinterface}-tx" "$iSpeedTrans" + # to store data for each interface + if [ $iCountInterfaces -gt 1 ]; then + ph.perfadd "rx-${myinterface}" "$iSpeedRead" + ph.perfadd "tx-${myinterface}" "$iSpeedTrans" + fi + + iTotalRead=$iTotalRead+$iSpeedRead + iTotalTrans=$iTotalTrans+$iSpeedTrans + else + ph.setStatus "unknown" + echo "UNKNOWN: the interface ${myinterface} does not exist." >> "$tmpfile2" + fi - iTotalRead=$iTotalRead+$iSpeedRead - iTotalTrans=$iTotalTrans+$iSpeedTrans done -echo "" >> $tmpfile2 -echo "--- total:" >> $tmpfile2 -# echo " > receive : $iTotalRead byte/s" >> $tmpfile2 -# echo " > transmit: $iTotalTrans byte/s" >> $tmpfile2 -printf "%15s %10s %-10s \n" "receive:" $iTotalRead "byte/s" >> $tmpfile2 -printf "%15s %10s %-10s \n" "transmit:" $iTotalTrans "byte/s" >> $tmpfile2 +echo "" >> "$tmpfile2" + +if [ $iCountInterfaces -gt 1 ]; then + echo "--- total:" + printf "%15s %10s %-10s \n" "receive:" $iTotalRead "byte/s" + printf "%15s %10s %-10s \n" "transmit:" $iTotalTrans "byte/s" +fi >> "$tmpfile2" ph.perfadd "rx" "$iTotalRead" ph.perfadd "tx" "$iTotalTrans" -ph.status "Network IO ... IN `ph.toUnit $iTotalRead M` MB/s >> [host] >> `ph.toUnit $iTotalTrans M` MB/s OUT" +ph.status "Network IO ... IN $(ph.toUnit $iTotalRead M) MB/s >> [host] >> $(ph.toUnit $iTotalTrans M) MB/s OUT" -# cat $tmpfile1 -cat $tmpfile2 +cat "$tmpfile2" -rm -f $tmpfile1 $tmpfile2 +rm -f "$tmpfile2" ph.exit