munin-contrib/plugins/i2p/i2p_

79 lines
2.5 KiB
Python
Executable File

#!/usr/bin/env python
# Version 0.1 alpha (a.k.a. it has been known to work at least once)
# Get stats from your i2p server ( https://geti2p.net/en/ )
# Create links to this plugin and name them
# - i2p_bps
# - i2p_uptime (not implemented yet)
# Requires BeautifulSoup 4
# Should probably use I2PControl for this instead
# https://geti2p.net/en/docs/api/i2pcontrol
import urllib2, re, os, sys
from bs4 import BeautifulSoup
from decimal import *
plugin_name=list(os.path.split(sys.argv[0]))[1]
plugin_var=plugin_name.split('_', 1)[-1]
def autoconf():
print('yes')
sys.exit(0)
def config():
if 'bps' == plugin_var:
print('graph_title i2p bps')
print('graph_vlabel bps')
print('graph_info i2p sending and receiving bytes per second')
print('graph_category network')
print('receivebps.label Receive bps')
print('sendbps.label Send bps')
elif 'uptime' == plugin_var:
print('graph_title i2p uptime')
print('graph_scale no')
print('graph_args --base 1000 -l 0')
print('graph_vlabel uptime in whole hours')
print('graph_category network')
print('uptime.label i2p uptime')
print('uptime.draw AREA')
else:
raise ValueError, "unknown parameter '%s'" % plugin_var
sys.exit(0)
def fetch():
html_doc = urllib2.urlopen('http://127.0.0.1:7657/stats').read()
soup = BeautifulSoup(html_doc)
if 'bps' == plugin_var:
fetch_bps(soup)
elif 'uptime' == plugin_var:
fetch_uptime(soup)
else:
raise ValueError, "unknown parameter '%s'" % plugin_var
def fetch_bps(soup):
anchor_bwreceiveBps = soup.find('a', attrs={"name": "bw.receiveBps"})
b_5min_bwreceiveBps = anchor_bwreceiveBps.find_all_next('b', limit=2)[1]
bwreceiveBps = Decimal(re.search('Average: ([0-9,\.]+?);', b_5min_bwreceiveBps.parent.get_text()).group(1).replace(',', ''))
anchor_bwsendBps = soup.find('a', attrs={"name": "bw.sendBps"})
b_5min_bwsendBps = anchor_bwsendBps.find_all_next('b', limit=2)[1]
bwsendBps = Decimal(re.search('Average: ([0-9,\.]+?);', b_5min_bwsendBps.parent.get_text()).group(1).replace(',', ''))
print('receivebps.value %s' % bwreceiveBps)
print('sendbps.value %s' % bwsendBps)
sys.exit(0)
def fetch_uptime(soup):
# not implemented yet
print('uptime.value U')
sys.exit(0)
if __name__ == '__main__':
if len(sys.argv)>1 :
if sys.argv[1]=="config" :
config()
elif sys.argv[1]=="autoconf" :
autoconf()
elif sys.argv[1]!="":
raise ValueError, "unknown parameter '%s'" % sys.argv[1]
fetch()