#!/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