[statsVLANs.py] réorganisation et amélioration du comportement
Quelques petites modifications : * Réorganisation du script sous forme d'une fonction pour pouvoir utiliser la fonction de scan depuis un autre script * Affichage des prises avec des VLANs bizarres mais sans machine connectée * Gestion des erreurs de communication avec les switchs : Si un switch ne répond pas, hptools.py ne renvoie pas d'erreur à la connection mais rale à la première commande envoyée... darcs-hash:20090222202703-b8e4c-45ba54d74a93fdc05d13f2c6588eb8231d7355cb.gz
This commit is contained in:
parent
7c66054928
commit
3c7fcb3e63
1 changed files with 105 additions and 65 deletions
|
@ -21,20 +21,35 @@ from annuaires import chbre_prises
|
||||||
from affich_tools import *
|
from affich_tools import *
|
||||||
from ldap_crans import crans_ldap
|
from ldap_crans import crans_ldap
|
||||||
from ldap_crans import MachineCrans, MachineWifi, BorneWifi
|
from ldap_crans import MachineCrans, MachineWifi, BorneWifi
|
||||||
from hptools import hpswitch
|
from hptools import hpswitch, ConversationError
|
||||||
|
|
||||||
|
|
||||||
# nombre de prises possédant des VLANs ou pas
|
# Accès à la base ldap
|
||||||
prises_up = 0
|
db = crans_ldap()
|
||||||
prises_down = 0
|
|
||||||
|
def scan_bats(bats, annuaire=chbre_prises):
|
||||||
|
"""Fonction permettant de scanner un certain nombre de switchs
|
||||||
|
|
||||||
|
La fonction scanne les switchs enregistrés de annuaire.py se trouvant dans
|
||||||
|
les bâtiments contenus dans la liste bats.
|
||||||
|
|
||||||
|
La fonction utilise l'annuaire passé en argument au celui de annuaire.py
|
||||||
|
par défaut
|
||||||
|
|
||||||
|
La fonction renvoie un doublet (vlans_stats,data) :
|
||||||
|
* vlans_stats est un dictionnaire contenant les statistiques des VLANs
|
||||||
|
trouvés
|
||||||
|
* data contient les informations sur les machines se trouvant sur des
|
||||||
|
prises possédant d'autres VLANs que le VLAN 'adhérent'
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Initialistation des données :
|
||||||
# nombre de prises possédant chaque VLAN
|
# nombre de prises possédant chaque VLAN
|
||||||
vlans_stats = dict([('adherent',0)])
|
vlans_stats = dict([('adherent',0)])
|
||||||
# liste des résultats particuliers découverts pendant le scan
|
# liste des résultats particuliers découverts pendant le scan
|
||||||
data = []
|
data = []
|
||||||
|
|
||||||
# Accès à la base ldap
|
|
||||||
db = crans_ldap()
|
|
||||||
|
|
||||||
# On Commence par itérer sur chaque batiment :
|
# On Commence par itérer sur chaque batiment :
|
||||||
for bat in chbre_prises:
|
for bat in chbre_prises:
|
||||||
prises = dict()
|
prises = dict()
|
||||||
|
@ -42,6 +57,7 @@ for bat in chbre_prises:
|
||||||
prises[prise] = chbre
|
prises[prise] = chbre
|
||||||
|
|
||||||
current_switch = -1
|
current_switch = -1
|
||||||
|
switch_name = ' '
|
||||||
|
|
||||||
for prise in sorted(prises.keys()):
|
for prise in sorted(prises.keys()):
|
||||||
|
|
||||||
|
@ -59,10 +75,14 @@ for bat in chbre_prises:
|
||||||
print u"\tConnexion établie"
|
print u"\tConnexion établie"
|
||||||
|
|
||||||
# On récupère les VLANs présents sur la prise
|
# On récupère les VLANs présents sur la prise
|
||||||
|
try:
|
||||||
vlans = switch.vlans(prise)
|
vlans = switch.vlans(prise)
|
||||||
if vlans:
|
except ConversationError:
|
||||||
prises_up += 1
|
print u"\tErreur de communication avec " + switch_name
|
||||||
|
print u"\tAbandon du bâtiment..."
|
||||||
|
break
|
||||||
|
|
||||||
|
if vlans:
|
||||||
# Si la prise ne possède que le VLAN adherent, on ne va pas plus loin
|
# Si la prise ne possède que le VLAN adherent, on ne va pas plus loin
|
||||||
if len(vlans) == 1 and vlans[0] == u"adherent":
|
if len(vlans) == 1 and vlans[0] == u"adherent":
|
||||||
vlans_stats[vlans[0]] = vlans_stats[vlans[0]] + 1
|
vlans_stats[vlans[0]] = vlans_stats[vlans[0]] + 1
|
||||||
|
@ -72,8 +92,14 @@ for bat in chbre_prises:
|
||||||
if not (vlan in vlans_stats):
|
if not (vlan in vlans_stats):
|
||||||
vlans_stats[vlan] = 0
|
vlans_stats[vlan] = 0
|
||||||
vlans_stats[vlan] = vlans_stats[vlan] + 1
|
vlans_stats[vlan] = vlans_stats[vlan] + 1
|
||||||
# En récupère les données pour les afficher plus tard
|
# On récupère les données pour les afficher plus tard
|
||||||
|
try:
|
||||||
macs = switch.show_prise_mac(int(prise[1:]))
|
macs = switch.show_prise_mac(int(prise[1:]))
|
||||||
|
except ConversationError:
|
||||||
|
print u"\tErreur de communication avec " + switch_name
|
||||||
|
print u"\tAbandon du bâtiment..."
|
||||||
|
break
|
||||||
|
|
||||||
if macs:
|
if macs:
|
||||||
for mac in macs:
|
for mac in macs:
|
||||||
fm = db.search("mac=%s" % mac)
|
fm = db.search("mac=%s" % mac)
|
||||||
|
@ -90,13 +116,27 @@ for bat in chbre_prises:
|
||||||
m.nom().split('.')[0],
|
m.nom().split('.')[0],
|
||||||
t,
|
t,
|
||||||
', '.join(sorted(vlans))])
|
', '.join(sorted(vlans))])
|
||||||
|
# Si aucune machine n'est connectée, on ajoute quand même une
|
||||||
|
# entrée dans les résultats
|
||||||
else:
|
else:
|
||||||
prises_down += 1
|
data.append([bat.upper() + prise,
|
||||||
|
bat.upper() + prises[prise],
|
||||||
|
'Pas de Machine',
|
||||||
|
'-',
|
||||||
|
'-',
|
||||||
|
', '.join(sorted(vlans))])
|
||||||
|
|
||||||
|
# On renvoie les résultats
|
||||||
|
return (vlans_stats,data)
|
||||||
|
|
||||||
|
# Traitement par défaut si le fichier est directement appellé comme un script
|
||||||
|
if __name__ == "__main__":
|
||||||
|
|
||||||
|
# On récupère les statistiques sur toutes les prises de l'annuaire
|
||||||
|
vlans_stats, data = scan_bats(chbre_prises.keys)
|
||||||
|
|
||||||
|
# Et on les affiche
|
||||||
print u"Statistiques des VLANs : ", vlans_stats
|
print u"Statistiques des VLANs : ", vlans_stats
|
||||||
print u"Nombres de prises possédant des VLANs : " + str(prises_up)
|
|
||||||
print u"Nombres de prises ne possédant pas de VLANS : " + str(prises_down)
|
|
||||||
|
|
||||||
print u""
|
print u""
|
||||||
print u"Prises possédant des VLANs différent d''adherent'"
|
print u"Prises possédant des VLANs différent d''adherent'"
|
||||||
print tableau(data, titre = [u"Prise", u"Chambre", u"Adhérent", u"Machine", u"Type", u"VLANs"])
|
print tableau(data, titre = [u"Prise", u"Chambre", u"Adhérent", u"Machine", u"Type", u"VLANs"])
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue