mirror of
https://github.com/munin-monitoring/contrib.git
synced 2018-11-08 00:59:34 +01:00
5ff3522ecc
* look for already running acquire process, or start one * use CDEF to return bits/second (like if_) * increase lifetime to 450 days (like if_) * changed category to plain "network" (like if_) * report max interface speed (like if_) * small performance improvement: don't fork two cat(1) and one date(1) every second (this roughly halves the CPU time used on my system)
102 lines
2.2 KiB
Bash
Executable File
102 lines
2.2 KiB
Bash
Executable File
#! /bin/sh
|
|
|
|
pluginfull="$0" # full name of plugin
|
|
plugin="${0##*/}" # name of plugin
|
|
pidfile="$MUNIN_PLUGSTATE/munin.$plugin.pid"
|
|
cache="$MUNIN_PLUGSTATE/munin.$plugin.value"
|
|
|
|
IFACE="${0##*/if1sec_}" # interface
|
|
|
|
if [ ! -r "/sys/class/net/$IFACE/statistics/tx_bytes" ]
|
|
then
|
|
echo "# Unknown Interface : $IFACE"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$1" = "acquire" ]
|
|
then
|
|
(
|
|
exec <&- >&- 2>&-
|
|
while sleep 1
|
|
do
|
|
read tx < /sys/class/net/$IFACE/statistics/tx_bytes
|
|
read rx < /sys/class/net/$IFACE/statistics/rx_bytes
|
|
echo "$tx $rx"
|
|
done | awk "{
|
|
now = systime()
|
|
print \"${IFACE}_tx.value \" now \":\" \$1
|
|
print \"${IFACE}_rx.value \" now \":\" \$2
|
|
system(\"\")
|
|
}" >> $cache
|
|
) &
|
|
echo $! > $pidfile
|
|
exit 0
|
|
fi
|
|
|
|
|
|
if [ "$1" = "config" ]
|
|
then
|
|
cat <<EOF
|
|
graph_title Interface 1sec stats for ${IFACE}
|
|
graph_category network
|
|
graph_data_size custom 1d, 10s for 1w, 1m for 1t, 5m for 450d
|
|
graph_vlabel bits/sec
|
|
update_rate 1
|
|
${IFACE}_tx.label ${IFACE} TX bits
|
|
${IFACE}_tx.cdef ${IFACE}_tx,8,*
|
|
${IFACE}_tx.type DERIVE
|
|
${IFACE}_tx.min 0
|
|
${IFACE}_rx.label ${IFACE} RX bits
|
|
${IFACE}_rx.cdef ${IFACE}_rx,8,*
|
|
${IFACE}_rx.type DERIVE
|
|
${IFACE}_rx.min 0
|
|
EOF
|
|
# If max speed is easily available, report it. More complex
|
|
# code could be copied from "if_".
|
|
if [ -r /sys/class/net/$IFACE/speed ]
|
|
then
|
|
SPEED=$(cat /sys/class/net/$IFACE/speed)
|
|
echo "${IFACE}_rx.max" $((SPEED / 8 * 1000000))
|
|
echo "${IFACE}_tx.max" $((SPEED / 8 * 1000000))
|
|
echo "${IFACE}_rx.info Received traffic on the $IFACE interface. Maximum speed is ${SPEED} Mbps."
|
|
echo "${IFACE}_tx.info Transmitted traffic on the $IFACE interface. Maximum speed ${SPEED} Mbps."
|
|
fi
|
|
exit 0
|
|
fi
|
|
|
|
# Autorun logic
|
|
running=true
|
|
if [ ! -e ${cache} ]
|
|
then
|
|
# no cache file
|
|
running=false
|
|
elif [ ! -s ${cache} ]
|
|
then
|
|
# empty cache file
|
|
if [ -s ${pidfile} ]
|
|
then
|
|
# kill -0 will return success if this user is allowed to send
|
|
# a signal to the process. This means the PID exists and
|
|
# belongs to the plugin user, which should have few false
|
|
# positives.
|
|
if ! kill -0 $(cat ${pidfile})
|
|
then
|
|
running=false
|
|
fi
|
|
else
|
|
running=false
|
|
fi
|
|
fi
|
|
if ! $running
|
|
then
|
|
$0 acquire &
|
|
# wait a little so we have some data to report
|
|
sleep 3
|
|
fi
|
|
|
|
# Finally: Print collected values, truncate to mark spot.
|
|
cat ${cache}
|
|
> ${cache}
|
|
|
|
exit 0
|