From 5b0aad0638c8702ba386fc1c25ff838868454e3d Mon Sep 17 00:00:00 2001 From: Olivier Mehani Date: Tue, 12 Jul 2016 15:35:16 +1000 Subject: [PATCH] [plugins/upnpc_] Add upnpc-based router monitoring plugin Signed-off-by: Olivier Mehani --- plugins/upnpc/upnpc_ | 149 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100755 plugins/upnpc/upnpc_ diff --git a/plugins/upnpc/upnpc_ b/plugins/upnpc/upnpc_ new file mode 100755 index 00000000..d45a7ebf --- /dev/null +++ b/plugins/upnpc/upnpc_ @@ -0,0 +1,149 @@ +#!/bin/sh +# -*- sh -*- + +: << =cut + +=head1 NAME + +upnpc_ - Plugin to monitor routers via UPnP + +=head1 APPLICABLE SYSTEMS + +Linux systems with upnpc installed. + +=head1 CONFIGURATION + +None needed. + +=head1 AUTHOR + +Olivier Mehani + +=head1 LICENSE + +GPLv2 + +=head1 MAGIC MARKERS + + #%# family=auto + #%# capabilities=autoconf suggest + +=cut + +autoconf() { + which upnpc >/dev/null && upnpc -s >/dev/null 2>&1 && echo yes || echo "no (No upnpc or no UPnP router)" +} + +suggest () { + upnpc -s | sed -n " \ + s/.*uptime=.*/uptime/p; \ + s/.*MaxBitRate.*/bitrate/p; \ + s/.*Bytes.*/traffic/p; \ + s/.*Packets.*/pkts/p; \ + " +} + +config () { + case $1 in + "uptime") + cat << EOF +graph_title Uplink connection uptime +graph_args -l 0 +graph_category network +graph_scale no +graph_vlabel uptime in hours +uptime.label uptime +uptime.draw AREA +uptime.cdef uptime,3600,/ +EOF + ;; + "bitrate") + cat << EOF +graph_title Uplink bitrate +graph_args --base 1000 -l 0 +graph_category network +graph_vlabel bitrate down (-) / up (+) +down.label bps +down.warning 4194304: +down.critical 1048576: +up.label bps +up.warning 524288: +up.critical 131072: +down.graph no +up.negative down +EOF + ;; + "traffic") + cat << EOF +graph_title Uplink traffic +graph_args --base 1024 -l 0 +graph_category network +graph_vlabel bytes in (-) / out (+) per ${graph_period} +down.label Bps +down.type DERIVE +down.min 0 +up.label Bps +up.type DERIVE +up.min 0 +down.graph no +up.negative down +EOF + ;; + "pkts") + cat << EOF +graph_title Uplink packets +graph_args --base 1000 -l 0 +graph_category network +graph_vlabel packets in (-) / out (+) per ${graph_period} +down.label pps +down.type DERIVE +down.min 0 +up.label pps +up.type DERIVE +up.min 0 +down.graph no +up.negative down +EOF + ;; + "*") + echo "$0: unknown mode '$1'" >&2 + exit 1 + esac +} + +fetch () { + case $1 in + "uptime") + upnpc -s | sed -n "s/.*uptime=\([0-9]\+\)s.*/uptime.value \1/p" + ;; + "bitrate") + upnpc -s | sed -n "s/^MaxBitRateDown : \([0-9]\+\) bps.*MaxBitRateUp \([0-9]\+\) bps.*/down.value \1\nup.value \2/p" + ;; + "traffic") + upnpc -s | sed -n "s/^Bytes:\s*Sent:\s*\([0-9]\+\).*Recv:\s*\([0-9]\+\).*/up.value \1\ndown.value \2/p" + ;; + "pkts") + upnpc -s | sed -n "s/^Packets:\s*Sent:\s*\([0-9]\+\).*Recv:\s*\([0-9]\+\).*/up.value \1\ndown.value \2/p" + ;; + "*") + echo "$0: unknown mode '$1'" >&2 + exit 1 + esac +} + +mode=`echo $0 | sed 's/.*_//'` + +case $1 in + "autoconf") + autoconf + ;; + "suggest") + suggest + ;; + "config") + config $mode + ;; + *) + fetch $mode + ;; +esac