]> arthur.barton.de Git - netdata.git/blob - plugins.d/tc-qos-helper.sh
As suggested, tweaked tomcat_url for better handling, added array for single xml...
[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         $tc_cmd -s class show dev $x
45
46         # check FireQOS names for classes
47         if [ ! -z "$fix_names" -a -f /var/run/fireqos/ifaces/$x ]
48         then
49                 name="$(cat /var/run/fireqos/ifaces/$x)"
50                 echo "SETDEVICENAME $name"
51
52                 interface_classes=
53                 interface_classes_monitor=
54                 . /var/run/fireqos/$name.conf
55                 for n in $interface_classes_monitor
56                 do
57                         setclassname $(echo $n | tr '|' ' ')
58                 done
59                 echo "SETDEVICEGROUP $interface_dev"
60         fi
61         echo "END $x"
62 }
63
64 all_devices() {
65         cat /proc/net/dev | grep ":" | cut -d ':' -f 1 | while read dev
66         do
67                 l=$($tc_cmd class show dev $dev | wc -l)
68                 [ $l -ne 0 ] && echo $dev
69         done
70 }
71
72 # update devices and class names
73 # once every 2 minutes
74 names_every=$((120 / sleep_time))
75
76 # exit this script every hour
77 # it will be restarted automatically
78 exit_after=$((3600 / sleep_time))
79
80 c=0
81 gc=0
82 while [ 1 ]
83 do
84         fix_names=
85         c=$((c + 1))
86         gc=$((gc + 1))
87
88         if [ $c -le 1 -o $c -ge $names_every ]
89         then
90                 c=1
91                 fix_names="YES"
92                 devices="$( all_devices )"
93         fi
94
95         for d in $devices
96         do
97                 show_tc $d
98         done
99
100         echo "WORKTIME $LOOPSLEEPMS_LASTWORK"
101
102         loopsleepms $sleep_time
103
104         [ $gc -gt $exit_after ] && exit 0
105 done