==============
EOLE-REGISTER
==============

--------------------------------------------------------------
Gestion de configurations matérielles et suivi des connexions
--------------------------------------------------------------

.. image:: logoeole.gif
   :width: 200
   :align: center

Sommaire
=========

- `Présentation`_
    1. `Préparation de l'installation`_
- `Système Serveur`_
    1. `Le script serveur`_
        a. `Fichier server.py`_
- `Système Client`_
    1. `Le script client`_
        a. `Fichier main.py`_
        b. `Fichier lshwparser.py`_
- `Scripts tiers`_
    1. `Fichier lshwobjects.py`_
    2. `Fichier utils.py`_
        a. `Commandes MySQL`_
        b. `Commandes de parsing XML`_

Présentation
=============

Eole-register est un système client-serveur destiné à établir une liste des **configurations matérielles** des machines sur lesquelles tournent Eole, ainsi qu'un suivi précis (quotidien) du **nombre de serveurs**. Il est capable de détecter un changement matériel et de renvoyer la configuration.
Au niveau serveur, un site Web permet la consultation des configurations matérielles mais aussi des connexions.

Préparation de l'installation
-------------------------------

Il est nécessaire de renseigner le fichier *config.py* contenant toutes les informations nécessaires au bon fonctionnement du script.
::

    # Serveur Eole a joindre
    SERVEREOLE = "http://localhost:7080"

    # Port sur lequel écouter
    PORTSERVER = "7080"

    # Le nom du module et la version du module
    EOLEMODULE = "module-version"

    # Hôte hébergeant la base de données
    HOSTSQL = "localhost"

    # Nom d'utilisateur pour la base MySQL
    LOGINSQL = "root"

    # Mot de passe de connexion à la base MySQL
    PASSSQL = "Eole21"

    # Nom de la table contenant les infos
    DBSQL = "materiel"

Fonctionnement global du script
--------------------------------

Ce script remplit deux rôles :

- récupération des informations systèmes afin de remplir une base de données matérielle de compatibilité.

- remplissage d'une base de données permettant de visualiser au jour le jour le nombre de connexions, triées par module Eole.

Le script côté client récupère toutes les informations matérielles disponibles sur la machine, puis instancie tous les objets nécessaires. Une fois ces renseignements collectés, tous les objets sont transformés en un dictionnaire qui sera envoyé par XMLRPC au serveur. Par ailleurs, une mise à jour (ou nouvelle insertion) est faite dans la base de données des connexions, afin de tenir à jour le système de statistiques.

Le serveur retransforme le dictionnaire en objets, puis lance les méthodes de vérification / d'insertion dans la base de données MySQL.

Si aucune modification matérielle n'a été détectée sur la machine cliente, le script se contente d'envoyer quelques informations au serveur afin que celui-ci mette à jour les informations de connexions (module Eole, date de dernière connexion) afin de tenir à jour les statistiques.

.. ATTENTION::
   La commande lshw doit pouvoir être exécutée en tant qu'administrateur (via *sudo*) !

   Dans le cas contraire, le mot de passe sera demandé dans la console à chaque lancement du script.

Système Serveur
==================

Le script serveur
------------------

Le logiciel se compose de cinq fichiers:

- **config.py** : contient les réglages.
- **__init.py__** : fichier vide, créé uniquement pour des raisons de compatibilité avec Python 2.5.
- **lshwobjects.py** : fichier de déclaration des objets.
- **server.py** : fichier principal, à lancer avec ``twisted``.
- **utils.py** : script contenant différentes méthodes génériques : quelques méthodes mySQL, et quelques méthodes de parsing XML.

Seul le fichier server.py sera étudié ici, les autres étant détaillés dans la partie 'scripts tiers'.

Fichier server.py
~~~~~~~~~~~~~~~~~~

Ce script a été développé en utilisant ``XMLRPC`` pour Python. Le serveur est de type TwistedMatrix_.
Ce script contient aussi la déclaration du serveur XMLRPC. Une fois lancé, il attend qu'une de ses méthodes soit appelée.

L'insertion dans la base de données s'effectue grâce à la libraire MySQLdb_.

Système Client
==================

Le script client
-----------------

Le logiciel se compose de six fichiers:

- **config.py** : contient les réglages.
- **__init.py__** : fichier vide, créé uniquement pour des raisons de compatibilité avec Python 2.5.
- **lshwobjects.py** : fichier de déclaration des objets (Computer, Network, etc).
- **main.py** : fichier principal. Ce script lance la vérification principale.
- **lshwparser.py** : fichier contenant les méthodes de parsing XML spécifiques à l'application.
- **utils.py** : script contenant différentes méthodes génériques : quelques méthodes mySQL, et quelques méthodes de parsing XML.

Seuls les fichiers main.py et lshwparser.py seront étudiés ici, les autres étant détaillés dans la partie 'scripts tiers'.

Fichier main.py
~~~~~~~~~~~~~~~~

Contient les méthodes de récupération de la configuration matérielle, et de son parsing. C'est ce script qui est à lancer à chaque démarrage de la machine.

Fichier lshwparser.py
~~~~~~~~~~~~~~~~~~~~~

Contient les commandes de parsing de chaque périphérique. Chaque commande récupère les paramètres qui l'intéressent, puis instancie un objet (ou une liste d'objets dans le cas des disques durs par exemple). Ces objets sont récupérés par l'objet Computer, qui se charge ensuite de les transformer en un dictionnaire. L'utilitaire de parsing est ElementTree_.

Scripts tiers
==============

Fichier lshwobjects.py
-----------------------

Ce fichier contient les déclarations des objets Computer, Processor, Memory, Disk, Network, Multimedia, Diskcard. Chaque objet contient différents attributs : *product* et *vendor*, mais quelquefois d'autres informations (largeur de bus des processeurs, taille de la mémoire vive, pilote de la carte contrôleur).

L'objet Computer contient des méthodes plus complexes, puisque les appels aux fonctions des objets périphériques se feront au travers de ses méthodes. La méthode *todict()* appelle toutes les méthodes *todict()* des objets périphériques afin de créer le dictionnaire final.

La méthode *fromdict()* transforme les valeurs du dictionnaire reçu en objets correspondants.

La méthode *insertsql()* vérifie d'abord l'existence du modèle de serveur. S'il existe déjà, les périphériques seront insérés un par un. S'il n'existe pas, une *insertion complète* aura lieu, avec création d'une configuration de serveur complète.

Fichier utils.py
-------------------

Contient différentes méthodes génériques, utilisées côté client et serveur.

Commandes MySQL
~~~~~~~~~~~~~~~~

Ce script contient différentes méthodes d'insertion dans la base de données MySQL mais aussi d'extraction de résultat pour comparaison. Il est possible de déterminer si un périphérique existe déjà, et de l'insérer le cas échéant.

Commandes de parsing XML
~~~~~~~~~~~~~~~~~~~~~~~~~

Les méthodes de ce script permettent de parser l'arbre fourni par la commande *lshw*,  afin d'en extraire les informations sur les périphériques. On obtient donc un arbre en mémoire sur lequel des opérations de recherche et de récupération d'informations sont possibles.



Eole-NG

.. _ElementTree: http://effbot.org/zone/pythondoc-elementtree-ElementTree.htm
.. _TwistedMatrix: http://www.twistedmatrix.com
.. _MySQLdb: http://sourceforge.net/projects/mysql-python
