#!/usr/bin/python
# -*- coding: utf-8 -*-
###########################################################################
# Eole NG - 2007
# Copyright Pole de Competence Eole  (Ministere Education - Academie Dijon)
# Licence CeCill  cf /root/LicenceEole.txt
# eole@ac-dijon.fr
#
# synchro_zephir
#
# script pour forcer la connexion du serveur à zephir
# effectue des diagnostics sur l'enregistrement du serveur
#
###########################################################################
import xmlrpclib, sys, os
from zephir.lib_zephir import is_locked, registered
from pyeole.process import system_out

# vérification de l'enregistrement
if not registered:
    print """
Ce serveur n'est pas enregistré sur un serveur zephir
Pour l'enregistrer lancez la commande enregistrement_zephir
"""
    sys.exit(0)


# vérification du fonctionnement de la connexion ssh vers zephir
check, out, err = system_out(['/usr/bin/tail', '-3', '/var/log/uucp/Log'])
if "ERROR: Line disconnected" in out:
    print """
Erreur : Un problème de connexion SSH a été détecté dans /var/log/uucp/Log.

Contactez l'administrateur
 ou
Relancez l'enregistrement du serveur sur Zéphir:
 - lancer la commande enregistrement_zephir
 - choisir "Relancer l'enregistrement".
 - laissez les paramètres proposés par défaut par les questions
 - en fin de procédure, vous pouvez terminer par le choix "Ne rien faire"
   (les clés ont déjà été échangées dans les étapes précédentes)
"""
    sys.exit(1)

# vérification des verrous
if is_locked(['uucp', 'reconfigure', 'configure', 'sauvegarde', 'maj']):
    print """
Erreur : un fichier de bloquage est présent. Des actions sont déjà en cours
ou un action précédente ne s'est pas terminée correctement.

Contactez l'administrateur Zéphir ou débloquez les actions avec la commande :

- /usr/share/zephir/scripts/zephir_client del_lock
"""
    sys.exit(1)

with open('/var/log/uucp/Log', 'a') as uucp_log:
    uucp_log.write('--------- synchronisation manuelle (synchro_zephir) ----------\n')
if os.path.isfile('/var/log/uucp/Log'):
    system_out(['/bin/chown', '-R', 'uucp', '/var/log/uucp/'])
sys.stdout.write("\nDemande de synchronisation auprès du service z_stats : ")
z_stats_proxy = xmlrpclib.ServerProxy('http://localhost:8090/xmlrpc')


try:
    sys.stdout.write(z_stats_proxy.archive_for_upload())
except xmlrpclib.socket.error:
    print """
\n! Erreur lors de la connexion au service (port 8090 sur localhost). !
La synchronisation nécessite que le service z_stats soit opérationnel.
"""
    sys.exit(1)

print """

La synchronisation avec Zéphir est en cours, vous pouvez suivre les transferts UUCP  :

 # tail -f /var/log/uucp/Log

Le résultat des éventuelles actions lancées sera disponible dans les fichiers suivants :

 /var/log/zephir/last_action.log (dernière action exécutée)
 /var/log/zephir/actions.log (actions précédentes)
"""
