Nouvelles fonctions en SNMP et rorganisation.

Reconfig du nom et de la vitesse de la prise  chaque modif

darcs-hash:20041005180155-41617-d239b055447ae482936453a8fb2ee4c8710e9d26.gz
This commit is contained in:
pauget 2004-10-05 20:01:55 +02:00
parent 4711222cb7
commit 1d04848382
2 changed files with 49 additions and 32 deletions

View file

@ -394,13 +394,35 @@ class hpswitch :
if self.__debug : self.__logDest.write("HP DEBUG : disable(prise=%s)\n" % prise) if self.__debug : self.__logDest.write("HP DEBUG : disable(prise=%s)\n" % prise)
return self.set('IF-MIB::ifAdminStatus.%i' % prise, 'i', 2) return self.set('IF-MIB::ifAdminStatus.%i' % prise, 'i', 2)
def eth_mode(self,mode,prise=0) : def is_enable(self,prise=0) :
""" Fixe le mode d'une prise if not prise : prise = self.prise
return self.get('IF-MIB::ifAdminStatus.%i' % prise) == 'up'
def is_up(self,prise=0) :
if not prise : prise = self.prise
return self.get('IF-MIB::ifOperStatus.%i' % prise) == 'up'
def nom(self,nom=None,prise=0) :
""" Retourne ou attribue le nom à la prise fournie """
if not prise : prise = self.prise
oid = 'IF-MIB::ifAlias.%s' % prise
if nom==None :
return self.get(oid)
else :
self.set(oid, 's' , nom)
def eth_mode(self,mode=None,prise=0) :
""" Fixe ou retourne le mode d'une prise
mode est un tuple : (vitesse, duplex) ou simplement "auto" mode est un tuple : (vitesse, duplex) ou simplement "auto"
vitesse est : 10 100 ou 1000 vitesse est : 10 100 ou 1000
duplex est FD, HD ou auto duplex est FD, HD ou auto
""" """
if not prise : prise = self.prise if not prise : prise = self.prise
oid = 'CONFIG-MIB::hpSwitchPortFastEtherMode.%s' % prise
if mode == None :
return self.get(oid)
# Conversion du mode # Conversion du mode
if mode == 'auto' : if mode == 'auto' :
code = 5 code = 5
@ -412,33 +434,13 @@ class hpswitch :
if code == 8 : code += 1 if code == 8 : code += 1
elif code == 2 : raise ValueError('Mode invelide %s' % mode) elif code == 2 : raise ValueError('Mode invelide %s' % mode)
else: code += 1 else: code += 1
self.set('CONFIG-MIB::hpSwitchPortFastEtherMode.%s' % prise,'i',code)
def status(self,prise=0) :
""" Retourne un dictionnaire décrivant la prise donnée
les clefs sont : activé, etat, vitesse, vitesse_max, nom
"""
if not prise : prise = self.prise
if self.__debug : self.__logDest.write("HP DEBUG : status(prise=%s)\n" % prise)
r={}
# Activée ?
r['activée'] = self.get('IF-MIB::ifAdminStatus.%i' % prise)
# Etat actuel ?
r['etat'] = self.get('IF-MIB::ifOperStatus.%i' % prise)
# Vitesse
v = self.get('IF-MIB::ifSpeed.%i' % prise)
r['vitesse'] = '%iMbps' % ( int(v)/1000000 )
# Vitesse maximum
r['vitesse_max'] = '%iMbps' % int(self.get('IF-MIB::ifHighSpeed.%i' % prise))
# Nom
r['nom'] = self.get('IF-MIB::ifAlias.%i' % prise)
return r
self.set(oid,'i',code)
class sw_chbre(hpswitch) : class sw_chbre(hpswitch) :
def __init__(self,chbre) : def __init__(self,chbre) :
# On retrouve la chbre dans l'annuaire # On retrouve la chbre dans l'annuaire
self.chbre = chbre
try : try :
bat = chbre[0].lower() bat = chbre[0].lower()
prise = chbre_prises[bat][chbre[1:]] prise = chbre_prises[bat][chbre[1:]]
@ -450,10 +452,26 @@ class sw_chbre(hpswitch) :
if prise[-1] == '-' : if prise[-1] == '-' :
#Prise en 10 #Prise en 10
self.prise = int(prise[1:-1]) self.prise = int(prise[1:-1])
self.prise10Mb = True
else : else :
self.prise = int(prise[1:]) self.prise = int(prise[1:])
self.prise10Mb = False
except : except :
raise ValueError('Chambre %s inconnue' % chbre) raise ValueError('Chambre %s inconnue' % chbre)
# Config snmp # Config snmp
self.get, self.set, self.walk = config_snmp_secrete(snmp,self.switch) self.get, self.set, self.walk = config_snmp_secrete(snmp,self.switch)
def reconfigure(self) :
""" Reconfigure la prise (nom et vitesse) """
in10 = self.eth_mode().find('10Mbits') != 1
if self.prise10Mb and not in10 :
self.eth_mode(('10','auto'))
elif not self.prise10Mb and in10 :
self.eth_mode('auto')
nom = 'Chambre_%s' % self.chbre.capitalize()
if nom != self.nom() :
self.nom(nom)

View file

@ -579,18 +579,17 @@ def prise_etat(chbre) :
f = '' f = ''
try : try :
# On met aussi l'état # On met aussi l'état
conn = sw_chbre(chbre) prise = sw_chbre(chbre)
f += 'prise %s' % conn.prise_brute f += 'prise %s' % prise.prise_brute
result = conn.status()
rows, cols = get_screen_size() rows, cols = get_screen_size()
if result['etat']=='up' : if prise.is_up() :
f += ', ' + coul('machine branchée','vert') f += ', ' + coul('machine branchée','vert')
reste_cols = cols - 45 reste_cols = cols - 45
if result['vitesse_max'] == '10Mbps' : if prise.eth_mode().find('10Mbits')!=-1 :
f+= ', ' + coul('prise en 10Mbps','jaune') f+= ', ' + coul('prise en 10Mbps','jaune')
reste_cols -= 17 reste_cols -= 17
f+=', ' f+=', '
macs = conn.show_prise_mac() macs = prise.show_prise_mac()
if len(macs) == 0: if len(macs) == 0:
if reste_cols < 20 : if reste_cols < 20 :
# Faut aller à la ligne # Faut aller à la ligne
@ -614,7 +613,7 @@ def prise_etat(chbre) :
f += ', ' f += ', '
f += "%s" % macs.pop() f += "%s" % macs.pop()
count += 1 count += 1
elif result['activée'] == 'down' : elif not prise.is_enable() :
f+= ', ' + coul('prise désactivée','rouge') f+= ', ' + coul('prise désactivée','rouge')
else : else :
f+= ', activée, lien non détecté' f+= ', activée, lien non détecté'