#!/bin/bash # default time function now_ms= current_time_ms() { now_ms="$(date +'%s')000" } # default sleep function LOOPSLEEPMS_LASTWORK=0 loopsleepms() { [ "$1" = "tellwork" ] && shift sleep $1 } # if found and included, this file overwrites loopsleepms() # with a high resolution timer function for precise looping. . "$NETDATA_PLUGINS_DIR/loopsleepms.sh.inc" # check if we have a valid number for interval t=$1 sleep_time=$((t)) [ $((sleep_time)) -lt 1 ] && $NETDATA_UPDATE_EVERY [ $((sleep_time)) -lt 1 ] && sleep_time=1 tc_cmd="$(which tc)" if [ -z "$tc_cmd" ] then echo >&2 "tc: Cannot find a 'tc' command in this system." exit 1 fi devices= fix_names= setclassname() { echo "SETCLASSNAME $3 $2" } show_tc() { local x="$1" echo "BEGIN $x" $tc_cmd -s class show dev $x # check FireQOS names for classes if [ ! -z "$fix_names" -a -f /var/run/fireqos/ifaces/$x ] then name="$(cat /var/run/fireqos/ifaces/$x)" echo "SETDEVICENAME $name" interface_classes= interface_classes_monitor= . /var/run/fireqos/$name.conf for n in $interface_classes_monitor do setclassname $(echo $n | tr '|' ' ') done echo "SETDEVICEGROUP $interface_dev" fi echo "END $x" } all_devices() { cat /proc/net/dev | grep ":" | cut -d ':' -f 1 | while read dev do l=$($tc_cmd class show dev $dev | wc -l) [ $l -ne 0 ] && echo $dev done } # update devices and class names # once every 2 minutes names_every=$((120 / sleep_time)) # exit this script every hour # it will be restarted automatically exit_after=$((3600 / sleep_time)) c=0 gc=0 while [ 1 ] do fix_names= c=$((c + 1)) gc=$((gc + 1)) if [ $c -le 1 -o $c -ge $names_every ] then c=1 fix_names="YES" devices="$( all_devices )" fi for d in $devices do show_tc $d done echo "WORKTIME $LOOPSLEEPMS_LASTWORK" loopsleepms $sleep_time [ $gc -gt $exit_after ] && exit 0 done