From 7e971a5c76c8c5bc1573c7f33754b359daea77c4 Mon Sep 17 00:00:00 2001 From: Chl Date: Mon, 14 Oct 2019 03:44:20 +0200 Subject: [PATCH] script-debit: rewrite --- script_debit.sh | 30 ------------------------------ script_debit2.sh | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 30 deletions(-) delete mode 100755 script_debit.sh create mode 100755 script_debit2.sh diff --git a/script_debit.sh b/script_debit.sh deleted file mode 100755 index e43a664..0000000 --- a/script_debit.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh - -# Ce script donne la volumétrie d'une interface réseau à intervalle régulier -# (se base sur /proc/net/dev) - -FICHIER_PROC=/proc/net/dev -INTERFACE="eth0" -DELAI="10" - -OLD_VOLUME_IN=0 -OLD_VOLUME_OUT=0 -VOLUME_IN=0 -VOLUME_OUT=0 - -while true ; do - VOLUME_IN=$( cat "$FICHIER_PROC" | grep "$INTERFACE:" | sed 's/^[[:space:]]*eth0:\([[:digit:]]\+\)[[:space:]]\+.*/\1/' ) - VOLUME_OUT=$( cat "$FICHIER_PROC" | grep "$INTERFACE:" | sed 's/^[[:space:]]*eth0:\([[:digit:]]\+[[:space:]]\+\)\{8\}\([[:digit:]]\+\)[[:space:]]\+.*/\2/' ) - - if [ "$OLD_VOLUME_IN" -eq "0" ] ; then - echo "Please wait..." - else - printf "%s: %10d o/s reception, %10d o/s emission\n" "$INTERFACE" $(( ( $VOLUME_IN - $OLD_VOLUME_IN ) / $DELAI )) $(( ( $VOLUME_OUT - $OLD_VOLUME_OUT ) / $DELAI )) - fi - - OLD_VOLUME_IN=$VOLUME_IN - OLD_VOLUME_OUT=$VOLUME_OUT - - sleep "$DELAI" -done - diff --git a/script_debit2.sh b/script_debit2.sh new file mode 100755 index 0000000..24d3f0f --- /dev/null +++ b/script_debit2.sh @@ -0,0 +1,39 @@ +#!/bin/sh + +# Ce script donne la volumétrie d'une interface réseau à intervalle régulier +# (se base sur /proc/net/dev) + +FICHIER_PROC=/proc/net/dev +DELAI="1" + +# Try to get a pretty formatter +FORMATTER="cat -" +if which numfmt >/dev/null 2>&1; then + FORMATTER="numfmt --field 2-3 --to si --padding 7" +fi + +# Factorize the parsing +getdata() { + cat "$1" | sed -e '1d;2d' -e 's/^[[:space:]]*//' -e 's/[[:space:]]\+/ /g' | cut -f 1,2,10 -d " " +} + +# First grab +OLDDATA="$( getdata "$FICHIER_PROC" )" + +while sleep "$DELAI" ; do + NEWDATA="$( getdata "$FICHIER_PROC" )" + + # header + printf "\n% 15s\t% 6s\t% 6s\n" " " "IN" "OUT" + + echo "$NEWDATA" | while read INTERFACE VOLUME_IN VOLUME_OUT; do + # Again, scope issues with read and pipes so we make a one-time loop :) + echo "$OLDDATA" | grep "$INTERFACE" | while read DUMP OLD_VOLUME_IN OLD_VOLUME_OUT; do + VOLUME_IN="$(( $VOLUME_IN - $OLD_VOLUME_IN ))" + VOLUME_OUT="$(( $VOLUME_OUT - $OLD_VOLUME_OUT ))" + printf "% 15s\t%d\t%d\n" "$INTERFACE" "$VOLUME_IN" "$VOLUME_OUT" | $FORMATTER + done + done + + OLDDATA="$NEWDATA" +done