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