Script de statistique des VLANs
Script permettant d'établir des statistiques sur la présence des différents VLANS sur les prises recensées dans l'annuaire. Ce script recherche particulièrement les prises qui ont des VLANs autre que le VLAN "adherent" et affiche alors les machines connectées sur ces prises. darcs-hash:20090216160308-b8e4c-9f7a20f47fd1198895f756e6a9dc19319cc786f1.gz
This commit is contained in:
parent
7abe53315c
commit
b2c18892a6
1 changed files with 102 additions and 0 deletions
102
surveillance/statsVlans.py
Executable file
102
surveillance/statsVlans.py
Executable file
|
@ -0,0 +1,102 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
u"""
|
||||
Script permettant d'obtenir des statistiques sur les VLans actuellement distribués par les switchs.
|
||||
|
||||
Le script va scanner toutes les prises présentes dans le fichier d'annuaire.
|
||||
S'il est impossbile de se connecter à un switch, on abandonne le batiment concerné
|
||||
|
||||
À la fin sont affichées quelques statistiques, dont les prises sur lesquelles on a trouvé
|
||||
d'autre VLANs qu'"adherent", ainsi que les machines connectées sur ces prises.
|
||||
|
||||
Xavier Lagorce - 2009
|
||||
"""
|
||||
|
||||
from sys import path
|
||||
|
||||
path.append('/usr/scripts/gestion')
|
||||
|
||||
from annuaires import chbre_prises
|
||||
from affich_tools import *
|
||||
from ldap_crans import crans_ldap
|
||||
from ldap_crans import MachineCrans, MachineWifi, BorneWifi
|
||||
from hptools import hpswitch
|
||||
|
||||
|
||||
# nombre de prises possédant des VLANs ou pas
|
||||
prises_up = 0
|
||||
prises_down = 0
|
||||
# nombre de prises possédant chaque VLAN
|
||||
vlans_stats = dict([('adherent',0)])
|
||||
# liste des résultats particuliers découverts pendant le scan
|
||||
data = []
|
||||
|
||||
# Accès à la base ldap
|
||||
db = crans_ldap()
|
||||
|
||||
# On Commence par itérer sur chaque batiment :
|
||||
for bat in chbre_prises:
|
||||
prises = dict()
|
||||
for chbre, prise in chbre_prises[bat].iteritems():
|
||||
prises[prise] = chbre
|
||||
|
||||
current_switch = -1
|
||||
|
||||
for prise in sorted(prises.keys()):
|
||||
|
||||
# Si l'on est pas connecté au switch sur lequel se trouve la prise, on en change
|
||||
if current_switch != int(prise[0]) :
|
||||
switch_name = u"bat" + bat + u"-" + prise[0] + u".adm.crans.org"
|
||||
current_switch = int(prise[0])
|
||||
print u"Connexion à " + switch_name + u" ..."
|
||||
try:
|
||||
switch = hpswitch(switch_name)
|
||||
except ValueError:
|
||||
print u"\tImpossible de se connecter à ce switch, abandon du bâtiment..."
|
||||
break
|
||||
else:
|
||||
print u"\tConnexion établie"
|
||||
|
||||
# On récupère les VLANs présents sur la prise
|
||||
vlans = switch.vlans(prise)
|
||||
if vlans:
|
||||
prises_up += 1
|
||||
|
||||
# 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":
|
||||
vlans_stats[vlans[0]] = vlans_stats[vlans[0]] + 1
|
||||
else:
|
||||
# Sinon, on récupère tous les VLANs
|
||||
for vlan in vlans:
|
||||
if not (vlan in vlans_stats):
|
||||
vlans_stats[vlan] = 0
|
||||
vlans_stats[vlan] = vlans_stats[vlan] + 1
|
||||
# En récupère les données pour les afficher plus tard
|
||||
macs = switch.show_prise_mac(int(prise[1:]))
|
||||
if macs:
|
||||
for mac in macs:
|
||||
fm = db.search("mac=%s" % mac)
|
||||
if len(fm["machine"]) != 0:
|
||||
m = fm["machine"][0]
|
||||
if isinstance(m, MachineWifi): t = u"Wifi"
|
||||
elif isinstance(m, BorneWifi): t = u"Born"
|
||||
else : t = u"Fixe"
|
||||
adh = m.proprietaire()
|
||||
nom = adh.Nom()
|
||||
data.append([bat.upper() + prise,
|
||||
adh.chbre(),
|
||||
adh.Nom(),
|
||||
m.nom().split('.')[0],
|
||||
t,
|
||||
', '.join(sorted(vlans))])
|
||||
else:
|
||||
prises_down += 1
|
||||
|
||||
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"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"])
|
Loading…
Add table
Add a link
Reference in a new issue