148 lines
4.5 KiB
Python
Executable file
148 lines
4.5 KiB
Python
Executable file
#!/usr/bin/env python
|
|
# -!- encoding: utf-8 -!-
|
|
# Correspondance hôte <-> plugin munin custom
|
|
#
|
|
# Copyright © 2009 Nicolas Dandrimont <Nicolas.Dandrimont@crans.org>
|
|
#
|
|
# Licence: MIT
|
|
|
|
import sys as _sys
|
|
_sys.path.append("/usr/scripts/gestion")
|
|
del _sys
|
|
|
|
import annuaires
|
|
import config
|
|
|
|
__all__ = ["hosts_plugins", "munin_fw", "cron_plugins", "hosts_crons"]
|
|
|
|
# Lignes cron correspondant aux plugins customs
|
|
cron_plugins = {
|
|
# plugin: (utilisateur, commande),
|
|
# %s est remplacé par le lien dans /etc/munin/plugins
|
|
"audimat": ("root", "nice -n 14 %s generate 2> /dev/null"),
|
|
"batiments": ("root", "nice -n 14 %s fichier 2> /dev/null"),
|
|
"stats-ip_": ("root", "nice -n 14 %s fichier 2> /dev/null"),
|
|
"stats-ip": ("root", "nice -n 14 %s fichier 2> /dev/null"),
|
|
"wiki_pages": ("www-data", "%s fichier 2> /dev/null"),
|
|
}
|
|
|
|
# Hôtes pour lesquels le firewall est muninisé
|
|
munin_fw = sorted(["zamok", "rouge", "komaz", "sable"])
|
|
|
|
hosts_plugins = {
|
|
"zamok": {
|
|
"laserjet_car": "laserjet_",
|
|
"laserjet_car-p": "laserjet_",
|
|
"laserjet__etat": "laserjet__etat",
|
|
"laserjet_kit": "laserjet_",
|
|
"laserjet__pages": "laserjet__pages",
|
|
"laserjet_stock-papier": "laserjet_",
|
|
"laserjet_stock-papier-p": "laserjet_",
|
|
"laserjet_tam": "laserjet_",
|
|
"laserjet_tam-p": "laserjet_",
|
|
"webalizer_intranet": "webalizer_",
|
|
"webalizer_perso": "webalizer_",
|
|
"who": "who",
|
|
},
|
|
"vert": {
|
|
"slapd_bdb_cache_pages": "slapd_bdb_cache_",
|
|
"slapd_bdb_cache_percent": "slapd_bdb_cache_",
|
|
},
|
|
"rouge": {
|
|
"amavis": "amavis",
|
|
"machines": "machines",
|
|
# "webalizer_dixans": "webalizer_",
|
|
# "webalizer_install-party": "webalizer_",
|
|
# "webalizer_news": "webalizer_",
|
|
# "webalizer_trophee": "webalizer_",
|
|
# "webalizer_webmail": "webalizer_",
|
|
# "webalizer_wiki": "webalizer_",
|
|
# "webalizer_www": "webalizer_",
|
|
},
|
|
"komaz": {
|
|
"machines": "machines",
|
|
},
|
|
"sable": {
|
|
"blacklist": "blacklist",
|
|
},
|
|
"xmpp": {
|
|
"jabber": "jabber",
|
|
},
|
|
"niomniom": {
|
|
"wiki_pages": "wiki_pages",
|
|
"wiki_themes": "wiki_themes",
|
|
"wiki_users": "wiki_users",
|
|
},
|
|
"munin": {
|
|
"audimat": "audimat",
|
|
"batiments": "batiments",
|
|
"munin": "munin",
|
|
"ping_multiprise.adm": "ping_",
|
|
"stats-ip": "stats-ip",
|
|
# La suite plus bas...
|
|
},
|
|
"news": {
|
|
"innd_total": "innd_total",
|
|
"innd_last": "innd_last",
|
|
"innd_connects": "innd_connects",
|
|
}
|
|
}
|
|
|
|
####
|
|
# Trucs spécifiques à munin.crans.org
|
|
# Onduleur
|
|
for mge_truc in ["batt", "hygro", "intensite", "temp", "temps", "tension"]:
|
|
hosts_plugins["munin"]["mge_%s" % mge_truc] = "mge_%s" % mge_truc
|
|
|
|
# Stats d'utilisation des réseaux
|
|
for net in config.NETs:
|
|
hosts_plugins["munin"]["stats-ip_%s" % net] = "stats-ip_"
|
|
|
|
# Stats de peuplement des bâtiments
|
|
for bat in annuaires.chbre_prises:
|
|
if bat not in ('v',):
|
|
hosts_plugins["munin"]["stats-batiment_%s" % bat] = "stats-batiment_"
|
|
|
|
# Ping de tous les switches de bâtiments
|
|
for switch in annuaires.all_switchs():
|
|
# Suppression du .adm.crans.org
|
|
switch = switch[:switch.index('.')]
|
|
switch = switch.replace('-', '_')
|
|
hosts_plugins["munin"]["ping_%s.adm" % switch] = "ping_bat_"
|
|
|
|
# On rajoute les stats de connexion
|
|
for host in hosts_plugins.keys():
|
|
hosts_plugins[host].update({"sockets": "sockets"})
|
|
|
|
#########
|
|
# Muninisation des firewalls
|
|
#
|
|
for host in munin_fw:
|
|
hosts_plugins[host].update({
|
|
"iptables_filter": "iptables_",
|
|
"iptables_mangle": "iptables_",
|
|
"iptables_nat": "iptables_",
|
|
})
|
|
|
|
# format de la ligne cron
|
|
CRON_FORMAT = "%s-%s/%s * * * * %s %s"
|
|
# fréquence
|
|
FREQ = 15
|
|
# lignes cron par hôte
|
|
hosts_crons = {}
|
|
for host, plugins in hosts_plugins.items():
|
|
minute = 1
|
|
hosts_crons[host] = []
|
|
for path, plugin in plugins.items():
|
|
if plugin in cron_plugins:
|
|
path = "/etc/munin/plugins/" + path
|
|
user, line = cron_plugins[plugin]
|
|
hosts_crons[host].append(CRON_FORMAT % (minute,
|
|
60 - FREQ + minute,
|
|
FREQ,
|
|
user,
|
|
line % path))
|
|
minute = (minute + 4) % FREQ
|
|
|
|
if not hosts_crons[host]:
|
|
del hosts_crons[host]
|