trois fois rien
darcs-hash:20051001152533-4ec08-310f41e5e104256c9096a56c2d0d9f0ade6345d2.gz
This commit is contained in:
parent
3206707948
commit
8339f6e8c2
1 changed files with 127 additions and 37 deletions
|
@ -9,7 +9,10 @@ La macro wiki est :
|
||||||
[[MonitStatus(hotes=host,categories=[All|Process|File],services=[All|Off|On])]]
|
[[MonitStatus(hotes=host,categories=[All|Process|File],services=[All|Off|On])]]
|
||||||
|
|
||||||
Exemple :
|
Exemple :
|
||||||
[[MonitStatus(hotes=egon,categories=All,services=Off)
|
[[MonitStatus(All|Off|service@host)
|
||||||
|
|
||||||
|
TODO :
|
||||||
|
Vérifier que monit tourne sur les hotes
|
||||||
"""
|
"""
|
||||||
|
|
||||||
statusfolder = '/usr/scripts/monit/status'
|
statusfolder = '/usr/scripts/monit/status'
|
||||||
|
@ -41,13 +44,20 @@ def HostStatus (host) :
|
||||||
# création d'un nouveau service
|
# création d'un nouveau service
|
||||||
s = line.split(' ')[1][1:-1]
|
s = line.split(' ')[1][1:-1]
|
||||||
t = line.split(' ')[0]
|
t = line.split(' ')[0]
|
||||||
|
# ajout du type s'il n'est pas dedans
|
||||||
if not status.has_key(t) :
|
if not status.has_key(t) :
|
||||||
status[t] = {}
|
status[t] = {}
|
||||||
status[t][s] = {}
|
status[t][s] = {}
|
||||||
else :
|
else :
|
||||||
# on ajoute les données
|
# on ajoute les données
|
||||||
status[t][s][line[:34].strip()] = line[34:].strip()
|
status[t][s][line[:34].strip()] = line[34:].strip()
|
||||||
|
|
||||||
|
# on supprime les données system
|
||||||
|
try :
|
||||||
|
status.pop('System')
|
||||||
|
except :
|
||||||
|
pass
|
||||||
|
|
||||||
return status
|
return status
|
||||||
|
|
||||||
def AllStatus () :
|
def AllStatus () :
|
||||||
|
@ -59,50 +69,45 @@ def AllStatus () :
|
||||||
status[host] = HostStatus(host)
|
status[host] = HostStatus(host)
|
||||||
return status
|
return status
|
||||||
|
|
||||||
def StatusTri(status,filtre) :
|
def AllStatusOff () :
|
||||||
"""
|
"""
|
||||||
Applique le filtre issu de la macro sur la liste des statuts
|
Retourne status avec juste les services off
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# découpage de la chaine de filtre
|
status = AllStatus()
|
||||||
newfilter = {'hotes':['All'],'categories':['All'],'services':['All']}
|
|
||||||
|
|
||||||
for f in filtre.split(',') :
|
|
||||||
if f :
|
|
||||||
newfilter[f.split('=')[0]] = f.split('=')[1].split('|')
|
|
||||||
|
|
||||||
for h in status.keys() :
|
for h in status.keys() :
|
||||||
# faut-il supprimer l'hote ?
|
|
||||||
if not 'All' in newfilter['hotes'] and not h in newfilter['hotes'] :
|
|
||||||
status.pop(h)
|
|
||||||
continue
|
|
||||||
|
|
||||||
# on supprime les types
|
# on supprime les types
|
||||||
for t in status[h].keys() :
|
for t in status[h].keys() :
|
||||||
# faut-il supprimer le type ?
|
|
||||||
if ( not 'All' in newfilter['categories'] and not t in newfilter['categories'] ) or t == 'System' :
|
|
||||||
status[h].pop(t)
|
|
||||||
continue
|
|
||||||
|
|
||||||
# on supprime les services
|
|
||||||
for s in status[h][t].keys() :
|
for s in status[h][t].keys() :
|
||||||
if 'Off' in newfilter['services'] and status[h][t][s]['status'] in ['running','accessible'] :
|
|
||||||
|
# on supprime un status s'il est Up
|
||||||
|
if status[h][t][s]['status'] in ['running','accessible'] :
|
||||||
status[h][t].pop(s)
|
status[h][t].pop(s)
|
||||||
|
|
||||||
# reste-t-il des services dans le groupe
|
# reste-t-il des services dans le groupe
|
||||||
if not status[h][t] :
|
if not status[h][t] :
|
||||||
status[h].pop(t)
|
status[h].pop(t)
|
||||||
|
|
||||||
# reste-t-il des groupes dans l'hote
|
# reste-t-il des groupes dans l'hote
|
||||||
if not status[h] :
|
if not status[h] :
|
||||||
status.pop(h)
|
status.pop(h)
|
||||||
|
|
||||||
return status
|
return status
|
||||||
|
|
||||||
def FormatService(Type, Service, Data, f) :
|
def FormatService(Type, Service, Data, f) :
|
||||||
|
"""
|
||||||
|
Retourne le code HTML d'un sercice
|
||||||
|
Type : type de service
|
||||||
|
Service : Nom du service
|
||||||
|
Data : dictionnaire contenant toutes les données Data[info]
|
||||||
|
f : formatter
|
||||||
|
"""
|
||||||
|
|
||||||
result = ''
|
result = ''
|
||||||
result += f.table_row(1)
|
result += f.table_row(1)
|
||||||
result += f.table_cell(1,{'style':'background-color:#C0C0FF'})
|
result += f.table_cell(1,{'style':'background-color:silver'})
|
||||||
if Type == 'Device' :
|
if Type == 'Device' :
|
||||||
Service = Service[2:]
|
Service = Service[2:]
|
||||||
elif Type == 'File' :
|
elif Type == 'File' :
|
||||||
|
@ -112,15 +117,22 @@ def FormatService(Type, Service, Data, f) :
|
||||||
result += f.strong(0)
|
result += f.strong(0)
|
||||||
result += f.table_cell(0)
|
result += f.table_cell(0)
|
||||||
if Data['status'] in ['running','accessible'] :
|
if Data['status'] in ['running','accessible'] :
|
||||||
result += f.table_cell(1,{'style':'background-color:#80FF80'})
|
result += f.table_cell(1,{'style':'background-color:lime'})
|
||||||
else :
|
else :
|
||||||
result += f.table_cell(1,{'style':'background-color:#FF8080'})
|
result += f.table_cell(1,{'style':'background-color:red'})
|
||||||
result += f.text(Data['status'])
|
result += f.text(Data['status'])
|
||||||
result += f.table_cell(0)
|
result += f.table_cell(0)
|
||||||
result += f.table_row(0)
|
result += f.table_row(0)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def FormatType(Type, Data, f) :
|
def FormatType(Type, Data, f) :
|
||||||
|
"""
|
||||||
|
Retourne le code HTML d'une liste de services
|
||||||
|
Host : nom de l'hote
|
||||||
|
Data : dictionnaire contenant toutes les données Data[service][info]
|
||||||
|
f : formatter
|
||||||
|
"""
|
||||||
|
|
||||||
result = ''
|
result = ''
|
||||||
|
|
||||||
# titre
|
# titre
|
||||||
|
@ -137,6 +149,13 @@ def FormatType(Type, Data, f) :
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def FormatHost (Host, Data, f) :
|
def FormatHost (Host, Data, f) :
|
||||||
|
"""
|
||||||
|
Retourne le code HTML d'un hôte
|
||||||
|
Host : nom de l'hote
|
||||||
|
Data : dictionnaire contenant toutes les données Data[type][service][info]
|
||||||
|
f : formatter
|
||||||
|
"""
|
||||||
|
|
||||||
result = ''
|
result = ''
|
||||||
|
|
||||||
# titre
|
# titre
|
||||||
|
@ -150,6 +169,7 @@ def FormatHost (Host, Data, f) :
|
||||||
result += f.table_cell(1,{'valign':'top'})
|
result += f.table_cell(1,{'valign':'top'})
|
||||||
result += FormatType(t,Data[t],f)
|
result += FormatType(t,Data[t],f)
|
||||||
result += f.table_cell(0)
|
result += f.table_cell(0)
|
||||||
|
|
||||||
result += f.table_row(0)
|
result += f.table_row(0)
|
||||||
result += f.table(0)
|
result += f.table(0)
|
||||||
|
|
||||||
|
@ -157,8 +177,11 @@ def FormatHost (Host, Data, f) :
|
||||||
|
|
||||||
def FormatHosts(Data, f) :
|
def FormatHosts(Data, f) :
|
||||||
"""
|
"""
|
||||||
Retourne le code wiki d'un status
|
Retourne le code HTML de tous les hotes fournis
|
||||||
|
Data : dictionnaire contenant toutes les données Data[hote][type][service][info]
|
||||||
|
f : formatter
|
||||||
"""
|
"""
|
||||||
|
|
||||||
result = ''
|
result = ''
|
||||||
|
|
||||||
for h in Data.keys() :
|
for h in Data.keys() :
|
||||||
|
@ -166,13 +189,80 @@ def FormatHosts(Data, f) :
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def execute(macro, filtre) :
|
def Cellule(texte, couleur, f) :
|
||||||
|
"""
|
||||||
if not filtre :
|
Retourne le code HTML d'une cellule formattée aver le formatter f
|
||||||
filtre = ''
|
"""
|
||||||
|
code = f.table(1)
|
||||||
status = AllStatus()
|
code += f.table_row(1)
|
||||||
status = StatusTri(status,filtre)
|
code += f.table_cell(1,{'style':'background-color:%s' % couleur })
|
||||||
code = FormatHosts(status, macro.formatter)
|
code += f.text(texte)
|
||||||
|
code += f.table_cell(0)
|
||||||
|
code += f.table_row(0)
|
||||||
|
code += f.table(0)
|
||||||
return code
|
return code
|
||||||
|
|
||||||
|
def execute(macro, filtre) :
|
||||||
|
"""
|
||||||
|
Corps principal de la macro
|
||||||
|
"""
|
||||||
|
f = macro.formatter
|
||||||
|
|
||||||
|
# on met en forme le filtre
|
||||||
|
if not filtre :
|
||||||
|
filtre = 'all'
|
||||||
|
else :
|
||||||
|
filtre = filtre.lower()
|
||||||
|
|
||||||
|
if filtre == 'off' :
|
||||||
|
# tous les services off
|
||||||
|
status = AllStatusOff()
|
||||||
|
if status :
|
||||||
|
return FormatHosts(status, f)
|
||||||
|
else :
|
||||||
|
# aucun service off, on affiche OK
|
||||||
|
code = f.table(1)
|
||||||
|
code += f.table_row(1)
|
||||||
|
code += f.table_cell(1,{'style':'background-color:lime'})
|
||||||
|
code += f.text(u'Tous les services semblent opérationels')
|
||||||
|
code += f.table_cell(0)
|
||||||
|
code += f.table_row(0)
|
||||||
|
code += f.table(0)
|
||||||
|
return code
|
||||||
|
|
||||||
|
elif filtre == 'all' :
|
||||||
|
# tous les services
|
||||||
|
status = AllStatus()
|
||||||
|
return FormatHosts(status, f)
|
||||||
|
|
||||||
|
elif '@' in filtre :
|
||||||
|
# affichage d'un service simple
|
||||||
|
|
||||||
|
host = filtre.split('@')[1]
|
||||||
|
service = filtre.split('@')[0]
|
||||||
|
status = HostStatus(host)
|
||||||
|
|
||||||
|
# recherche du service dans la config
|
||||||
|
s = {}
|
||||||
|
for t in status.keys() :
|
||||||
|
if service in status[t].keys() :
|
||||||
|
s = status[t][service]
|
||||||
|
|
||||||
|
if not s :
|
||||||
|
# service non trouvé
|
||||||
|
code = f.table_cell(0)
|
||||||
|
code += f.table_cell(1,{'style':'background-color:yellow'})
|
||||||
|
code += f.text(u'Service introuvable')
|
||||||
|
return code
|
||||||
|
|
||||||
|
# création de la chaine de retour
|
||||||
|
code = f.table_cell(0)
|
||||||
|
if s['status'] in ['running','accessible'] :
|
||||||
|
code += f.table_cell(1,{'style':'background-color:lime'})
|
||||||
|
else :
|
||||||
|
code += f.table_cell(1,{'style':'background-color:red'})
|
||||||
|
code += f.text(s['status'])
|
||||||
|
return code
|
||||||
|
|
||||||
|
else :
|
||||||
|
return Cellule('Erreur de filtre','yellow',f)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue