zephir_get_timeouts.py
1 |
#!/usr/bin/env python
|
---|---|
2 |
# -*- coding: UTF-8 -*-
|
3 |
###########################################################################
|
4 |
# Eole NG - 2007
|
5 |
# Copyright Pole de Competence Eole (Ministere Education - Academie Dijon)
|
6 |
# Licence CeCill cf /root/LicenceEole.txt
|
7 |
# eole@ac-dijon.fr
|
8 |
###########################################################################
|
9 |
import getpass, sys, codecs |
10 |
try:
|
11 |
# si disponible, on utilise la librairie modifiée du client Zéphir
|
12 |
# (n'affiche pas les mots de passe dans l'url en cas de traceback)
|
13 |
from zephir.eolerpclib import xmlrpclib |
14 |
except:
|
15 |
import xmlrpclib |
16 |
|
17 |
HELP = """
|
18 |
|
19 |
usage: zephir_get_timeouts.py [options]
|
20 |
|
21 |
Ce script permet de récupérer la liste des serveurs
|
22 |
en timeout (perte de contact) sur un ensemble de serveurs Zéphir.
|
23 |
|
24 |
Le résultat est stocké dans un fichier de type CSV nommé
|
25 |
zephir_timeout_<adresse_zephir>.csv contenant les informations suivantes:
|
26 |
|
27 |
id_serveur|nom_fichier_associé|libellé_serveur|libellé_etablissement
|
28 |
"""
|
29 |
|
30 |
# délimiteur pour le fichier 'CSV'
|
31 |
delimiter = u";"
|
32 |
|
33 |
def get_timeouts (zephir_infos): |
34 |
|
35 |
for adresse_zephir in zephir_infos.keys(): |
36 |
|
37 |
user, pwd = zephir_infos[adresse_zephir] |
38 |
# définition du proxy XMLRPC ver le serveur Zéphir
|
39 |
if adresse_zephir == 'localhost': |
40 |
zephir_proxy = xmlrpclib.ServerProxy('http://%s:%s@localhost:7081' % (user, pwd))
|
41 |
else:
|
42 |
zephir_proxy = xmlrpclib.ServerProxy('https://%s:%s@%s:7080' % (user, pwd, adresse_zephir))
|
43 |
|
44 |
# récupération du groupe de serveurs correspondants
|
45 |
print "\nRécupération des serveurs en alerte pour le serveur Zéphir %s ..." % adresse_zephir |
46 |
ret_code, serveurs_alerte = zephir_proxy.serveurs.get_alertes() |
47 |
|
48 |
# création d'un fichier de type csv : id_serveur|nom_de_fichier|libelle_etab|libelle_serveur
|
49 |
csv_data = [] |
50 |
for serveur in serveurs_alerte: |
51 |
# serveurs_alerte est une liste contenant les informations suivantes pour
|
52 |
# chaque serveur en alerte :
|
53 |
# id_etab, libelle_etab, libelle_serveur, module_serveur, id_serveur, status_serveur
|
54 |
rne, libel_etab, libel_serveur, module, id_serveur, status = serveur |
55 |
if status == 2: |
56 |
# une valeur 2 pour status_serveur indique une perte de contact avec le serveur
|
57 |
#
|
58 |
# stockage sous forme id_serveur|module|libelle|n°etab
|
59 |
#
|
60 |
csv_data.append(delimiter.join([str(id_serveur), module, libel_serveur, rne]))
|
61 |
try:
|
62 |
# écriture du fichier résultat
|
63 |
csv_name = 'zephir_timeout_%s.csv' % adresse_zephir
|
64 |
f = codecs.open(csv_name, 'w', encoding='utf-8') |
65 |
f.write(u"\n".join(csv_data))
|
66 |
f.close() |
67 |
print "Fichier sauvegardé (%s)\n" % csv_name |
68 |
except:
|
69 |
import traceback |
70 |
traceback.print_exc() |
71 |
print "! Erreur à l'écriture du fichier %s !\n" % csv_name |
72 |
|
73 |
|
74 |
if __name__ == '__main__': |
75 |
|
76 |
# affichage aide
|
77 |
if '-h' in sys.argv or '--help' in sys.argv: |
78 |
print HELP
|
79 |
sys.exit(0)
|
80 |
|
81 |
# informations sur les serveurs à contacter et les comptes à utiliser pour la lecture
|
82 |
|
83 |
zephir_infos = {} |
84 |
# FIXME : à remplacer par les valeurs réelles. exemple :
|
85 |
# zephir_infos = {'adresse_zephir1':('utilisateur','mot_de_passe'),
|
86 |
# 'adresse_zephir2':('utilisateur','mot_de_passe'),
|
87 |
# }
|
88 |
|
89 |
if zephir_infos == {}:
|
90 |
# saisie manuelle des infos zéphir/utilisateur pour débug du script
|
91 |
adresse_zephir = raw_input("Entrez l'adresse du serveur Zéphir :") |
92 |
# proxy xmlrpc
|
93 |
user = raw_input("nom de l'utilisateur zephir :") |
94 |
pwd = getpass.getpass("mot de passe :")
|
95 |
zephir_infos[adresse_zephir] = (user, pwd) |
96 |
|
97 |
get_timeouts(zephir_infos) |