Author: afages Date: 2010-03-13 19:44:16 +0100 (Sat, 13 Mar 2010) New Revision: 234 Log: Ajout elements rapport + modif rapport Added: trunk/src/site/doc/rapport/img/ trunk/src/site/doc/rapport/img/domain.png trunk/src/site/doc/rapport/img/package.png trunk/src/site/doc/rapport/img/planning.png trunk/src/site/doc/rapport/img/usecase.png Removed: trunk/src/site/doc/rapport/rst2pdf-net.py Modified: trunk/msm-pluginmanager/ trunk/src/site/doc/analyse/analyseBT.rst trunk/src/site/doc/analyse/msm.zargo trunk/src/site/doc/analyse/usecase.rst trunk/src/site/doc/rapport/rapport.rst trunk/src/site/reports/planningMSM.xls Property changes on: trunk/msm-pluginmanager ___________________________________________________________________ Added: svn:ignore + target Modified: trunk/src/site/doc/analyse/analyseBT.rst =================================================================== --- trunk/src/site/doc/analyse/analyseBT.rst 2010-03-13 12:41:29 UTC (rev 233) +++ trunk/src/site/doc/analyse/analyseBT.rst 2010-03-13 18:44:16 UTC (rev 234) @@ -1,26 +1,25 @@ -Analyse de BigTable (de google Inc.) -===================================== +*Analyse de BigTable (de google Inc.)* -But de l'analyse ----------------- +2.2.1 But de l'analyse +~~~~~~~~~~~~~~~~~~~~~~ Permettre la compréhension de Big Table et de ses diverses implémentations ainsi que l'extraction d'interface pour le projet MSM. -Introduction : Qu'est-ce que BigTable ? ---------------------------------------- +2.2.2 Introduction : Qu'est-ce que BigTable ? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BigTable est la spécification d'un système de stockage distribué permettant de gérer des données. Il est conçu pour s'adapter fiablement à des tailles de contenu allant jusqu'au "Peta". BigTable est utilisé pour plusieurs raisons : -- Toucher un large ensemble d'applications -- Mise à l'échelle -- Très bonnes performances (temps de réponse...) -- Forte disponibilité +* Toucher un large ensemble d'applications +* Mise à l'échelle +* Très bonnes performances (temps de réponse...) +* Forte disponibilité -Le modèle de données de BigTable --------------------------------- +2.2.3 Le modèle de données de BigTable +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Le modèle de données de BigTable se comporte comme un dictionnaire multidimensionnel (matrice) indexé par le triplet @@ -48,11 +47,11 @@ Une cellule peut contenir plusieurs versions de la même donnée via le mécanisme de timestamp. Chaque cellule stocke plusieurs timestamp en ordre décroissant si bien que : -- <com.google.maps/index.html, contents:, ts1> donne la version la plus récente du contenu. -- <com.google.maps/index.html, contents:, ts2> donne une version plus ancienne du contenu. +* <com.google.maps/index.html, contents:, ts1> donne la version la plus récente du contenu. +* <com.google.maps/index.html, contents:, ts2> donne une version plus ancienne du contenu. -Stockage --------- +2.2.4 Stockage +~~~~~~~~~~~~~~ BigTable utilise le système de fichier google GFS (Google File System) pour stocker les logs et fichiers de données. @@ -60,33 +59,34 @@ Le format de fichier google SSTable est utilisé pour stocker les données internes à BigTable. -API BigTable (client) ---------------------- +2.2.5 API BigTable +~~~~~~~~~~~~~~~~~~ Voici les fonctionnalités prévues par la spécification BigTable : -- Création de tables. -- Création de familles de colonne. -- Suppression de tables. -- Suppression de familles de colonne. -- Changement de cluster (?). -- Changement de table. -- Changement de méta données sur une famille de colonne (droits d'accès...). -- Ecriture des données dans une table. -- Suppression des données dans une table. -- Recherche des données dans une table depuis des rangées individuelles. -- Itération sur un sous-ensemble de données d'une table. -- Manipulation avancée des données : Transactions "Lecture - Modification - Ecriture" -sur une rangée simple (BigTable ne supporte pas les transactions par rangées multiples). -- Utilisation des cellules comme compteurs d'entier. -- Excécution de scripts clients dans l'espace d'adressage des serveurs (langage : sawzall). -- Calcul parallèle avec le framework MapReduce. +* Création de tables. +* Création de familles de colonne. +* Suppression de tables. +* Suppression de familles de colonne. +* Changement de cluster (?). +* Changement de table. +* Changement de méta données sur une famille de colonne (droits d'accès...). +* Ecriture des données dans une table. +* Suppression des données dans une table. +* Recherche des données dans une table depuis des rangées individuelles. +* Itération sur un sous-ensemble de données d'une table. +* Manipulation avancée des données : Transactions "Lecture - Modification - Ecriture" sur une rangée simple (BigTable ne supporte pas les transactions par rangées multiples). -Source ------- +* Utilisation des cellules comme compteurs d'entier. +* Excécution de scripts clients dans l'espace d'adressage des serveurs (langage : sawzall). -Cette analyse est une synthèse des éléments utiles dans le cadre du projet, issue de la -spécification même de Google Inc. +* Calcul parallèle avec le framework MapReduce. + +2.2.6 Source +~~~~~~~~~~~~ + +Cette analyse est une synthèse des éléments utiles dans le cadre du +projet, issue de la spécification même de Google Inc. "BigTable: A Distributed Storage System for Structured Data" lien : labs.google.com/papers/bigtable-osdi06.pdf Modified: trunk/src/site/doc/analyse/msm.zargo =================================================================== (Binary files differ) Modified: trunk/src/site/doc/analyse/usecase.rst =================================================================== --- trunk/src/site/doc/analyse/usecase.rst 2010-03-13 12:41:29 UTC (rev 233) +++ trunk/src/site/doc/analyse/usecase.rst 2010-03-13 18:44:16 UTC (rev 234) @@ -1,52 +1,73 @@ -Description des cas d'utilisation (Cockburn) -============================================ +2.4 Describe Database +--------------------- -Describe Database ------------------ +**Use case :** 11.Describe Database. -- Use case : 11.Describe Database -- Goal in context : décrire la structure d'une base de données -BigTable (Hbase, HashMap...) en affichant les différentes tables graphiquement selon le plugin de la base. -- Scope : MSM -GUI/IHM -- Level : sous-fonctionnalité -- Primary actor : utilisateur de MSM -- Trigger : L'utilisateur souhaite décrire la base en cours -- Frequency : très souvent (toute utilisation d'une base passe par sa description normalement) - 100/jour -- Pre-conditions : - PRE1 : l'utilisateur doit être connecté à la base qu'il veut décrire. - On connait la base. -- Post-conditions : - POST1 : l'utilisateur dispose graphiquement de la structure de la - base. -- Main success scenario : +**Goal in context :** décrire la structure d'une base de données +BigTable (Hbase, HashMap...) en affichant les différentes tables graphiquement +selon le plugin de la base. + +**Scope :** MSM -GUI/IHM. + +**Level :** sous-fonctionnalité. + +**Primary actor :** utilisateur de MSM. + +**Trigger :** l'utilisateur souhaite décrire la base en cours. + +**Frequency :** très souvent (toute utilisation d'une base passe par sa +description normalement) ~= 100/jour. + +**Pre-conditions :** + - PRE1 : l'utilisateur doit être connecté à la base qu'il veut décrire. +On connait la base. + +**Post-conditions :** + - POST1 : l'utilisateur dispose graphiquement de la structure de la + base. + +**Main success scenario :** + 1) L'utilisateur se connecte à la base de données 2) MSM renvoie la base de données à l'utilisateur 3) L'utilisateur souhaite décrire sa base 4) MSM renvoie la structure de la base (tables) 5) L'utilisateur traite la structure de la base -- Extensions : -- Performance : selon la fréquence d'exécution, doit être très rapide. + +**Extensions :** + +**Performance :** selon la fréquence d'exécution, doit être très rapide. L'utilisateur doit obtenir la structure de la base immédiatement. -Describe Table --------------- +2.5 Describe Table +------------------ -- Use case : 12.Describe Table -- Goal in context : décrire la structure d'une table d'une base -BigTable (Hbase, HashMap...) en affichant les différents éléments (colonnes, types...) -graphiquement selon le plugin de la base. -- Scope : MSM -GUI/IHM -- Level : sous-fonctionnalité -- Primary actor : utilisateur de MSM -- Trigger : L'utilisateur souhaite décrire une table de la base -- Frequency : très souvent (toute utilisation d'une table passe par sa description normalement) - 100/jour -- Pre-conditions : - PRE1 : l'utilisateur doit être connecté à la base qu'il veut décrire. - On dispose d'un accès à la table. -- Post-conditions : - POST1 : l'utilisateur dispose graphiquement de la structure de la - table. -- Main success scenario : +**Use case :** 12.Describe Table + +**Goal in context :** décrire la structure d'une table d'une base +BigTable (Hbase, HashMap...) en affichant les différents éléments +(colonnes, types...) graphiquement selon le plugin de la base. + +**Scope :** MSM -GUI/IHM + +**Level :** sous-fonctionnalité + +**Primary actor :** utilisateur de MSM + +**Trigger :** l'utilisateur souhaite décrire une table de la base + +**Frequency :** très souvent (toute utilisation d'une table passe par sa +description normalement) ~= 100/jour + +**Pre-conditions :** + - PRE1 : l'utilisateur doit être connecté à la base qu'il veut décrire. On + dispose d'un accès à la table. + +**Post-conditions :** + - POST1 : l'utilisateur dispose graphiquement de la structure de la table. + +**Main success scenario :** + 1) L'utilisateur se connecte à la base de données 2) MSM renvoie la base de données à l'utilisateur 3) L'utilisateur décrit la base @@ -54,29 +75,42 @@ 5) L'utilisateur sélectionne une table 6) MSM renvoie la structure de la table 7) L'utilisateur traite la structure de la table -- Extensions : - 5.a : l'utilisateur effectue une recherche sur la table -- Performance : selon la fréquence d'exécution, doit être très rapide. + +**Extensions :** + + 5.a l'utilisateur effectue une recherche sur la table + +**Performance :** selon la fréquence d'exécution, doit être très rapide. L'utilisateur doit obtenir la structure de la table immédiatement. -View content ------------- +2.6 View content +---------------- -- Use case : 2.View content -- Goal in context : obtenir les données d'une table (son contenu) d'une base +**Use case :** 2.View content. + +**Goal in context :** obtenir les données d'une table (son contenu) d'une base BigTable (Hbase, HashMap...) selon le plugin de la base. -- Scope : MSM - GUI/IHM -- Level : fonctionnalité -- Primary actor : utilisateur de MSM -- Trigger : L'utilisateur souhaite voir les données contenues dans une table. -- Frequency : très souvent - 100/jour -- Pre-conditions : - PRE1 : l'utilisateur doit être connecté à la base dont il veut les - données. On dispose d'un accès à la table. -- Post-conditions : - POST1 : l'utilisateur dispose graphiquement des données contenues - dans la table. -- Main success scenario : + +**Scope :** MSM - GUI/IHM. + +**Level :** fonctionnalité. + +**Primary actor :** utilisateur de MSM. + +**Trigger :** L'utilisateur souhaite voir les données contenues dans une table. + +**Frequency :** très souvent ~= 100/jour. + +**Pre-conditions :** + - PRE1 : l'utilisateur doit être connecté à la base dont il veut les + données. On dispose d'un accès à la table. + +**Post-conditions :** + - POST1 : l'utilisateur dispose graphiquement des données contenues dans + la table. + +**Main success scenario :** + 1) L'utilisateur se connecte à la base de données 2) MSM renvoie la base de données à l'utilisateur 3) L'utilisateur décrit la base @@ -84,26 +118,39 @@ 5) L'utilisateur sélectionne une table et demande à voir son contenu 6) MSM renvoie les données de la table 7) L'utilisateur traite les données -- Extensions : - 5.a : l'utilisateur effectue une recherche sur la table -- Performance : selon la fréquence d'exécution, doit être très rapide. + +**Extensions :** + 5.a l'utilisateur effectue une recherche sur la table + +**Performance :** selon la fréquence d'exécution, doit être très rapide. L'utilisateur doit obtenir les données immédiatement. -Monitor -------- +2.7 Monitor +----------- -- Use case : 3.Monitor -- Goal in context : surveiller la base de sorte à vérifier l'activité des noeuds (charge, espace disque...) -- Scope : MSM - GUI/IHM -- Level : fonctionnalité -- Primary actor : utilisateur de MSM -- Trigger : -- Frequency : peu souvent - 10/jour -- Pre-conditions : - PRE1 : -- Post-conditions : - POST1 : -- Main success scenario : +**Use case :** 3.Monitor. + +**Goal in context :** surveiller la base de sorte à vérifier l'activité des +noeuds (charge, espace disque...). + +**Scope :** MSM - GUI/IHM. + +**Level :** fonctionnalité. + +**Primary actor :** utilisateur de MSM. + +**Trigger :** + +**Frequency :** peu souvent ~= 10/jour. + +**Pre-conditions :** + - PRE1 : + +**Post-conditions :** + - POST1 : + +**Main success scenario :** + 1) 2) 3) @@ -111,133 +158,173 @@ 5) 6) 7) -- Extensions : - -- Performance : la qualité du monitoring est tout aussi importante que + +**Extensions :** + +**Performance :** la qualité du monitoring est tout aussi importante que la temps-réel (actualité des données) de la tâche. -Import ------- -(XPP3, DOM4J) +2.8 Import +---------- -- Use case : 4.Import -- Goal in context : importer des données dans une base de données +**Use case :** 4.Import. + +**Goal in context :** importer des données dans une base de données (tables, données). -- Scope : MSM -- Level : fonctionnalité -- Primary actor : utilisateur de MSM -- Trigger : l'utilisateur désire importer ses données dans une base -- Frequency : peu souvent - 2/jour -- Pre-conditions : - PRE1 : la base de données doit exister et être connue - PRE2 : le fichier d'importation doit exister - PRE3 : l'utilisateur doit être connecté à la base -- Post-conditions : - POST1 : les données sont insérées dans la base - POST2 : les données sont manipulables -- Main success scenario : + +**Scope :** MSM. + +**Level :** fonctionnalité. + +**Primary actor :** utilisateur de MSM. + +**Trigger :** l'utilisateur désire importer ses données dans une base. + +**Frequency :** peu souvent ~= 2/jour. + +**Pre-conditions :** + - PRE1 : la base de données doit exister et être connue. + - PRE2 : le fichier d'importation doit exister. + - PRE3 : l'utilisateur doit être connecté à la base. + +**Post-conditions :** + - POST1 : les données sont insérées dans la base. + - POST2 : les données sont manipulables. + +**Main success scenario :** + 1) L'utilisateur se connecte à la base de données 2) L'utilisateur désire importer des données dans la base - 3) MSM demande à l'utilisateur de sélectionner un fichier - d'imporation + 3) MSM demande à l'utilisateur de sélectionner un fichier d'imporation 4) L'utilisateur sélectionne un fichier d'importation 5) MSM importe les données contenues dans le fichier 6) MSM renvoie le résultat de l'importation à l'utilisateur 7) L'utilisateur traite les données de la base -- Extensions : -- Performance : la rapidité d'exécution est primordiale (le volume de données étant assez élevé). -On priviligie la qualité avec une fiabilité haute. -- Open issues : Que faire si erreur lors du traitement du fichier ? + +**Extensions :** + +**Performance :** la rapidité d'exécution est primordiale (le volume de +données étant assez élevé). On priviligie la qualité avec une fiabilité haute. + +**Open issues :** Que faire si erreur lors du traitement du fichier ? => Reporter l'erreur à l'utilisateur. -Importer des données dans une base via des fichiers XML. --> Nécéssite la création d'un XSD ou DTD. +2.9 Export +---------- -Export ------- +**Use case :** 5.Export. -- Use case : 5.Export -- Goal in context : exporter des données dans un fichier depuis une base +**Goal in context :** exporter des données dans un fichier depuis une base (tables, données). -- Scope : MSM -- Level : fonctionnalité -- Primary actor : utilisateur de MSM -- Trigger : l'utilisateur désire exporter les données de la base en cours -- Frequency : peu souvent - 2/jour -- Pre-conditions : - PRE1 : la base de données doit exister et être connue - PRE2 : l'utilisateur doit être connecté à la base -- Post-conditions : - POST1 : un fichier contenant les données est créé - POST2 : le fichier peut servir pour une réimportation -- Main success scenario : + +**Scope :** MSM. + +**Level :** fonctionnalité. + +**Primary actor :** utilisateur de MSM. + +**Trigger :** l'utilisateur désire exporter les données de la base en cours. + +**Frequency :** peu souvent ~= 2/jour. + +**Pre-conditions :** + - PRE1 : la base de données doit exister et être connue. + - PRE2 : l'utilisateur doit être connecté à la base. + +**Post-conditions :** + - POST1 : un fichier contenant les données est créé. + - POST2 : le fichier peut servir pour une réimportation. + +**Main success scenario :** + 1) L'utilisateur se connecte à la base de données 2) L'utilisateur désire exporter les données de la base 3) MSM demande un nom de fichier 4) L'utilisateur entre un nom désiré pour le fichier 5) MSM crée le fichier 6) MSM réalise l'exportation dans le fichier -- Extensions : -- Performance : la rapidité d'exécution est primordiale (le volume de données étant assez élevé). -On priviligie la qualité avec une fiabilité haute. -- Open issues : Que faire si erreur lors de transmission des données dans + +**Extensions :** + +**Performance :** la rapidité d'exécution est primordiale (le volume de +données étant assez élevé). On priviligie la qualité avec une fiabilité haute. + +**Open issues :** que faire si erreur lors de transmission des données dans le fichier ? -Exporter des données d'une base dans des fichiers XML. --> Nécéssite la création d'un XSD ou DTD. +2.10 Connect +------------ +**Use case :** 6.Connect. -Connect -------- +**Goal in context :** se connecter à une base de données BigTable +préalablement choisie pour la rendre active dans MSM. -- Use case : 6.Connect -- Goal in context : se connecter à une base de données BigTable -préalablement choisie -pour la rendre active dans MSM. -- Scope : MSM - GUI/IHM -- Level : fonctionnalité -- Primary actor : utilisateur de MSM -- Trigger : l'utilisateur désire se connecter à une base -- Frequency : très souvent - 100/jour -- Pre-conditions : - PRE1 : la base distante doit exister -- Post-conditions : - POST1 : l'utilisateur est connecté - POST2 : l'utilisateur peut manipuler la base -- Main success scenario : +**Scope :** MSM - GUI/IHM. + +**Level :** fonctionnalité. + +**Primary actor :** utilisateur de MSM. + +**Trigger :** l'utilisateur désire se connecter à une base. + +**Frequency :** très souvent ~= 100/jour. + +**Pre-conditions :** + - PRE1 : la base distante doit exister. + +**Post-conditions :** + - POST1 : l'utilisateur est connecté. + - POST2 : l'utilisateur peut manipuler la base. + +**Main success scenario :** + 1) L'utilisateur désire se connecter 2) L'utilisateur choisit une base de données à laquelle se connecter - 3) En fonction de la base, MSM demande diverses informations de - connexion (utilisateur, mot de passe, port...) + 3) En fonction de la base, MSM demande diverses informations de connexion +(utilisateur, mot de passe, port...) 4) L'utilisateur entre ces informations et se connecte 5) MSM renvoie le résultat de la connexion 6) L'utilisateur traite la base -- Extensions : - 2.a : l'utilisateur recherche le nom d'une base -- Performance : la rapidité d'exécution est primordiale étant donné la fréquence d'exécution. -Gestion des erreurs importante. -Extend ------- +**Extensions :** -- Use case : 7.Extend -- Goal in context : Etendre MSM en développant un plugin correspondant à -une nouvelle base de données BigTable (graphique et fonctionnalités) -pour la rendre active dans MSM. -- Scope : MSM - GUI/IHM -- Level : fonctionnalité -- Primary actor : développeur -- Trigger : le développeur veut ajouter une nouvelle base dans MSM -- Frequency : peu souvent 1/semaine -- Pre-conditions : - PRE1 : le développeur dispose des API MSM -- Post-conditions : - POST1 : la base de données développée est utilisable dans MSM -- Main success scenario : - 1) Le développeur désire développer un plugin - 2) Le développeur implémente l'interface BigTable - 3) Le développeur implémente l'interface GUI en se servant de - son implémentation de BigTable - 4) Le développeur crée un JAR du plugin -- Extensions : -- Performance : + 2.a l'utilisateur recherche le nom d'une base + +**Performance :** la rapidité d'exécution est primordiale étant donné la +fréquence d'exécution. Gestion des erreurs importante. + +2.11 Extend +----------- + +**Use case :** 7.Extend. +** Goal in context :** Etendre MSM en développant un plugin correspondant à +une nouvelle base de données BigTable (graphique et fonctionnalités) pour la +rendre active dans MSM. + +**Scope :** MSM - GUI/IHM. + +**Level :** fonctionnalité. + +**Primary actor :** développeur. + +**Trigger :** le développeur veut ajouter une nouvelle base dans MSM. + +**Frequency :** peu souvent ~= 1/semaine. + +**Pre-conditions :** + - PRE1 : le développeur dispose des API MSM + +**Post-conditions :** + - POST1 : la base de données développée est utilisable dans MSM + +**Main success scenario :** + + 1) Le développeur désire développer un plugin + 2) Le développeur implémente l'interface BigTable + 3) Le développeur implémente l'interface GUI en se servant de son + implémentation de BigTable + 4) Le développeur crée un JAR du plugin + +**Extensions :** +**Performance :** Added: trunk/src/site/doc/rapport/img/domain.png =================================================================== (Binary files differ) Property changes on: trunk/src/site/doc/rapport/img/domain.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/site/doc/rapport/img/package.png =================================================================== (Binary files differ) Property changes on: trunk/src/site/doc/rapport/img/package.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/site/doc/rapport/img/planning.png =================================================================== (Binary files differ) Property changes on: trunk/src/site/doc/rapport/img/planning.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/site/doc/rapport/img/usecase.png =================================================================== (Binary files differ) Property changes on: trunk/src/site/doc/rapport/img/usecase.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/src/site/doc/rapport/rapport.rst =================================================================== --- trunk/src/site/doc/rapport/rapport.rst 2010-03-13 12:41:29 UTC (rev 233) +++ trunk/src/site/doc/rapport/rapport.rst 2010-03-13 18:44:16 UTC (rev 234) @@ -3,40 +3,47 @@ ====================================================== :Authors: - Gilles CRIELOUE., - Dorian LANGLAIS., - Florent GILET., - Amaury FAGES., + Gilles CRIELOUE, + Dorian LANGLAIS, + Florent GILET, + Amaury FAGES, :Version: 1.0 of 9/03/10 :Dedication: To Code Lutin & Université de Nantes ------------------------------------------------------- +1. Spécifications : préliminaires +================================= -Spécifications : préliminaires -============================== +1.1 Le demandeur +---------------- -Demandeur ---------- - Code Lutin, Société de Service en Logiciel Libre -Créée en 2002, spécialiste des environnements libres, la SSLL1) Code Lutin, basée à Nantes développe son activité dans la région du Grand Ouest. +Créée en 2002, spécialiste des environnements libres, la SSLL1) Code Lutin, +basée à Nantes développe son activité dans la région du Grand Ouest. -Code Lutin est spécialisée autour des technologies Java JEE et UML: conception, architectures JEE, outils JEE, MDA (Model Driven Architecture), développement/migration d’applications JEE, formation. +Code Lutin est spécialisée autour des technologies Java JEE et UML: conception, +architectures JEE, outils JEE, MDA (Model Driven Architecture), développement/ +migration d’applications JEE, formation. Code Lutin propose une gamme de services adaptée aux demandes spécifiques. L’offre de service de Code Lutin comprend: - * du développement de logiciel (forfait ou régie) - * de l’intégration et de la maintenance de systèmes clés en main - * du support - * du conseil et de la veille technologique +* du développement de logiciel (forfait ou régie) +* de l’intégration et de la maintenance de systèmes clés en main +* du support +* du conseil et de la veille technologique -Code Lutin a construit au fil de l’expérience acquise un processus propre hautement outillé avec des objectifs tels que l’obtention d’un produit fidèle au besoin exprimé par le client, l’amélioration constante de la qualité du logiciel, l’assurance de conformité et de non régression grâce aux tests unitaires, le respect des délais. +Code Lutin a construit au fil de l’expérience acquise un processus propre +hautement outillé avec des objectifs tels que l’obtention d’un produit fidèle +au besoin exprimé par le client, l’amélioration constante de la qualité du +logiciel, l’assurance de conformité et de non régression grâce aux tests +unitaires, le respect des délais. -Libre Entreprise +Entreprise membre de : +1. Libre Entreprise + Ce réseau regroupe des entreprises ayant des spécialités proches ou complémentaires, en particulier dans le domaine du logiciel libre. Toutes partagent les mêmes valeurs et modes de fonctionnement, basés sur la @@ -44,7 +51,7 @@ (Biarritz, Lille, Montpellier, Nantes, Paris, Tours, Liévin, Ganges, Bourges, Toulouse, Grenoble et Laval) -Alliance Libre +2. Alliance Libre Alliance Libre est le pôle d’expertise en logiciels libres de la région nantaise. L’association a été créée au début de l’année @@ -53,7 +60,7 @@ professionnel. Nous nous sommes regroupés pour promouvoir nos savoir- faire, améliorer notre visibilité et accroître notre notoriété. -April +3. April Code Lutin est membre de l’April qui a pour vocation de promouvoir et défendre le logiciel libre depuis 1996. Forte de ses 4567 adhérents @@ -62,8 +69,8 @@ auprès d’un large public de professionnels, particuliers et institutions en France. -La demande ----------- +1.2 La demande +-------------- Voyons voir ce qui se cache derrière le nom de code MSM (Map Storage Manager) : @@ -84,41 +91,49 @@ souhaiter utiliser une nouvelle base. Il s'agit donc d'une architecture à plugins sous-jacente. -Objectifs ---------- +1.3 Objectifs +------------- -- Accroître la productivié des utilisateurs de HBase et autres -- Permettre une adaptation rapide aux nouvelles bases -- Fournir un produit fonctionnel, ergonomique et performant +* Accroître la productivié des utilisateurs de HBase et autres +* Permettre une adaptation rapide aux nouvelles bases +* Fournir un produit fonctionnel, ergonomique et performant -Outils ----------------------- +1.4 Outils +---------- -- Technologies : Java, Maven, JAXX, JMX -- SVN : Dépôt de Code Lutin prévu à cet effet. +* Technologies : Java, Maven, JAXX, JMX. + +* SVN : Dépôt de Code Lutin prévu à cet effet + - Architecture Maven comportant un pom.xml natif à Code Lutin permettant l'utilisation d'artifact JAXX notamment. -- Intégration continue : Hudson - - Site répertoriant un ensemble de statistiques sur chaque projet - et effectuant compilation et jeux de tests à chaque validation sur + +* Intégration continue : Hudson + + - Site répertoriant un ensemble de statistiques sur chaque projet et + effectuant compilation et jeux de tests à chaque validation sur le dépôt de manière automatique. -- Communication : Maillist de Nuiton pour le développement, l'utilisation -et le commit. -Chiffrage et organisation -------------------------- +* Communication : Maillist de Nuiton pour le développement, l'utilisation et le commit. -Planning prévisionnel +1.5 Chiffrage et organisation +----------------------------- -[Image du planning] +.. figure:: img/planning.png + :width: 100% + :scale: 120% + Planning prévisionnel + + + Planning de réunions jalons prévues avec M. Benjamin Poussin : -- 26/01/2010 -- 1/02/2010 -- 9/02/2010 -- 18/02/2010 -- 04/03/2010 +* 26/01/2010 +* 1/02/2010 +* 9/02/2010 +* 18/02/2010 +* 04/03/2010 Permettant à chaque fois de faire le point sur le travail réalisé et le travail à faire. @@ -126,16 +141,16 @@ Un compte rendu symbolisé par les rectangles noirs en fin de semaine suit chaque réunion. -Spécifications : analyse -======================== +2. Spécifications : analyse +=========================== -analyse des technologies ------------------------- +2.1 analyse des technologies +---------------------------- -Maven -~~~~~ +2.1.1 Maven +~~~~~~~~~~~ -Maven est connu de bon nombre de développeurs. Il s'agit d'un outil de +Maven est connu d'un bon nombre de développeurs. Il s'agit d'un outil de développement permettant de faciliter la compilation, la documentation, les tests et surtout les dépendances récupérées automatiquement sur l'Internet. @@ -143,8 +158,8 @@ Code Lutin dispose de leur propre pom.xml permettant d'aller récupérer les dépendances qui vont suivre. -Jaxx -~~~~ +2.1.2 Jaxx +~~~~~~~~~~ Jaxx est un framework permettant de générer une interface graphique en SWING (Java). SWING est parfois fastidieux à gérer et le code n'est @@ -163,348 +178,77 @@ Plus de précisions à cet endroit : http://maven-site.nuiton.org/jaxx/index.html -Jmx -~~~ +2.1.3 Jmx +~~~~~~~~~ -analyse du domaine ------------------- +Jmx est une API Java permettant à la base de gérer la dynamique d'une +application en cours d'exécution. Elle permet notamment de faire du paramétrage +(modification dynamique), modifier les fichiers de configurations, générer +des statistiques, notifier ... -Analyse de BigTable (de google Inc.) +Dans notre cadre, nous nous en servirons pour réaliser un monitoring de +l'application. -But de l'analyse -~~~~~~~~~~~~~~~~ +Plus de détails sur le Wiki : +http://fr.wikipedia.org/wiki/JMX -Permettre la compréhension de Big Table et de ses diverses implémentations -ainsi que l'extraction d'interface pour le projet MSM. +2.2 analyse du domaine +---------------------- -Introduction : Qu'est-ce que BigTable ? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. include:: ../analyse/analyseBT.rst -BigTable est la spécification d'un système de stockage distribué permettant -de gérer des données. Il est conçu pour s'adapter fiablement à des tailles -de contenu allant jusqu'au "Peta". BigTable est utilisé pour plusieurs raisons : +2.3 Description des cas d'utilisation +------------------------------------- -- Toucher un large ensemble d'applications -- Mise à l'échelle -- Très bonnes performances (temps de réponse...) -- Forte disponibilité +.. figure:: img/usecase.png + :width: 100% + :scale: 125% -Le modèle de données de BigTable -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Cas d'utilisation -Le modèle de données de BigTable se comporte comme un dictionnaire -multidimensionnel (matrice) indexé par le triplet -<row key, column key, timestamp>. Chaque valeur de ce dictionnaire -est un table d'octets. +.. include:: ../analyse/usecase.rst -Les clés pour une rangée du dictionnaire sont des chaînes de charactères -arbitraires et BigTable maintient les données dans un ordre lexicographique -grâce à ce type de clé. -ex de clé de rangée : "com.google.maps/index.html" (reversed URL) +2.12 Modèle du domaine +---------------------- -La portée d'une rangée est appelée "tablet", unité de distribution et d'équilibrage -de charge. +.. figure:: img/domain.png + :width: 100% + :scale: 90% -Les clés de colonne sont groupées en ensembles appelés "famille de colonnes". -Une clé de colonne est nommé suivant le schéma : family:qualifier. -Les noms de famille doivent être lisibles facilement mais les qualificateurs peuvent -être des chaînes de charactères arbitraires + Diagramme de classes du domaine -ex de famille de colonne : "contents:" +De manière très simple, l'application MSM utilise un ensemble de bases +de données BigTable qui peuvent être de type HashMap, HBase ou Cassandra ou +d'autres. L'application doit permettre de réaliser l'ensemble des +fonctionnalités prévues sur cet ensemble de bases de données BigTable. -Ainsi, le contenu d'une cellule indexée par <com.google.maps/index.html, contents:, ?> -serait le contenu de la page "index.html" (le code html). -Une cellule peut contenir plusieurs versions de la même donnée via le mécanisme de timestamp. -Chaque cellule stocke plusieurs timestamp en ordre décroissant si bien que : +2.13 Architecture globale (Packages) +------------------------------------ -- <com.google.maps/index.html, contents:, ts1> donne la version la plus récente du contenu. -- <com.google.maps/index.html, contents:, ts2> donne une version plus ancienne du contenu. +.. figure:: img/package.png + :width: 100% + :scale: 90% -Stockage -~~~~~~~~ + Diagramme de package -BigTable utilise le système de fichier google GFS (Google File System) -pour stocker les logs et fichiers de données. +En réalité, on veut donner la possibilité à un développeur d'intégrer +la base et les fonctionnalités qu'il souhaite dans MSM. L'application doit +donc être découpée en modules (packages). -Le format de fichier google SSTable est utilisé pour stocker les données -internes à BigTable. +Trois modules principaux composent l'application. On trouve le module +*Plugin* correspondant à chaque base et dépendant du module +gérant l'interface graphique, *Gui*, ainsi que du module *Msm* qui n'est autre +que le coeur de l'application, véritable architecture à plugins. -API BigTable (client) -~~~~~~~~~~~~~~~~~~~~~ +3. Conception +============= -Voici les fonctionnalités prévues par la spécification BigTable : - -- Création de tables. -- Création de familles de colonne. -- Suppression de tables. -- Suppression de familles de colonne. -- Changement de cluster (?). -- Changement de table. -- Changement de méta données sur une famille de colonne (droits d'accès...). -- Ecriture des données dans une table. -- Suppression des données dans une table. -- Recherche des données dans une table depuis des rangées individuelles. -- Itération sur un sous-ensemble de données d'une table. -- Manipulation avancée des données : Transactions "Lecture - Modification - Ecriture" -sur une rangée simple (BigTable ne supporte pas les transactions par rangées multiples). -- Utilisation des cellules comme compteurs d'entier. -- Excécution de scripts clients dans l'espace d'adressage des serveurs (langage : sawzall). -- Calcul parallèle avec le framework MapReduce. - -Source -~~~~~~ - -Cette analyse est une synthèse des éléments utiles dans le cadre du -projet, issue de la spécification même de Google Inc. -"BigTable: A Distributed Storage System for Structured Data" - -lien : labs.google.com/papers/bigtable-osdi06.pdf - -Description des cas d'utilisation ---------------------------------- - -Describe Database ------------------ - -- Use case : 11.Describe Database -- Goal in context : décrire la structure d'une base de données -BigTable (Hbase, HashMap...) en affichant les différentes tables graphiquement selon le plugin de la base. -- Scope : MSM -GUI/IHM -- Level : sous-fonctionnalité -- Primary actor : utilisateur de MSM -- Trigger : L'utilisateur souhaite décrire la base en cours -- Frequency : très souvent (toute utilisation d'une base passe par sa description normalement) - 100/jour -- Pre-conditions : - PRE1 : l'utilisateur doit être connecté à la base qu'il veut décrire. - On connait la base. -- Post-conditions : - POST1 : l'utilisateur dispose graphiquement de la structure de la - base. -- Main success scenario : - 1) L'utilisateur se connecte à la base de données - 2) MSM renvoie la base de données à l'utilisateur - 3) L'utilisateur souhaite décrire sa base - 4) MSM renvoie la structure de la base (tables) - 5) L'utilisateur traite la structure de la base -- Extensions : -- Performance : selon la fréquence d'exécution, doit être très rapide. -L'utilisateur doit obtenir la structure de la base immédiatement. - -Describe Table +3.1 Msm (Core) -------------- -- Use case : 12.Describe Table -- Goal in context : décrire la structure d'une table d'une base -BigTable (Hbase, HashMap...) en affichant les différents éléments (colonnes, types...) -graphiquement selon le plugin de la base. -- Scope : MSM -GUI/IHM -- Level : sous-fonctionnalité -- Primary actor : utilisateur de MSM -- Trigger : L'utilisateur souhaite décrire une table de la base -- Frequency : très souvent (toute utilisation d'une table passe par sa description normalement) - 100/jour -- Pre-conditions : - PRE1 : l'utilisateur doit être connecté à la base qu'il veut décrire. - On dispose d'un accès à la table. -- Post-conditions : - POST1 : l'utilisateur dispose graphiquement de la structure de la - table. -- Main success scenario : - 1) L'utilisateur se connecte à la base de données - 2) MSM renvoie la base de données à l'utilisateur - 3) L'utilisateur décrit la base - 4) MSM renvoie la structure de la base (tables) - 5) L'utilisateur sélectionne une table - 6) MSM renvoie la structure de la table - 7) L'utilisateur traite la structure de la table -- Extensions : - 5.a : l'utilisateur effectue une recherche sur la table -- Performance : selon la fréquence d'exécution, doit être très rapide. -L'utilisateur doit obtenir la structure de la table immédiatement. - -View content ------------- - -- Use case : 2.View content -- Goal in context : obtenir les données d'une table (son contenu) d'une base -BigTable (Hbase, HashMap...) selon le plugin de la base. -- Scope : MSM - GUI/IHM -- Level : fonctionnalité -- Primary actor : utilisateur de MSM -- Trigger : L'utilisateur souhaite voir les données contenues dans une table. -- Frequency : très souvent - 100/jour -- Pre-conditions : - PRE1 : l'utilisateur doit être connecté à la base dont il veut les - données. On dispose d'un accès à la table. -- Post-conditions : - POST1 : l'utilisateur dispose graphiquement des données contenues - dans la table. -- Main success scenario : - 1) L'utilisateur se connecte à la base de données - 2) MSM renvoie la base de données à l'utilisateur - 3) L'utilisateur décrit la base - 4) MSM renvoie la structure de la base (tables) - 5) L'utilisateur sélectionne une table et demande à voir son contenu - 6) MSM renvoie les données de la table - 7) L'utilisateur traite les données -- Extensions : - 5.a : l'utilisateur effectue une recherche sur la table -- Performance : selon la fréquence d'exécution, doit être très rapide. -L'utilisateur doit obtenir les données immédiatement. - -Monitor +3.2 GUI ------- -- Use case : 3.Monitor -- Goal in context : surveiller la base de sorte à vérifier l'activité des noeuds (charge, espace disque...) -- Scope : MSM - GUI/IHM -- Level : fonctionnalité -- Primary actor : utilisateur de MSM -- Trigger : -- Frequency : peu souvent - 10/jour -- Pre-conditions : - PRE1 : -- Post-conditions : - POST1 : -- Main success scenario : - 1) - 2) - 3) - 4) - 5) - 6) - 7) -- Extensions : - -- Performance : la qualité du monitoring est tout aussi importante que -la temps-réel (actualité des données) de la tâche. - -Import ------- - -- Use case : 4.Import -- Goal in context : importer des données dans une base de données -(tables, données). -- Scope : MSM -- Level : fonctionnalité -- Primary actor : utilisateur de MSM -- Trigger : l'utilisateur désire importer ses données dans une base -- Frequency : peu souvent - 2/jour -- Pre-conditions : - PRE1 : la base de données doit exister et être connue - PRE2 : le fichier d'importation doit exister - PRE3 : l'utilisateur doit être connecté à la base -- Post-conditions : - POST1 : les données sont insérées dans la base - POST2 : les données sont manipulables -- Main success scenario : - 1) L'utilisateur se connecte à la base de données - 2) L'utilisateur désire importer des données dans la base - 3) MSM demande à l'utilisateur de sélectionner un fichier - d'imporation - 4) L'utilisateur sélectionne un fichier d'importation - 5) MSM importe les données contenues dans le fichier - 6) MSM renvoie le résultat de l'importation à l'utilisateur - 7) L'utilisateur traite les données de la base -- Extensions : -- Performance : la rapidité d'exécution est primordiale (le volume de données étant assez élevé). -On priviligie la qualité avec une fiabilité haute. -- Open issues : Que faire si erreur lors du traitement du fichier ? -=> Reporter l'erreur à l'utilisateur. - - -Export ------- - -- Use case : 5.Export -- Goal in context : exporter des données dans un fichier depuis une base -(tables, données). -- Scope : MSM -- Level : fonctionnalité -- Primary actor : utilisateur de MSM -- Trigger : l'utilisateur désire exporter les données de la base en cours -- Frequency : peu souvent - 2/jour -- Pre-conditions : - PRE1 : la base de données doit exister et être connue - PRE2 : l'utilisateur doit être connecté à la base -- Post-conditions : - POST1 : un fichier contenant les données est créé - POST2 : le fichier peut servir pour une réimportation -- Main success scenario : - 1) L'utilisateur se connecte à la base de données - 2) L'utilisateur désire exporter les données de la base - 3) MSM demande un nom de fichier - 4) L'utilisateur entre un nom désiré pour le fichier - 5) MSM crée le fichier - 6) MSM réalise l'exportation dans le fichier -- Extensions : -- Performance : la rapidité d'exécution est primordiale (le volume de données étant assez élevé). -On priviligie la qualité avec une fiabilité haute. -- Open issues : Que faire si erreur lors de transmission des données dans -le fichier ? - -Connect -------- - -- Use case : 6.Connect -- Goal in context : se connecter à une base de données BigTable -préalablement choisie -pour la rendre active dans MSM. -- Scope : MSM - GUI/IHM -- Level : fonctionnalité -- Primary actor : utilisateur de MSM -- Trigger : l'utilisateur désire se connecter à une base -- Frequency : très souvent - 100/jour -- Pre-conditions : - PRE1 : la base distante doit exister -- Post-conditions : - POST1 : l'utilisateur est connecté - POST2 : l'utilisateur peut manipuler la base -- Main success scenario : - 1) L'utilisateur désire se connecter - 2) L'utilisateur choisit une base de données à laquelle se connecter - 3) En fonction de la base, MSM demande diverses informations de - connexion (utilisateur, mot de passe, port...) - 4) L'utilisateur entre ces informations et se connecte - 5) MSM renvoie le résultat de la connexion - 6) L'utilisateur traite la base -- Extensions : - 2.a : l'utilisateur recherche le nom d'une base -- Performance : la rapidité d'exécution est primordiale étant donné la fréquence d'exécution. -Gestion des erreurs importante. - -Extend ------- - -- Use case : 7.Extend -- Goal in context : Etendre MSM en développant un plugin correspondant à -une nouvelle base de données BigTable (graphique et fonctionnalités) -pour la rendre active dans MSM. -- Scope : MSM - GUI/IHM -- Level : fonctionnalité -- Primary actor : développeur -- Trigger : le développeur veut ajouter une nouvelle base dans MSM -- Frequency : peu souvent 1/semaine -- Pre-conditions : - PRE1 : le développeur dispose des API MSM -- Post-conditions : - POST1 : la base de données développée est utilisable dans MSM -- Main success scenario : - 1) Le développeur désire développer un plugin - 2) Le développeur implémente l'interface BigTable - 3) Le développeur implémente l'interface GUI en se servant de - son implémentation de BigTable - 4) Le développeur crée un JAR du plugin -- Extensions : -- Performance : - -Modèles et architecture du domaine ----------------------------------- - -Package -MSM (Core) -Plugin -GUI - -Conception -========== +3.2 Plugin +---------- Deleted: trunk/src/site/doc/rapport/rst2pdf-net.py =================================================================== --- trunk/src/site/doc/rapport/rst2pdf-net.py 2010-03-13 12:41:29 UTC (rev 233) +++ trunk/src/site/doc/rapport/rst2pdf-net.py 2010-03-13 18:44:16 UTC (rev 234) @@ -1,147 +0,0 @@ -#!/usr/bin/env python -import os -import sys -import time -import urllib2 -from urllib2 import HTTPError -from urllib import urlencode -from optparse import OptionParser - -CLIENT_VERSION = '1.0' -API_VERSION = '1' - -API_BASE_URL = '%s://%s' -API_POST = '%s/post' -API_DOWNLOAD = '%s/download' -API_SCRIPT_VERSION = '%s/script_version' - -DEFAULT_PROTCOL = 'http' -DEFAULT_DOMAIN = 'www.rst2pdf.net' -DEFAULT_ENCODING = 'utf-8' -DEFAULT_RETRY_NUM = 5 -DEFAULT_SECURE_PROTCOL = 'https' -DEFAULT_SECURE_DOMAIN = 'rst2pdf-net.appspot.com' - -def get_opener(): - opener = urllib2.build_opener() - opener.addheaders = [('User-agent', 'rst2pdf-net/%s' % CLIENT_VERSION)] - return opener - -def url_get(url, retry=DEFAULT_RETRY_NUM, output_status=True, output=sys.stdout): - opener = get_opener() - for x in range(retry): - if output_status: - output.write('.') - try: - time.sleep(x * 2) - response = opener.open(url) - return response.read() - except HTTPError: - pass - return None - -def rst_net_post(body, domain=DEFAULT_DOMAIN, protocol=DEFAULT_PROTCOL, password=None): - url_base = API_BASE_URL % (protocol, domain) - url_post = API_POST % url_base - opener = get_opener() - params = {'body': body, 'format': 'text', 'version': API_VERSION} - if password: - params['password'] = password - response = opener.open(url_post, urlencode(params)) - return response.read() - -def parse_text_response(response): - response_dict = {} - for line in response.splitlines(): - if line and '=' in line: - key, value = line.split('=', 1) - response_dict[key] = value - return response_dict - -def main(): - usage = "Usage: %prog [options] [filename]" - parser = OptionParser(usage=usage) - parser.add_option('-d', '--domain', - dest='domain', - help='use other domain, default domain is "%s", if secure mode is "%s"' \ - % (DEFAULT_DOMAIN, DEFAULT_SECURE_DOMAIN), - default=DEFAULT_DOMAIN) - parser.add_option('-c', '--protocol', - dest='protocol', - help='use other protocol, default protocol is "%s", if secure mode is "%s"' \ - % (DEFAULT_PROTCOL, DEFAULT_SECURE_PROTCOL)) - parser.add_option('-e', '--encoding', - dest='encoding', - help='use other input encoding, default encoding is "%s"' % DEFAULT_ENCODING) - parser.add_option('-o', '--output', - dest='output', - help='output file path') - parser.add_option('-s', '--secure', - action='store_true', - dest='secure', - help='use secure mode') - parser.add_option('-p', '--password', - dest='password', - help='use password(force secure mode)') - options, args = parser.parse_args() - - if not args: - stream = sys.stdin - input_file = '' - else: - stream = open(args[0], 'rb') - input_file = args[0] - source = stream.read() - if options.encoding: - source = source.decode(options.encoding).encode(DEFAULT_ENCODING) - secure = options.secure - if options.password: - secure = True - domain = options.domain - protocol = options.protocol - if secure: - if domain == DEFAULT_DOMAIN: - domain = DEFAULT_SECURE_DOMAIN - if not protocol: - protocol = DEFAULT_SECURE_PROTCOL - protocol = protocol or DEFAULT_PROTCOL - - sys.stdout.write('Sending rst...\n') - - response = parse_text_response(rst_net_post(source, domain, protocol, options.password)) - - if not 'hash' in response: - sys.stderr.write("Error: Response don't have hash key.\n") - return - - sys.stdout.write('Document hash: %s\n' % response['hash']) - - if options.password: - sys.stdout.write('Pdf was created, download url is "%s".\n' % response['url']) - else: - url_download = API_DOWNLOAD % response['url'][:-1] - - sys.stdout.write('Downloading pdf from "%s"\n' % url_download) - - pdf_body = url_get(url_download) - sys.stdout.write('\n') - if not pdf_body: - sys.stderr.write('Error: Download faled "%s".\n' % url_download) - return - - if options.output: - output_file = options.output - elif input_file: - base, ext = os.path.splitext(input_file) - output_file = '%s.pdf' % base - else: - output_file = '%s.pdf' % response['hash'] - sys.stdout.write('Writing pdf file "%s"...\n' % output_file) - f = open(output_file, 'wb') - f.write(pdf_body) - f.close() - - sys.stdout.write('Completed.\n') - -if __name__ == '__main__': - main() Modified: trunk/src/site/reports/planningMSM.xls =================================================================== (Binary files differ)