jueves, 22 de abril de 2010

NAGIOS - Monitor EPO

Desde la consola del EPO se puede configurar un report diario de las actualizaciones de las firmas en formato csv. El siguiente script en Python (mi primer script en este lenguaje) interpeta la cantidad de servidores actualizados y desactualizados para monitorizarse en Nagios. 


#!/usr/bin/python
#
# 26/04/2010
import os
import sys
import getopt

STATE=0
STATE_WARNING=1
STATE_OK=0
ARRAY_VERSIONS=[]
ARRAY_NOMS=[]
OLD_MACHINE=[]
OLD_MACHINE_noms=[]
FITXER_CSV="/home/ferran/av_version.csv"
MAX_VERSION=0
i=0

def hello():
print "Script per comprovar l'estat de les EPO de Mcafee."
print "---------------------------------------------------"
print "Principalment analitza el fitxer definit en FITXER_CSV com a punt de montatge cifs (veure fstab). Aquest fitxer es un csv generat de forma automatica on conte diferents dades relatives a la versio de Mcafee (signatures, versio del s.o, etc). Aqui es comprova la versio maxima trobada i la compara amb cada versio de cada client. Si en troba un desactualitzat el sys tornara Warning"

#Verifiquem que el FITXER csv EXISTEIX
#-------------------------------------------------------------------------------
def check_csv_file():
return os.path.isfile(FITXER_CSV)
#-------------------------------------------------------------------------------
def usage():
print "Usage: " + sys.argv[0] + " [ -h | --help ] "
#-------------------------------------------------------------------------------
#Llegim linia a linia el fitxer i afegim la versio de cada linia a ARRAY_VERSIONS.append(versio) i cada nom del server a ARRAY_NOMS.append(nom)
def llegir_linia(FITXER, i,STATE):
for linia in FITXER: #Busquem en les maquines UOC-
if "UOC-" in linia:
UOCSERVER=str.split(linia,",")
versio=UOCSERVER[14]
nom=UOCSERVER[0]
ARRAY_VERSIONS.append(versio)
ARRAY_NOMS.append(nom) # print ARRAY_VERSIONS
while i < len(ARRAY_VERSIONS):
if ARRAY_VERSIONS[i] < max(ARRAY_VERSIONS): #Warning: hi ha equips desactualitzats,busquem quins a partir de la version mes alta numericament"
OLD_MACHINE.append(ARRAY_VERSIONS[i]) # print OLD_MACHINE
OLD_MACHINE_noms.append(ARRAY_NOMS[i]) # print OLD_MACHINE_noms
STATE=STATE_WARNING=1 # print STATE
i=i+1
else:
i=i+1
FITXER.close
return STATE
#-------------------------------------------------------------------------------
try:
optlist, args = getopt.getopt(sys.argv[1:], 'h' , ["help"])
except getopt.GetoptError, err:
print str(err) # will print something like "option -a not recognized"
usage()
sys.exit(2)

for k,v in optlist:
if k in ('-h','--help'):
hello()
sys.exit(0)

if check_csv_file() == True:
STATE=llegir_linia(open(FITXER_CSV,"r"),i,STATE)
if STATE == 1:
# print "Warning: hi ha equips "+ str(len(OLD_MACHINE_noms))+ " desactualitzats," + str(OLD_MACHINE_noms) + str(OLD_MACHINE)
print "WARNING: "+ str(len(OLD_MACHINE_noms))+ " equips desactualitzats, " + " | " .join(str(item)for item in OLD_MACHINE_noms) +" | " + " - " .join(str(item)for item in OLD_MACHINE)
sys.exit(STATE_WARNING)
else:
print "OK: tots els equips actualitzats"
sys.exit(STATE_OK)
else:
print "WARNING: No es pot llegir el FITXER: " + FITXER_CSV
sys.exit(1)



No hay comentarios:

Publicar un comentario