blob: 7b4739815481d2097bb1573500b8f92e8757a338 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
#!/bin/bash
export PATH="${PATH}:/sbin:/usr/sbin:/usr/local/sbin"
# 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
|