Projet

Général

Profil

zephir_get_timeouts.py

statistiques Zéphir (perte de contat) - Bruno Boiget, 25/11/2014 16:23

Télécharger (3,79 ko)

 
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)