[bcfg2/statistics-summary.py] Option pour supprimer des hôtes (et autres corrections)
darcs-hash:20090317122852-ddb99-3613a2261564b035e303f6818dc311c4c771083d.gz
This commit is contained in:
parent
8116591d1f
commit
3b82aaf507
1 changed files with 113 additions and 38 deletions
|
@ -133,21 +133,119 @@ def processHost(node, ignore):
|
|||
|
||||
lines.append('')
|
||||
|
||||
return (time.time()-float(stamp.getAttribute('start')) > daysold * 24*60*60,
|
||||
state, lines)
|
||||
return (time.time() - curtime > daysold * 24 * 60 * 60, state, lines)
|
||||
|
||||
|
||||
def deleteHosts(hostslist, writeback):
|
||||
"""Supprime les hôtes de la liste hostslist du fichier de statistiques.
|
||||
Si hostslist évalue à False, demande une confirmation puis supprime
|
||||
tous les hôtes vieux."""
|
||||
doc = xml.dom.minidom.parse(statsfile)
|
||||
hoststodel = []
|
||||
for node in doc.getElementsByTagName('Node'):
|
||||
if not hostslist:
|
||||
# On sélectionne les hôtes vieux
|
||||
stamps = node.getElementsByTagName('OpStamps')
|
||||
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:
|
||||
# On sélectionne les hôtes donnés en argument
|
||||
if node.getAttribute('name') in hostslist:
|
||||
hoststodel.append(node)
|
||||
|
||||
# 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
|
||||
doc = xml.dom.minidom.parse(statsfile)
|
||||
|
||||
oldlines = []
|
||||
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
|
||||
for curnode in doc.getElementsByTagName('Node'):
|
||||
(isold, state, hostlines) = processHost(curnode, ignore)
|
||||
if isold:
|
||||
oldnb += 1
|
||||
if state in ['clean', 'ignored']:
|
||||
oldlines += hostlines
|
||||
else:
|
||||
oldlines = hostlines + oldlines
|
||||
else:
|
||||
if state in ['clean', 'ignored']:
|
||||
finallines += hostlines
|
||||
goodnb += 1
|
||||
else:
|
||||
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
|
||||
print u'*** Old hosts (more than %s days) :' % daysold
|
||||
for line in oldlines:
|
||||
print line
|
||||
print ''
|
||||
|
||||
# Hôtes à jour
|
||||
print u'*** Bad hosts :'
|
||||
for line in finallines:
|
||||
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' -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' * 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 = []
|
||||
|
@ -160,38 +258,15 @@ if __name__ == '__main__':
|
|||
if '-s' in sys.argv or '--no-services' in sys.argv:
|
||||
ignore.append('services')
|
||||
|
||||
# On traite le fichier de statistiques
|
||||
if os.access(statsfile, os.F_OK):
|
||||
doc = xml.dom.minidom.parse(statsfile)
|
||||
|
||||
oldlines = []
|
||||
finallines = [u'', u'*** Clean hosts (or with ignored dirtyness) :']
|
||||
|
||||
# On récupère les informations des différents hôtes
|
||||
for curnode in doc.getElementsByTagName('Node'):
|
||||
(isold, state, hostlines) = processHost(curnode, ignore)
|
||||
if isold:
|
||||
if state in ['clean', 'ignored']:
|
||||
oldlines += hostlines
|
||||
else:
|
||||
oldlines = hostlines + oldlines
|
||||
else:
|
||||
if state in ['clean', 'ignored']:
|
||||
finallines += hostlines
|
||||
else:
|
||||
finallines = hostlines + finallines
|
||||
|
||||
# Hôtes vieux
|
||||
print u'*** Old hosts (more than %s days) :' % daysold
|
||||
for line in oldlines:
|
||||
print line
|
||||
print ''
|
||||
|
||||
# Hôtes à jour
|
||||
print u'*** Bad hosts :'
|
||||
for line in finallines:
|
||||
print line
|
||||
|
||||
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:
|
||||
print u'Impossible d\'accéder au fichier de statistiques :'
|
||||
print u' %s !' % statsfile
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue