diff --git a/wiki/macro/EtatSecours.py b/wiki/macro/EtatSecours.py new file mode 100644 index 00000000..fde430c8 --- /dev/null +++ b/wiki/macro/EtatSecours.py @@ -0,0 +1,27 @@ +# -*- coding: iso-8859-1 -*- + +def execute(macro, text) : + + f = open('/usr/scripts/secours/etat_maitre') + + try : + etat = f.readline().strip() + force = f.readline().strip() != 'auto' + except : + return 'Il est impossible de déterminer l\'état de la connexion' + + if etat == 'normal' : + etat = 'normale' + else : + etat = 'de secours' + + txt = 'Nous sommes actuellement en connexion %s' % etat + + if force : + txt += ' (valeur forcée)' + + txt += '.' + + return txt + + diff --git a/wiki/macro/MonitStatus.py b/wiki/macro/MonitStatus.py new file mode 100644 index 00000000..d41411d7 --- /dev/null +++ b/wiki/macro/MonitStatus.py @@ -0,0 +1,178 @@ +# -*- coding: iso-8859-1 -*- + +import os, sys, sre, commands + +""" +Permet d'intégrer au wiki les résultats de Monit. + +La macro wiki est : + [[MonitStatus(hotes=host,categories=[All|Process|File],services=[All|Off|On])]] + +Exemple : + [[MonitStatus(hotes=egon,categories=All,services=Off) +""" + +statusfolder = '/usr/scripts/monit/status' + +def NotRunningHosts() : + """ + Retourne la liste des hotes ou Monit ne tourne pas ou que + le fichier de status est trop vieux + """ + return [] + +def HostStatus (host) : + """ + Retourne un dictionnaire représentation de l'état des services de + la machine. + """ + + status = {} + + f = open('%s/%s' % (statusfolder,host) ) + s = None + + for line in f.readlines()[2:] : + line = line.strip() + if not line : + # ligne vide, on passe au service suivant + s = None + elif not s : + # création d'un nouveau service + s = line.split(' ')[1][1:-1] + t = line.split(' ')[0] + if not status.has_key(t) : + status[t] = {} + status[t][s] = {} + else : + # on ajoute les données + status[t][s][line[:34].strip()] = line[34:].strip() + + return status + +def AllStatus () : + """ + Retourne la configuration de toutes les machines + """ + status = {} + for host in os.listdir(statusfolder) : + status[host] = HostStatus(host) + return status + +def StatusTri(status,filtre) : + """ + Applique le filtre issu de la macro sur la liste des statuts + """ + + # découpage de la chaine de filtre + 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() : + # 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 + 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() : + if 'Off' in newfilter['services'] and status[h][t][s]['status'] in ['running','accessible'] : + status[h][t].pop(s) + + # reste-t-il des services dans le groupe + if not status[h][t] : + status[h].pop(t) + + # reste-t-il des groupes dans l'hote + if not status[h] : + status.pop(h) + + return status + +def FormatService(Type, Service, Data, f) : + result = '' + result += f.table_row(1) + result += f.table_cell(1,{'style':'background-color:#C0C0FF'}) + if Type == 'Device' : + Service = Service[2:] + elif Type == 'File' : + Service = Service[4:] + result += f.strong(1) + result += f.text(Service) + result += f.strong(0) + result += f.table_cell(0) + if Data['status'] in ['running','accessible'] : + result += f.table_cell(1,{'style':'background-color:#80FF80'}) + else : + result += f.table_cell(1,{'style':'background-color:#FF8080'}) + result += f.text(Data['status']) + result += f.table_cell(0) + result += f.table_row(0) + return result + +def FormatType(Type, Data, f) : + result = '' + + # titre + result += f.heading(1,3) + result += f.text(Type) + result += f.heading(0,3) + + # les services + result += f.table(1) + for s in Data.keys() : + result += FormatService(Type,s,Data[s],f) + result += f.table(0) + + return result + +def FormatHost (Host, Data, f) : + result = '' + + # titre + result += f.heading(1,2) + result += f.text(Host)[0].upper() + f.text(Host)[1:] + result += f.heading(0,2) + + result += f.table(1) + result += f.table_row(1) + for t in Data.keys() : + result += f.table_cell(1,{'valign':'top'}) + result += FormatType(t,Data[t],f) + result += f.table_cell(0) + result += f.table_row(0) + result += f.table(0) + + return result + +def FormatHosts(Data, f) : + """ + Retourne le code wiki d'un status + """ + result = '' + + for h in Data.keys() : + result += FormatHost(h,Data[h],f) + + return result + +def execute(macro, filtre) : + + if not filtre : + filtre = '' + + status = AllStatus() + status = StatusTri(status,filtre) + code = FormatHosts(status, macro.formatter) + + return code