72 lines
2.4 KiB
Python
Executable file
72 lines
2.4 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') ]
|
|
|
|
def get_state():
|
|
sw = hpswitch('backbone.adm.crans.org')
|
|
db = crans_ldap()
|
|
res = {'machines': [],
|
|
'machines_crans': [],
|
|
'unknown': [],
|
|
'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 not fm['machineCrans'] and hasattr(m.proprietaire(),'droits') and m.proprietaire().droits():
|
|
# On filtre ceux qui ont des droits et qui sont pas des machines crans
|
|
res['machines'].append(m)
|
|
else:
|
|
res['unknown'].append(mac)
|
|
return res
|
|
|
|
def summary(current):
|
|
u"""Réalise un joli aperçu de l'état donné en paramètre."""
|
|
if current['machines']:
|
|
cprint('---=== Machines des membres actifs ===---', 'bleu')
|
|
aff(current['machines'])
|
|
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']:
|
|
cprint("Machine inconnue: %s" % mac, 'rouge')
|
|
|
|
def munin(current):
|
|
"""S'occupe de l'affichage pour munin. TODO: l'écrire."""
|
|
pass
|
|
|
|
if __name__ == '__main__':
|
|
state = get_state()
|
|
summary(state)
|