diff --git a/gestion/hptools.py b/gestion/hptools.py index d23a8daa..098b2e6e 100644 --- a/gestion/hptools.py +++ b/gestion/hptools.py @@ -394,13 +394,35 @@ class hpswitch : if self.__debug : self.__logDest.write("HP DEBUG : disable(prise=%s)\n" % prise) return self.set('IF-MIB::ifAdminStatus.%i' % prise, 'i', 2) - def eth_mode(self,mode,prise=0) : - """ Fixe le mode d'une prise + def is_enable(self,prise=0) : + 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" vitesse est : 10 100 ou 1000 duplex est FD, HD ou auto """ if not prise : prise = self.prise + oid = 'CONFIG-MIB::hpSwitchPortFastEtherMode.%s' % prise + + if mode == None : + return self.get(oid) + # Conversion du mode if mode == 'auto' : code = 5 @@ -412,33 +434,13 @@ class hpswitch : if code == 8 : code += 1 elif code == 2 : raise ValueError('Mode invelide %s' % mode) 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) : def __init__(self,chbre) : # On retrouve la chbre dans l'annuaire + self.chbre = chbre try : bat = chbre[0].lower() prise = chbre_prises[bat][chbre[1:]] @@ -450,10 +452,26 @@ class sw_chbre(hpswitch) : if prise[-1] == '-' : #Prise en 10 self.prise = int(prise[1:-1]) + self.prise10Mb = True else : self.prise = int(prise[1:]) + self.prise10Mb = False except : raise ValueError('Chambre %s inconnue' % chbre) # Config snmp 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) diff --git a/gestion/whos.py b/gestion/whos.py index 85b9b700..698815ae 100755 --- a/gestion/whos.py +++ b/gestion/whos.py @@ -579,18 +579,17 @@ def prise_etat(chbre) : f = '' try : # On met aussi l'état - conn = sw_chbre(chbre) - f += 'prise %s' % conn.prise_brute - result = conn.status() + prise = sw_chbre(chbre) + f += 'prise %s' % prise.prise_brute rows, cols = get_screen_size() - if result['etat']=='up' : + if prise.is_up() : f += ', ' + coul('machine branchée','vert') reste_cols = cols - 45 - if result['vitesse_max'] == '10Mbps' : + if prise.eth_mode().find('10Mbits')!=-1 : f+= ', ' + coul('prise en 10Mbps','jaune') reste_cols -= 17 f+=', ' - macs = conn.show_prise_mac() + macs = prise.show_prise_mac() if len(macs) == 0: if reste_cols < 20 : # Faut aller à la ligne @@ -614,7 +613,7 @@ def prise_etat(chbre) : f += ', ' f += "%s" % macs.pop() count += 1 - elif result['activée'] == 'down' : + elif not prise.is_enable() : f+= ', ' + coul('prise désactivée','rouge') else : f+= ', activée, lien non détecté'