]> arthur.barton.de Git - netdata.git/blob - plugins.d/tc-qos-helper.sh
charts.d restarts every hour to prevent memory leaks of the shell; initial update...
[netdata.git] / plugins.d / tc-qos-helper.sh
1 #!/bin/sh
2
3 # default sleep function
4 loopsleepms() {
5         sleep $1
6 }
7 # if found and included, this file overwrites loopsleepms()
8 # with a high resolution timer function for precise looping.
9 . "`dirname $0`/loopsleepms.sh.inc"
10
11 # check if we have a valid number for interval
12 t=$1
13 sleep_time=$(( t + 1 - 1 ))
14 if [ "$sleep_time" -eq 0 ]
15         then
16         sleep_time=1
17 fi
18
19 devices=
20 fix_names=
21
22 setclassname() {
23         echo "SETCLASSNAME $3 $2"
24 }
25
26 show_tc() {
27         local x="$1"
28
29         echo "BEGIN $x"
30         
31         /sbin/tc -s class show dev $x
32         
33         # check FireQOS names for classes
34         if [ ! -z "$fix_names" -a -f /var/run/fireqos/ifaces/$x ]
35         then
36                 name="`cat /var/run/fireqos/ifaces/$x`"
37                 echo "SETDEVICENAME $name"
38
39                 interface_classes=
40                 . /var/run/fireqos/$name.conf
41                 for n in $interface_classes_monitor
42                 do
43                                 setclassname `echo $n | tr '|' ' '`
44                 done
45                 
46                 echo "SETDEVICEGROUP $interface_dev"
47         fi
48         echo "END $x"
49 }
50
51 all_devices() {
52         cat /proc/net/dev | grep ":" | cut -d ':' -f 1 | while read dev
53         do
54                 l=`/sbin/tc class show dev $dev | wc -l`
55                 [ $l -ne 0 ] && echo $dev
56         done
57 }
58
59 # update devices and class names
60 # once every 2 minutes
61 names_every=$((120 / sleep_time))
62
63 # exit this script every hour
64 # it will be restarted automatically
65 exit_after=$((3600 / sleep_time))
66
67 c=0
68 gc=0
69 while [ 1 ]
70 do
71         fix_names=
72         c=$((c + 1))
73         gc=$((gc + 1))
74
75         if [ $c -le 1 -o $c -ge $names_every ]
76         then
77                 c=1
78                 fix_names="YES"
79                 devices="`all_devices`"
80         fi
81
82         for d in $devices
83         do
84                 show_tc $d
85         done
86
87         loopsleepms $sleep_time
88
89         test $gc -gt $exit_after && exit 0
90 done