From 8678dd9a712b358a4db5e278e2cf64269d8900f3 Mon Sep 17 00:00:00 2001 From: Christian Stade-Schuldt Date: Tue, 2 Jun 2015 23:39:33 +0200 Subject: [PATCH] add fritzbox wan traffic plugin --- fritzbox_traffic.py | 76 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100755 fritzbox_traffic.py diff --git a/fritzbox_traffic.py b/fritzbox_traffic.py new file mode 100755 index 0000000..411c537 --- /dev/null +++ b/fritzbox_traffic.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python +""" + fritzbox_traffic - A munin plugin for Linux to monitor AVM Fritzbox WAN traffic + Copyright (C) 2015 Christian Stade-Schuldt + Author: Christian Stade-Schuldt + Like Munin, this plugin is licensed under the GNU GPL v2 license + http://www.opensource.org/licenses/GPL-2.0 + Like Munin, this plugin is licensed under the GNU GPL v2 license + http://www.opensource.org/licenses/GPL-2.0 + This plugin requires the fritzconnection plugin. To install it using pip: + pip install fritzconnection + This plugin supports the following munin configuration parameters: + #%# family=auto contrib + #%# capabilities=autoconf +""" + +import sys, os +from fritzconnection import FritzConnection + +def print_values(): + try: + connection = FritzConnection() + except Exception as e: + sys.exit("Couldn't get WAN traffic") + + down_traffic = connection.call_action('WANCommonInterfaceConfig', 'GetTotalBytesReceived')['NewTotalBytesReceived'] + print ('down.value %d' % down_traffic) + + up_traffic = connection.call_action('WANCommonInterfaceConfig', 'GetTotalBytesSent')['NewTotalBytesSent'] + print ('up.value %d' % up_traffic) + + max_down_traffic = connection.call_action('WANCommonInterfaceConfig', 'GetCommonLinkProperties')['NewLayer1DownstreamMaxBitRate'] + print ('maxdown.value %d' % max_down_traffic) + + max_up_traffic = connection.call_action('WANCommonInterfaceConfig', 'GetCommonLinkProperties')['NewLayer1UpstreamMaxBitRate'] + print ('maxup.value %d' % max_up_traffic) + +def print_config(): + print "graph_title AVM Fritz!Box WAN traffic" + print "graph_args --base 1000" + print "graph_vlabel bits in (-) / out (+) per \${graph_period}" + print "graph_category network" + print "graph_order down up maxdown maxup" + print "down.label received" + print "down.type DERIVE" + print "down.graph no" + print "down.cdef down,8,*" + print "down.min 0" + print "down.max 1000000000" + print "up.label bps" + print "up.type DERIVE" + print "up.draw AREA" + print "up.cdef up,8,*" + print "up.min 0" + print "up.max 1000000000" + print "up.negative down" + print "up.info Traffic of the WAN interface." + print "maxdown.label received" + print "maxdown.type GAUGE" + print "maxdown.graph no" + print "maxup.label MAX" + print "maxup.type GAUGE" + print "maxup.negative maxdown" + print "maxup.draw LINE1" + print "maxup.info Maximum speed of the WAN interface." + +if __name__ == "__main__": + if len(sys.argv) == 2 and sys.argv[1] == 'config': + print_config() + elif len(sys.argv) == 2 and sys.argv[1] == 'autoconf': + print "yes" # Some docs say it'll be called with fetch, some say no arg at all + elif len(sys.argv) == 1 or (len(sys.argv) == 2 and sys.argv[1] == 'fetch'): + try: + print_values() + except: + sys.exit("Couldn't retrieve fritzbox traffic") \ No newline at end of file