scripts/gestion/tools/whokfet.py
2013-05-07 21:02:32 +02:00

96 lines
3.2 KiB
Python
Executable file

#! /usr/bin/env python
# -*- coding: utf-8 -*-
'''Ce script permet de savoir s'il y a du monde à la kfet, filtre par membres actifs.'''
import sys
from socket import gethostname
if gethostname() != "zamok":
print "Merci d'executer ce script sur zamok."
sys.exit(1)
sys.path.append('/usr/scripts/gestion')
from ldap_crans import crans_ldap
from hptools import hpswitch, ConversationError
from affich_tools import coul, cprint
from whos import aff
from os import system
import xml.dom.minidom
def get_wifi_connected_client(host):
u""" Renvoie la liste des clients, pour une borne wifi donnée.
N'est plus vraiment utilisée car les bornes sont de toutes façon
connectées au switch (backbone en fait)"""
f = open('/usr/scripts/var/wifi_xml/%s.xml' % host,'r')
doc = xml.dom.minidom.parse(f)
f.close()
return [ mac.firstChild.nodeValue for mac in doc.getElementsByTagName('mac') ]
STATE_DESCR = {
'ma': ('machines de membres actifs', 0x00ff00),
'crans': ('machines du crans', 0x0000ff),
'adh': ('autres machines appartenant aux autres adhérents', 0xe5ff00),
'unknown_macs': ('machines inconnues de la base', 0xff0000),
}
def get_state():
sw = hpswitch('backbone.adm.crans.org')
db = crans_ldap()
res = {'ma': [],
'crans': [],
'adh': [],
'unknown_macs': [],
'ttyfound': 0,
}
try:
macs = sw.show_prise_mac(21) #Devine quoi, c'est la prise de la kfet
except ConversationError:
cprint("Impossible de communiquer avec le switch !", 'rouge')
return
if macs:
for mac in macs:
fm = db.search("mac=%s" % mac)
if fm['machine']:
m = fm['machine'][0]
if fm['machineCrans']:
key = 'crans'
elif hasattr(m.proprietaire(),'droits') and m.proprietaire().droits():
key = 'ma'
else:
key = 'adh'
res[key].append(m)
else:
res['unknown_macs'].append(mac)
return res
def summary(current):
u"""Réalise un joli aperçu de l'état donné en paramètre."""
if current['ma']:
cprint('---=== Machines des membres actifs ===---', 'bleu')
aff(current['ma'])
cprint("---=== Il y a du monde à la Kfet ! ===---", 'vert')
else:
cprint("---=== Il semble n'y avoir personne à la Kfet ... ===---", 'rouge')
for mac in current['unknown_macs']:
cprint("Machine inconnue: %s" % mac, 'rouge')
def munin_config():
"""Donne la configuration du graphe munin"""
print """graph_title Membres actifs à la kfet
graph_vlabel N
graph_category environnement"""
for (name,(descr,color)) in STATE_DESCR.iteritems():
print """%(name)s.label %(descr)s
%(name)s AREASTACK
%(name)s.colour %(color)06X""" % {'name': name, 'descr': descr, 'color': color}
# Dans le doute, n'affichons pas les adhérents
print "adh.graph no"
def munin(current):
"""S'occupe de l'affichage pour munin. TODO: l'écrire."""
for name in STATE_DESCR.iterkeys():
print """%(name)s.value %(value)s""" % {'name': name, 'value': len(current[name])}
if __name__ == '__main__':
state = get_state()
summary(state)