3 .
/usr
/share
/libubox
/jshn.sh
5 HOSTNAME
="${COLLECTD_HOSTNAME:-localhost}"
6 INTERVAL
="${COLLECTD_INTERVAL:-60}"
12 ifr
="${ifc//[!0-9A-Za-z]/_}"
15 json_get_vars bytes packets drops backlog qlen
19 json_get_vars bandwidth diffserv
22 echo "PUTVAL \"$HOSTNAME/sqm-$ifc/qdisc_bytes\" interval=$INTERVAL N:$bytes"
23 echo "PUTVAL \"$HOSTNAME/sqm-$ifc/qdisc_drops\" interval=$INTERVAL N:$drops"
24 echo "PUTVAL \"$HOSTNAME/sqm-$ifc/qdisc_backlog\" interval=$INTERVAL N:$backlog"
26 # ash doesn't have arrays so prepare to get a little creative
28 diffserv3 | diffserv4
) tns
="BKBEVIVO"
30 *) tns
="T0T1T2T3T4T5T6T7"
35 # Flows & delays indicate the state as of the last packet that flowed through, so they appear to get stuck.
36 # Discard the results from a stuck tin.
37 json_get_keys tins tins
42 json_get_vars threshold_rate sent_bytes sent_packets backlog_bytes target_us peak_delay_us avg_delay_us base_delay_us drops ecn_mark ack_drops sparse_flows bulk_flows unresponsive_flows
44 eval osp
="\$osp${ifr}t${i}"
45 if [ "$osp" ] && [ "$osp" -eq "$sent_packets" ] ; then
46 peak_delay_us
=0; avg_delay_us
=0; base_delay_us
=0
47 sparse_flows
=0; bulk_flows
=0; unresponsive_flows
=0
49 eval "osp${ifr}t${i}=$sent_packets"
54 echo "PUTVAL \"$HOSTNAME/sqmcake-$ifc/qdisct_bytes-$tn\" interval=$INTERVAL N:$sent_bytes"
55 echo "PUTVAL \"$HOSTNAME/sqmcake-$ifc/qdisct_thres-$tn\" interval=$INTERVAL N:$threshold_rate"
56 echo "PUTVAL \"$HOSTNAME/sqmcake-$ifc/qdisct_drops-$tn\" interval=$INTERVAL N:$drops:$ecn_mark:$ack_drops"
57 echo "PUTVAL \"$HOSTNAME/sqmcake-$ifc/qdisct_backlog-$tn\" interval=$INTERVAL N:$backlog_bytes"
58 echo "PUTVAL \"$HOSTNAME/sqmcake-$ifc/qdisct_flows-$tn\" interval=$INTERVAL N:$sparse_flows:$bulk_flows:$unresponsive_flows"
59 echo "PUTVAL \"$HOSTNAME/sqmcake-$ifc/qdisct_latencyus-$tn\" interval=$INTERVAL N:$target_us:$peak_delay_us:$avg_delay_us:$base_delay_us"
71 json_get_vars bytes drops backlog
73 echo "PUTVAL \"$HOSTNAME/sqm-$ifc/qdisc_bytes\" interval=$INTERVAL N:$bytes"
74 echo "PUTVAL \"$HOSTNAME/sqm-$ifc/qdisc_drops\" interval=$INTERVAL N:$drops"
75 echo "PUTVAL \"$HOSTNAME/sqm-$ifc/qdisc_backlog\" interval=$INTERVAL N:$backlog"
82 jsn
=$
(tc
-s -j qdisc show dev
"$ifc") ||
return
84 # strip leading & trailing []
85 jsn
="${jsn#[}" ; jsn
="${jsn%]}"
88 json_get_var qdisc kind
91 cake
) handle_cake
"$ifc"
96 *) echo "Unknown qdisc type '$qdisc' on interface '$ifc'" 1>&2
103 while [ $
(awk '$1 ~ "^PPid:" {print $2}' /proc
/$$
/status
) -ne 1 ] ; do
107 sleep "${INTERVAL%%.*}"