scripts/wiki/macro/MuninStatus.py
Antoine Durand-Gasselin cd037bbbe9 [wiki] wiki-lenny -> wiki
darcs-hash:20090427173001-bd074-51c7f6aea2843640e34adc0921b478f40ea98609.gz
2009-04-27 19:30:01 +02:00

86 lines
2.3 KiB
Python

#!/usr/bin/env python2.5
# -*- encoding: utf-8 -*-
#
# MuninStatus.py: récupère la page munin et la filtre pour ne garder que les liens intéressants
#
# Copyright (c) 2009, Nicolas Dandrimont <Nicolas.Dandrimont@crans.org>
#
# This file is released under the GNU General Public License version 2
#
import sys
import urllib
try:
import BeautifulSoup
except ImportError:
print "munin.py nécessite BeautifulSoup (paquet python-beautifulsoup)"
sys.exit(2)
URL = "http://munin.crans.org/"
ENCODING = "utf-8"
ATTRS = {
'class': ('crit', 'warn'),
}
def to_unicode(input, encodings=None):
if not encodings:
encodings = ['utf-8', 'iso-8859-15']
for encoding in encodings:
try:
return input.decode(encoding)
except UnicodeDecodeError:
pass
return input.decode(encodings[-1], 'ignore')
def family(nodes):
parents = sum((node.findParents() for node in nodes), [])
children = sum((node.findChildren() for node in nodes), [])
return nodes + parents + children
def keep_item_headings(headings, items, level = 1):
kept = []
def level_up(heading):
parent = heading
for _ in range(level):
parent = parent.parent
return parent
for heading in headings:
parent = level_up(heading)
found_parent = False
for parents in [item.findParents() for item in items]:
if parent in parents:
found_parent = True
break
if found_parent:
kept.append(heading)
return kept
def execute(macro, _):
munin = BeautifulSoup.BeautifulSoup(urllib.urlopen(URL).read(), fromEncoding = ENCODING)
warning_items = munin.findAll(attrs=ATTRS)
warning_hosts = keep_item_headings(munin.findAll(attrs = "host"), warning_items)
warning_domains = keep_item_headings(munin.findAll(attrs = "domain"), warning_items)
keep = family(warning_items + warning_hosts + warning_domains)
for item in munin.findChildren():
if item not in keep:
item.extract()
for tag in munin.findAll(href=True):
tag["href"] = u'http://munin.crans.org/' + tag["href"]
if munin.html and munin.html.body:
return to_unicode(munin.html.body.prettify())
else:
return u"Munin n'a rien à dire."