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