#!/usr/bin/env python # -!- encoding: utf-8 -!- # Correspondance hôte <-> plugin munin custom # # Copyright © 2009 Nicolas Dandrimont # # 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]