Affiche le canal en cours d'une borne.

darcs-hash:20050714083430-d1718-4c6646af2ffda96590971adf916a9511864dc53a.gz
This commit is contained in:
bernat 2005-07-14 10:34:30 +02:00
parent 2675454696
commit 7d3fb9374d

View file

@ -443,14 +443,18 @@ def machine_details(machine) :
# Borne wifi # Borne wifi
if machine.puissance() : if machine.puissance() :
f += coul(u'Puissance : ','gras') + machine.puissance() f += coul(u'Puissance : ','gras') + u"%4.d" % int(machine.puissance())
f += coul(u'\tCanal : ', 'gras') + machine.canal() f += coul(u'\tCanaux : ', 'gras') + machine.canal()
f += coul(u'\tÉtat : ', 'gras') f += coul(u'\tÉtat : ', 'gras')
if borne_etat(machine.nom()): if borne_etat(machine.nom()):
f += coul(u'borne active', 'vert') f += coul(u'borne active', 'vert')
f += '\n' f += '\n'
# S'il y a des clients, on les liste # S'il y a des clients, on les liste
clients = borne_clients(machine.nom()) canal_clients = borne_clients_canal(machine.nom())
clients = canal_clients["mac-rssi"]
canal = canal_clients["canal"]
f += coul(u'\t Canal courant : ', 'gras') + u"%d" % canal
f += "\n"
if clients and base: if clients and base:
f += coul(u'Clients : \n','gras') f += coul(u'Clients : \n','gras')
for (client, rssi) in clients: for (client, rssi) in clients:
@ -643,27 +647,40 @@ def borne_etat(borne) :
except: except:
return False return False
def borne_clients(borne) : def borne_clients_canal(borne) :
"""Renvoie la liste des adresses MAC associées à la borne. """Renvoie la liste des adresses MAC associées à la borne ainsi que le canal.
Chaque adresse MAC est en fait contenue dans un couple comprenant Chaque adresse MAC est en fait contenue dans un couple comprenant
l'adresse MAC et le RSSI du client associé""" l'adresse MAC et le RSSI du client associé.
On en profite pour renvoyer également le canal en cours de la
borne. On fait cela dans la même fonction car cela évite de faire
deux connexions ssh (ce qui est fort coûteux).
Au final, on renvoie un dictionnaire
- mac-rssi: une liste de couples (MAC, RSSI)
- canal: le canal en cours
"""
macs = [] macs = []
canal = -1
# Uniquement possible pour les admins et si on a la clef # Uniquement possible pour les admins et si on a la clef
for clef in ["/etc/wifi/ssh/wifi","/usr/scripts/gestion/clef-wifi"]: for clef in ["/etc/wifi/ssh/wifi","/usr/scripts/gestion/clef-wifi"]:
if os.path.isfile(clef) and user_tests.isadm(): if os.path.isfile(clef) and user_tests.isadm():
try: try:
wl = popen2.Popen3("ssh -o StrictHostKeyChecking=no -i %s root@%s 'for mac in $(/usr/sbin/wl assoclist | cut -f 2 -d \" \"); do rssi=$(/usr/sbin/wl rssi $mac 2> /dev/null | cut -f 3 -d \" \") ; echo $mac $rssi ; done' 2> /dev/null" % (clef, borne)) wl = popen2.Popen3("ssh -o StrictHostKeyChecking=no -i %s root@%s 'for mac in $(/usr/sbin/wl assoclist | cut -f 2 -d \" \"); do rssi=$(/usr/sbin/wl rssi $mac 2> /dev/null | cut -f 3 -d \" \") ; echo $mac $rssi ; done ; echo -n \"CANAL \" ; /usr/sbin/wl channel | grep current' 2> /dev/null" % (clef, borne))
wl.tochild.close() wl.tochild.close()
for line in wl.fromchild.readlines(): for line in wl.fromchild.readlines():
# Chaque ligne est de la forme # Chaque ligne est de la forme
# 00:11:22:33:44:55 -20 # 00:11:22:33:44:55 -20
line = line.split(" ") line = line.strip().split()
macs.append((line[0].strip(), int(line[1].strip()))) if line[0] == "CANAL":
canal = int(line[-1])
else:
macs.append((line[0].strip(), int(line[1].strip())))
except: except:
pass pass
break # Pas la peine d'essayer une autre clef break # Pas la peine d'essayer une autre clef
return macs return {"canal": canal, "mac-rssi": macs}
def prise_etat(chbre) : def prise_etat(chbre) :
""" Retoune l'état de la prise associée à la chbre """ """ Retoune l'état de la prise associée à la chbre """