[bcfg2/statistics-summary.py] Option pour supprimer des hôtes (et autres corrections)

darcs-hash:20090317122852-ddb99-3613a2261564b035e303f6818dc311c4c771083d.gz
This commit is contained in:
Michel Blockelet 2009-03-17 13:28:52 +01:00
parent 8116591d1f
commit 3b82aaf507

View file

@ -133,44 +133,70 @@ def processHost(node, ignore):
lines.append('') lines.append('')
return (time.time()-float(stamp.getAttribute('start')) > daysold * 24*60*60, return (time.time() - curtime > daysold * 24 * 60 * 60, state, lines)
state, lines)
def deleteHosts(hostslist, writeback):
if __name__ == '__main__': """Supprime les hôtes de la liste hostslist du fichier de statistiques.
if '-h' in sys.argv: Si hostslist évalue à False, demande une confirmation puis supprime
# Message d'utilisation tous les hôtes vieux."""
print u'Outil pour créer un résumé des statistiques de bcfg2.' doc = xml.dom.minidom.parse(statsfile)
print u'' hoststodel = []
print u'Usage :' for node in doc.getElementsByTagName('Node'):
print u' -c ou --no-config pour ignorer les ConfigFiles' if not hostslist:
print u' -p ou --no-packages pour ignorer les Packages' # On sélectionne les hôtes vieux
print u' -a ou --no-actions pour ignorer les Actions' stamps = node.getElementsByTagName('OpStamps')
print u' -s ou --no-services pour ignorer les Services' curtime = 0
for stamp in stamps:
if float(stamp.getAttribute('start')) > curtime:
curtime = float(stamp.getAttribute('start'))
if time.time() - curtime > daysold * 24 * 60 * 60:
hoststodel.append(node)
else: else:
# Lecture des options # On sélectionne les hôtes donnés en argument
ignore = [] if node.getAttribute('name') in hostslist:
if '-c' in sys.argv or '--no-config' in sys.argv: hoststodel.append(node)
ignore.append('config')
if '-p' in sys.argv or '--no-packages' in sys.argv:
ignore.append('packages')
if '-a' in sys.argv or '--no-actions' in sys.argv:
ignore.append('actions')
if '-s' in sys.argv or '--no-services' in sys.argv:
ignore.append('services')
# Suppression des hôtes dans le schéma XML
for node in hoststodel:
print u'Suppression de l\'hôte : %s' % node.getAttribute('name')
node.parentNode.removeChild(node)
if hoststodel:
if writeback:
# Enregistrement des données dans le fichier
print u'Arrêt de bcfg2-server ...'
if os.system('/etc/init.d/bcfg2-server stop'):
print u'Erreur !'
print u'Sauvegarde ...'
doc.writexml(open(statsfile, 'w'))
print u'Redémarrage de bcfg2-server ...'
if os.system('/etc/init.d/bcfg2-server start'):
print u'Erreur !'
else:
print u'Utilisez l\'option -w en tant que root pour enregistrer.'
else:
print u'Aucun hôte à supprimer !'
def genStats(ignore):
"""Génère les statistiques, en ignorant les éléments de la
liste ignore."""
# On traite le fichier de statistiques # On traite le fichier de statistiques
if os.access(statsfile, os.F_OK):
doc = xml.dom.minidom.parse(statsfile) doc = xml.dom.minidom.parse(statsfile)
oldlines = [] oldlines = []
finallines = [u'', u'*** Clean hosts (or with ignored dirtyness) :'] finallines = [u'', u'*** Clean hosts (or with ignored dirtyness) :']
oldnb = 0
badnb = 0
goodnb = 0
# On récupère les informations des différents hôtes # On récupère les informations des différents hôtes
for curnode in doc.getElementsByTagName('Node'): for curnode in doc.getElementsByTagName('Node'):
(isold, state, hostlines) = processHost(curnode, ignore) (isold, state, hostlines) = processHost(curnode, ignore)
if isold: if isold:
oldnb += 1
if state in ['clean', 'ignored']: if state in ['clean', 'ignored']:
oldlines += hostlines oldlines += hostlines
else: else:
@ -178,8 +204,18 @@ if __name__ == '__main__':
else: else:
if state in ['clean', 'ignored']: if state in ['clean', 'ignored']:
finallines += hostlines finallines += hostlines
goodnb += 1
else: else:
finallines = hostlines + finallines finallines = hostlines + finallines
badnb += 1
# Header
print (u'*** Bcfg2 Statistics on %s, for %d hosts ***'
% (time.strftime("%c"), oldnb + badnb + goodnb))
print u' * Old hosts : %d' % oldnb
print u' * Bad hosts : %d' % badnb
print u' * Clean hosts : %d' % goodnb
print ''
# Hôtes vieux # Hôtes vieux
print u'*** Old hosts (more than %s days) :' % daysold print u'*** Old hosts (more than %s days) :' % daysold
@ -192,6 +228,45 @@ if __name__ == '__main__':
for line in finallines: for line in finallines:
print line print line
if __name__ == '__main__':
if '-h' in sys.argv:
# Message d'utilisation
print u'Outil pour créer un résumé des statistiques de bcfg2.'
print u''
print u' * Usage :'
print u' * Génération de statistiques :'
print u' -c ou --no-config pour ignorer les ConfigFiles'
print u' -p ou --no-packages pour ignorer les Packages'
print u' -a ou --no-actions pour ignorer les Actions'
print u' -s ou --no-services pour ignorer les Services'
print u''
print u' * Suppression d\'hôtes des statistiques :'
print u' -d ou --delete seuls pour supprimer tous les hôtes vieux'
print u' -d ou --delete [hôte]... pour supprimer certains hôtes'
print u' -w ou --write pour enregistrer les modifications'
print u' (sinon, ne fait qu\'afficher les hôtes concernés)'
else:
# Lecture des options
ignore = []
if '-c' in sys.argv or '--no-config' in sys.argv:
ignore.append('config')
if '-p' in sys.argv or '--no-packages' in sys.argv:
ignore.append('packages')
if '-a' in sys.argv or '--no-actions' in sys.argv:
ignore.append('actions')
if '-s' in sys.argv or '--no-services' in sys.argv:
ignore.append('services')
if os.access(statsfile, os.F_OK):
if '-d' in sys.argv or '--delete' in sys.argv:
# Mode suppression
deleteHosts([x for x in sys.argv[1:]
if x not in ['-d', '--delete', '-w']], os.getuid() == 0 and
('-w' in sys.argv or '--write' in sys.argv))
else:
# Mode génération des statistiques
genStats(ignore)
else: else:
print u'Impossible d\'accéder au fichier de statistiques :' print u'Impossible d\'accéder au fichier de statistiques :'
print u' %s !' % statsfile print u' %s !' % statsfile