fritzbox-munin/fritzbox_traffic.py

88 lines
3.1 KiB
Python
Raw Normal View History

2015-06-02 23:39:33 +02:00
#!/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
"""
2016-05-17 01:38:54 +02:00
import os
2015-06-05 00:59:24 +02:00
import sys
2015-06-02 23:39:33 +02:00
from fritzconnection import FritzConnection
2015-06-05 00:59:24 +02:00
2015-06-02 23:39:33 +02:00
def print_values():
try:
2016-05-17 01:30:57 +02:00
conn = FritzConnection(address=os.environ['fritzbox_ip'])
2015-06-02 23:39:33 +02:00
except Exception as e:
sys.exit("Couldn't get WAN traffic")
2015-06-05 00:59:24 +02:00
2015-06-05 01:07:00 +02:00
down_traffic = conn.call_action('WANCommonInterfaceConfig', 'GetTotalBytesReceived')['NewTotalBytesReceived']
2015-06-02 23:39:33 +02:00
print ('down.value %d' % down_traffic)
2015-06-05 00:59:24 +02:00
2015-06-05 01:07:00 +02:00
up_traffic = conn.call_action('WANCommonInterfaceConfig', 'GetTotalBytesSent')['NewTotalBytesSent']
2015-06-02 23:39:33 +02:00
print ('up.value %d' % up_traffic)
2015-06-05 00:59:24 +02:00
if not os.environ.get('traffic_remove_max'):
max_down_traffic = conn.call_action('WANCommonInterfaceConfig', 'GetCommonLinkProperties')[
'NewLayer1DownstreamMaxBitRate']
print ('maxdown.value %d' % max_down_traffic)
2015-06-05 00:59:24 +02:00
max_up_traffic = conn.call_action('WANCommonInterfaceConfig', 'GetCommonLinkProperties')[
'NewLayer1UpstreamMaxBitRate']
print ('maxup.value %d' % max_up_traffic)
2015-06-05 00:59:24 +02:00
2015-06-02 23:39:33 +02:00
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."
if not os.environ.get('traffic_remove_max'):
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 os.environ.get('host_name'):
print "host_name " + os.environ['host_name']
2015-06-02 23:39:33 +02:00
2015-06-05 00:59:24 +02:00
2015-06-02 23:39:33 +02:00
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':
2015-06-05 00:59:24 +02:00
print "yes" # Some docs say it'll be called with fetch, some say no arg at all
2015-06-02 23:39:33 +02:00
elif len(sys.argv) == 1 or (len(sys.argv) == 2 and sys.argv[1] == 'fetch'):
try:
print_values()
except:
2015-06-05 00:59:24 +02:00
sys.exit("Couldn't retrieve fritzbox traffic")