Complément au logiciel de supervision '' Nagios ''maryjulie.free.fr/Legrand/Mémoire de...

of 43/43
Florian DELMAS Syndicat Inter-hospitalier du Limousin I.U.T. du Limousin Département Informatique Maître de stage : M. Thierry BERTHIER Complément au logiciel de supervision '' Nagios '' Rapport de stage réalisé du 26 Mars au 22 Mai 2007 Deuxième année de DUT Informatique Année universitaire 2006-2007 1
  • date post

    14-Sep-2018
  • Category

    Documents

  • view

    217
  • download

    0

Embed Size (px)

Transcript of Complément au logiciel de supervision '' Nagios ''maryjulie.free.fr/Legrand/Mémoire de...

  • Florian DELMAS Syndicat Inter-hospitalier du Limousin

    I.U.T. du Limousin Dpartement Informatique Matre de stage :M. Thierry BERTHIER

    Complment au logiciel de supervision '' Nagios ''

    Rapport de stage ralis du 26 Mars au 22 Mai 2007

    Deuxime anne de DUT Informatique Anne universitaire 2006-2007

    1

  • Je remercie M. Alain MENIEUX pour son accueil au sein de l'tablissement ainsi que Xavier LEVRAT pour son aide sur Nagios.

    Mes remerciements vont aussi Marc PODAVINI qui m'a clair sur les fonctionnalits de Customer First.

    2

  • Rsum

    Le rseau du Syndicat Inter-hospitalier du Limousin (ou SIL) est gr par l'outil de supervision Nagios. Durant ce stage, j'ai labor un complment cet outil. Il permet de calculer les statistiques de disponibilit du rseau du SIL, en s'appuyant sur les donnes de Nagios.

    Les deux premires semaines, je me suis attach configurer mon serveur Web de tests et suivre quelques tutoriels du Zend Framework le framework PHP que j'ai utilis pour l'implmentation de mon application.

    Aprs cette phase de mise en place de mon espace de travail, j'ai analys l'existant afin de btir une vision solide de mon application.

    Puis, je l'ai implment en PHP, avec le Zend Framework qui propose une programmation oriente objet, avec un modle MVC.

    Enfin, j'ai essay de rsoudre des problmes d'intgrations de mon produit dans l'tablissement.

    Arriv bon terme, le stage a t trs enrichissant pour moi, la fois dans la programmation en PHP et dans ma vision du monde du travail.

    3

  • 4

  • Sommaire

    Introduction....................................................................................................................... 6

    I. Prsentation des lments cls du stage......................................................... 7

    A. Le SIL, l'tablissement d'accueil ................................................................ 7

    B. Nagios et son complment........................................................................... 9 i. Nagios, outil de supervision rseau..................................................... 9 ii. Le complment de Nagios, sujet du stage............................................ 9

    C. Les choix conceptuels du projet..................................................................10 i. Les choix pratiques................................................................................. 10 ii. Le Zend Framework, un framework d'avenir....................................... 12 iii. Le choix des outils d'analyse................................................................. 14

    D. Le droulement du projet..............................................................................15

    II. La construction de l'application.........................................................................16

    A. L'laboration de la base de donnes........................................................... 16 i. Liaison entre deux bases de donnes................................................... 16 ii. Approfondissement sur le contenu de la nouvelle base..................... 16

    B. L'analyse avec UML, prise en compte du modle MVC............................. 20 i. Dcoupage chronologique des fonctionnalits................................... 20 ii. La prise en compte du modle MVC...................................................... 22

    III. L'implmentation au travers du Zend Framework........................................... 24

    A. L'affichage, le premier aperu de l'application........................................... 24

    B. L'implmentation avec le Zend Framework................................................ 29 i. Le fichier boot strap................................................................................ 29 ii. Les contrleurs....................................................................................... 30

    a) Architecture principale de l'action ''hoteAction'' ........................... 31 b) Aperu d'une des fonctions de calculs des statistiques............... 34

    iii. Les vues................................................................................................... 39

    C. Les problmes d'intgration.........................................................................41

    Conclusion........................................................................................................................ 42

    5

  • Introduction

    L'efficacit d'un service peut se visualiser au travers de statistiques labores sur des indices pertinents. C'est dans ce souci de connaissance de la qualit que le besoin d'un complment Nagios spcialis dans ce domaine, est apparu au sein du Syndicat Interhospitalier du limousin (ou SIL), mon tablissement d'acceuil. En effet, Nagios logiciel de supervision de rseau utilis par le SIL n'a pas de fonctionnalit permettant de visualiser les statistiques du rseau sur une periode. Or le rseau gr par le SIL compte un certain nombre de machines appartenant ses adhrants. Le complment a pour but de combler ce manque, afin d'avoir un regard sur la qualit offerte par le SIL ses adhrants dans l'administration de son rseau.

    Dans un premier temps, nous introduirons les lments fondamentaux du stage. Aprs une prsentation du SIL et de Nagios, j'aborderai le point central du stage : le complment de Nagios. J'aborderai aussi les choix que j'ai t amen faire et le travail ralis.

    Puis nous dtaillerons les deux tudes de l'analyse du projet. La premire dfinit les lments prsents avant mon arrive au SIL et leur impact sur le dveloppement de mon application. La deuxime tude est un dcoupage de ses fonctionnalits.

    Enfin, nous verrons comment l'implmentation a t ralise avec le Zend Framework. Je dtaillerai les fonctions les plus importantes pour avoir un aperu concret, et j'expliquerai les diffrences qu'il y a avec l'analyse et pourquoi elles sont ncessaires.

    6

  • I. Prsentation des lments cls du stage

    A. Le SIL, l'tablissement d'accueil

    Le SIL est une administration publique cre par arrt prfectoral en date du 16 Novembre 1987. Il est administr par un conseil d'administration et dirig par sa secrtaire gnrale, Carole BLANCHARD. Grce au SIL, les tablissements sanitaires et sociaux, tels que des hpitaux, des maisons de retraites, ont accs un soutien dans le secteur informatique en y adhrant.

    Historiquement, le SIL s'occupait de la gestion financire de ces tablissements. Par exemple, la gestion des fiches de paye tait totalement prise en charge.Maintenant, cette gestion est toujours prise en charge mais n'est plus majoritaire dans son activit. En effet, le SIL a tendu ses services de manire pouvoir proposer de l'infogrance et un support informatique aux tablissements du domaine mdical. Il se propose mme comme pouvant tre le fournisseur d'accs internet ses adhrents. Ceci se matrialise par la prsence importante de matriels informatiques tels que des serveurs ( une trentaine au total ) dans les locaux du SIL. De mme, un service de maintenance et d'assistance est la disposition des adhrents.

    Le SIL a dj plus d'une centaine d' adhrents son actif et tous ne font pas forcment partie de la rgion. Par exemple, il intervient dans des tablissements de Provence, des Alpes, de Cte d'azur et aussi de rgion parisienne. Selon la taille de l'tablissement, les interventions du SIL diffrent. Elles peuvent tre divises en deux catgories :

    - Pour les grosses structures, le SIL ne gre qu'une partie prcise de ces tablissements ( gnralement celle qui concerne la distribution de logiciels, avec son support )

    - Pour les petites structures, le SIL leur propose de l'infogrance ainsi qu'un soutien dans le dploiement de matriels informatiques.

    Le SIL est compos d'une soixantaine de personnes. Une dizaine d'entre-elles participent l'association Reimp'Hos. Cette association a pour vocation de crer un rseau de communication entre les quipes hospitalires sur les donnes des patients du domaine public ou priv et travaillent main dans la main avec le SIL. Elle souhaite aussi crer "Sant limousin", un projet qui a pour objectif de rassembler l'ensemble des donnes mdicales pour chaque patient.

    7

  • Voici l'organigramme actuel du SIL :

    Le btiment du SIL est bas Isle - situ dans la priphrie de Limoges - au sein d'une zone rsidentielle. Il est compos deux tages et un sous-sol :

    - le rez-de-chausse contient la partie production du SIL ( bulletin de paye, CD-rom ... ),

    - le premier tage est rserv la partie technique et informatique,

    - le deuxime tage comporte la salle de runion ainsi que des bureaux,

    - au sous-sol,sont entreposs les serveurs et les imprimantes. Il contient aussi le garage des voitures du SIL pour intervenir rapidement chez les adhrants.

    Le SIL prvoit d'agrandir ses locaux par la construction d'un autre btiment situ proximit.

    Le premier tage - rserv la partie technique et informatiques - est compose de plusieurs pices o certains ples d'activits sont regroups :

    - la premire pice regroupe l'quipe du support technique des logiciels Windows et l'assemblage d'ordinateurs, - la deuxime regroupe les techniciens rseaux et du support technique Linux, - la troisime concerne les applicatifs de Reimp'Hos - la quatrime concerne le rseau et les tlcommunications.

    C'est dans cette dernire pice que se situe mon bureau, au ct de monsieur MENIEUX - mon responsable de stage - et de monsieur BOISSEUIL.

    8

  • B. Nagios et son complment

    Le complment de Nagios que j'ai dvelopp, permet de raliser des statistiques sur des lments du rseau gr par le SIL. Avant de voir l'intgralit des fonctionnalits de ce complment, je vais expliquer ce qu'est le logiciel principal, c'est dire Nagios.

    i. Nagios, outil de supervision rseau

    Nagios est un logiciel libre de supervision de rseaux informatique complet. Il permet de connatre l'tat de l'ensemble des machines d'un rseau ainsi que leurs caractristiques partir d'un simple navigateur Web ; comme par exemple, la capacit mmoire restante sur leurs disques durs, la temprature et le taux d'activit des processeurs. Ces machines sont appeles des htes car elles "hbergent" des services. Un grand nombre de mini-programmes ( ou plug-ins ) peuvent tre installs dans Nagios afin d'enrichir ses fonctionnalits, comme "NCDOUtils" en lui donnant ainsi la possibilit d'archiver les donnes. de Nagios dans une base de donnes.

    Si un problme survient dans un rseau complexe qui comporte des machines dpendantes d'autres machines, Nagios peut dterminer quelle machine pose le plus de problmes.En terme de compatibilit, Nagios supporte la plupart des systmes d'exploitation comme Linux ou Windows.

    ii. Le complment de Nagios, sujet du stage

    L'objectif principal de mon application est de pouvoir visualiser les statistiques du rseau et diter des comptes rendus sur la qualit du service du SIL pour informer les adhrents et pour le SIL lui-mme. On s'attache donc savoir si un hte a t frquemment hors service ou non, et dans quelle priode.

    L'ensemble des fonctionnalits ont t dfinies avec Alain MENIEUX ainsi qu'avec Xavier LEVRAT utilisateur principal de Nagios au SIL.

    L'application doit permettre l'utilisateur de :

    - slectionner un ou plusieurs htes, dont il souhaite avoir les statistiques

    - slectionner une plage horaire personnalise ou contractuelle

    - saisir l'heure de dbut et de fin de l'horaire dans le cadre de la plage horaire personnalise

    - formater le tableau des statistiques au format XML ou PDF.

    Ce dernier point donne la possibilit l'utilisateur de raliser un compte-rendu sur les statistiques annonces. Ainsi elles pourront tre utilises de manire concrte en dehors de l'application.

    Le point fondamental de l'application est de dterminer si un hte est hors service ou non, pour calculer les statistiques. Pour cela, j'ai d me servir de la base de donnes gnre par NCDOUtils pour y parvenir, mais une autre base de donnes a d tre prise en compte dans mon application.

    9

  • En effet, lors de la mise en place d'un matriel informatique, le SIL est amen :

    - rfrencer les donnes de l'adhrent qui en fait la demande, - rfrencer les machines proposes, - raliser le suivi technique de ce matriel.

    Le rfrencement du matriel informatique et son suivi technique sont possibles grce Nagios, alors que le rfrencement des donnes des adhrents est ralis avec le logiciel Customer First. Ce logiciel est un logiciel d'aide la gestion des appels Hotline. Par exemple, on peut y saisir les coordonnes des clients, leurs matriels etc.

    La problmatique souleve par l'utilisation de ces deux logiciels est que l'on ne peut pas connatre l'ensemble des donnes d'un matriel partir de la mme interface puisque l'outil de supervision Nagios n'enregistre que les donnes techniques du matriel, alors que Customer First ne permet ni de connatre l'tat des machines prsentes sur le rseau, ni l'architecture du rseau.Pour les activits du SIL, ces deux logiciels sont donc dpendants l'un de l'autre.

    Une information, que nous ne pouvons pas connatre ni dans Nagios ni dans Customer First, est la position gographique des matriels informatiques. Dans Nagios, le problme reste le mme : les donnes sur les machines sont purement techniques. Dans Customer First, seules les donnes des entits juridiques y figurent. Ainsi, pour un tablissement important comportant plusieurs sites gographiques, seule son adresse principale sera enregistre. Or lorsqu'un problme de rseau survient dans Nagios, il est important de pouvoir connatre o se situe le matriel en cause, afin de traiter rapidement le problme.Concrtement, ces donnes sont enregistres dans un tableau Excel pour faire la correspondance entre le propritaire, la machine et sa localisation.

    Le complment logiciel Nagios, que je devais dvelopper, avait pour but de prendre en compte ces informations puisqu'elles permettent de fournir des statistiques plus prcises sur les matriels grs par le SIL, les rendant ainsi plus utiles, aussi bien pour les adhrents que pour le SIL.

    C. Les choix conceptuels du projet i. Les choix pratiques

    Mon application a t ralise sous la forme d'un site Web, permettant ainsi d'tre consultable avec un simple navigateur Web. Le but de ce choix est de rendre mon application transportable, simple maintenir et utiliser quelque soit le poste o l'utilisateur se situe.

    Elle aurait pu tre ralise en tant que qu'application indpendante. Mais dans ce cas, il aurait t ncessaire d'installer de nouveaux composants sur les ordinateurs pour pouvoir y accder. Une telle solution n'tait pas envisageable, car cela aurait alourdi le travail des administrateurs et les nouveaux composants risqueraient de gnrer des conflits avec les programmes dj installs.

    C'est pourquoi, la solution du site Web est apparue comme la plus approprie et la moins contraignante.

    Le langage de dveloppement que j'ai utilis, tait le PHP. Ce langage est devenu un standard dans la cration de site Web li une base de donnes. Il permet de gnrer du code HTML pour crer les pages Web en fonction des rsultats retourns par le langage de la base de donnes ( le langage SQL ).

    10

  • Concrtement, le PHP est insr directement dans une page HTML. Le fichier prend alors l'extension ''.php'' ou ''.phtml''. Lors du lancement de la page, le serveur Web lance son fichier contenant du code PHP et l'excute. Une fois cette excution termine, le serveur Web a la page Web termine - gnre par le PHP. Il peut alors l'envoyer l'utilisateur.

    Ceci prsente un avantage sur la scurit : comme c'est le serveur Web qui excute le code PHP en interne et qu'il n'est visible que part lui, l'utilisateur ne peut ni dterminer la forme de la base de donnes, ni envoyer du code PHP dans un but malveillant.Dans notre cas, cet aspect scuritaire n'est pas important dans le choix du langage puisque le complment a t prvu pour tre utilis par les responsables des bases de donnes et du rseau, mais il est tout de mme notable puisque c'est l'une des forces de ce langage.

    D'autres langages auraient pu tre utiliss pour crer un site Web. J'aurais pu par exemple crer une applet Java au sein de la page HTML. Java sait trs bien faire la liaison avec une base de donnes et permet de rendre une page Web interactive sans avoir besoin de la rafraichir intgralement, contrairement au PHP. Cependant, dvelopper en Java supposerait de devoir installer ses composants sur tous les postes o la consultation du complment est ncessaire. Encore une fois, ceci est viter pour des problmes de place mmoire et de compatibilits. De plus, mon produit est destin un tablissement et sera peut tre amen voluer. Dans ce sens, il est prfrable d'utiliser un langage relativement connu pour permettre l'tablissement de modifier le code source facilement en fonction de ses besoins.

    Mon espace de dveloppement est Eclipse. Ce logiciel libre dvelopp par Eclipse Foundation, est un espace de dveloppement complet, avec une arborescence des projets, le support de plusieurs langages de programmation, ainsi que la possibilit d'ajouter des fonctionnalits via des plug-ins.

    Pour travailler dans de bonnes conditions sur un site Web, il faut pouvoir tester ses pages de faon rapide et optimale. De cette faon, nous pouvons voir tout de suite le rsultat de la programmation et corriger le code si besoin est. La mise en oeuvre d'un site Web passe par la configuration d'un serveur Web. Mme si plusieurs logiciels open source permettent d'en configurer un rapidement sous Windows, nous avons configur un serveur sous Linux. Le but de cette solution est de permettre un dploiement rapide du site Web. Le serveur Web de dveloppement doit donc tre le plus proche possible du serveur final sur lequel sera mon site Web. Ainsi, tout problme de compatibilit et de configuration sera rsolu.

    Eclipse tourne sous Windows et mon serveur Web doit tourner sous Linux. Un problme se pose : comment installer et interfacer les deux parties ? Le serveur est uniquement un serveur de tests, il n'est donc pas justifi de monopoliser un ordinateur uniquement pour cette tche. Nous avons donc choisi d'installer un logiciel de virtualisation (VMWare) pour simuler un deuxime ordinateur sur le mme ordinateur. D'un point de vue pratique, le logiciel affiche une fentre qui reprsente l'cran du deuxime ordinateur. Sur celui-ci, j'y ai install une distribution de Linux (Fedora) ainsi que tous les modules requis pour en faire mon serveur Web.

    11

  • ii. Le Zend Framework, un framework d'avenir

    Les frameworks PHP sont des bibliothques logicielles pour les applications dveloppes en PHP. Elles sont gnralement dveloppes autour d'un concept visant structurer l'application et mettre en oeuvre les derniers procds en matire de programmation. Le but principal des frameworks est d'acclrer la programmation en fournissant des fonctions lmentaires, pour viter aux dveloppeurs de toujours devoir les reprogrammer chaque nouveau projet. Il en existe prs d'une vingtaine. Les frameworks PHP les plus connus sont PEAR, Symfony, CakePHP et Horde.

    Nous avons choisi le Zend Framework pour mon application. Ce framework m'a t propos par Xavier LEVRAT. Il est dvelopp par Zend - entreprise pionnire dans le dveloppement du langage PHP. Il permet d'acclrer la programmation en proposant des fonctions pour le formatage de requtes SQL, le formatage des dates, la gestion d'authentification, la fonction de recherche et bien d'autres fonctions encore. Il permet aussi de programmer un site Web en PHP orient objet, avec un modle MVC ( Modle Vue Contrleur ).

    Ce modle MVC a pour objectif de sparer diffrentes partie du code afin de faciliter la lecture du code et la maintenance.

    Les trois partie sont :

    - Les modles qui englobent les enregistrements d'une base de donnes ainsi que l'interface entre le programme et celle-ci,

    - Les vues qui reprsentent la partie affichage du programme,

    - Les contrleurs qui ont pour rles d'interface la partie vue et la partie modle en contrlant les informations provenant de ces deux parties.

    Le Zend framework intgre parfaitement cette notion puisque l'arborescence conseille par Zend consacre un dossier pour chaque partie.

    La voici plus en dtail :

    Le dossier ''application'' contient un dossier pour chaque partie du modle MVC.

    Le dossier ''library'' contient toutes les fonctions utiles au projet, dont les fonctions du Zend Framework.

    Le dossier ''public'' est le dossier qui recense tout ce dont le navigateur Web a besoin pour afficher le site.

    Rappelons que l'application est un site internet, il est donc ncessaire de mettre en place certaines contraintes pour mettre en oeuvre une telle arborescence. En effet, si nous mettons un site internet en ligne avec une telle arborescence, l'utilisateur aurait accs des dossiers qui ne lui sont pas rservs en mettant le chemin du dossier dans l'adresse internet. Par exemple, l'adresse ''http://monsite.fr/application/models'' donnerait accs au dossier "models" de l'arborescence ci-dessus.

    12

  • Pour limiter les accs de l'utilisateur, il faut crer des fichiers ".httpaccess" dans les dossiers que nous souhaitons bloquer. Ces fichiers contiennent les rgles d'accs aux dossiers.Ils sont lus par le serveur Web.

    Maintenant, attachons nous au fonctionnement mme de d'une application dveloppe avec le Zend Framework. Il comporte deux notions importantes :

    Le boot strapping :

    En utilisant un framework, nous appliquons des fonctions et des concepts propres celui-ci. Afin que le serveur Web puisse les interprter, nous devons charger la librairie du framework chaque page. De manire viter de faire des doublons dans notre code, cette partie du programme est gnralement mise dans un fichier indpendant. A chaque chargement de page, ce fichier est systmatiquement appel afin de charger le contenu utile du framework. C'est ce que l'on appelle la mthode de boot strapping. Ceci reste transparent pour l'utilisateur, car le programme charge ensuite la page demande tout en affichant l'adresse de cette page.

    Le format de l'adresse :

    Dans ce framework, l'adresse internet ( ou URL ) a une signification du point de vue du modle MVC. Voici un exemple, pour un site Web nomm ''www.monsite.fr'' :

    http://www.monsite.fr/controleur/action/parametre/valeur

    "controleur" indique que le serveur Web est pass par le contrleur du mme nom pour afficher la page "action" avec en paramtre la valeur "valeur" au paramtre "parametre".Ainsi si nous voulons grer des news l'intrieur de notre site Web, le contrleur sera "news" et les diffrentes actions seront "ajout", "modif" et "suppr".Les diffrentes adresses de notre site seront alors :

    http://www.monsite.fr/news/ajouthttp://www.monsite.fr/news/modifhttp://www.monsite.fr/news/suppr

    Au niveau de l'implmentation, il suffira de crer les classes des contrleurs dont on a besoin en rajoutant "Controller" leur nom, dans le dossier qui leur sont rserves. De la mme manire, les actions sont des fonctions implmentes dans leurs contrleurs en rajoutant "Action". Dans notre exemple de gestion de news, cela se traduira par une classe "newsController" dans le dossier rserv aux contrleurs. Elle contiendra les actions "ajoutAction", "modifAction" et "supprAction". Cette convention de nommage permettra au serveur Web de lancer automatiquement les vues associes ces actions, qui se trouveront dans le dossier "views".

    Nous ne sommes cependant pas obligs de renseigner systmatiquement l'ensemble de ces champs pour afficher une page. C'est l qu'intervient l'index.Les fichier "index" servent de pages Web par dfaut et ils sont transparents dans l'adresse URL. Ainsi un site Web qui affiche en page d'accueil une adresse URL ressemblant ''http://www.monsite.fr" lance un fichier d'index. L'adresse URL relle serait alors "http://www.monsite.fr/index.php ".Nous retrouvons cette convention dans le Zend Framework pour afficher une adresse URL cohrente avec la page demande, o l'index a cette double notion. L'implmentation d'un index en tant qu'action sera simplement une action nomme "indexAction".

    13

  • De mme, pour aller plus loin, un contrleur index peut tre cr en ajoutant une classe "indexController".De cette manire, une adresse telle que ''http://www.monsite.fr/index/index'' sera quivalente une adresse telle que ''http://www.monsite.fr'' et tous les contrles de cette page seront implments dans l'action "indexAction" du contrleur "indexController".

    Enfin, la valeur d'un paramtre dans l'adresse peut tre intressante utiliser si nous n'avons que peu d'objets grer. Une application simple cette utilisation est dans le cadre de la suppression d'un objet : nous mettons l'identifiant de l'objet en paramtre et la valeur de l'identifiant de l'objet supprimer. Pour supprimer une news qui aurait l'identifiant "id" gale 6, l'adresse de suppression de cette news serait http://www.monsite.fr/news/suppr/id/6.Si l'utilisateur clique sur un lien comportant cette adresse, la page de suppression de la news correspondante s'affichera.

    L'application de ces diffrentes rgles permet d'avoir un site organis et robuste dans sa conception, car elles obligent bien dlimiter les diffrentes possibilits du site pour mieux les organiser, sans toute fois empcher le site d'voluer.

    De plus, le concept du modle MVC permet une meilleure volutivit du programme et une meilleure maintenance car l'ensemble du programme est rparti dans diffrents groupes.

    Le Zend Framework est pour l'instant jeune puisqu'il n'est encore qu'en phase de dveloppement, mais comme son entreprise cratrice reste une rfrence dans la programmation en PHP, il sera amlior et toff en cours de plusieurs annes. Et le site Web que j'ai ralis n'tait pas un projet de grande envergure, c'tait donc une bonne opportunit pour moi pour tester ses premires possibilits.

    iii. Le choix des outils d'analyse

    Dans la conception d'un applicatif informatique, la phase d'analyse est une phase trs importante car elle permet de dfinir l'ensemble de ses fonctionnalits et d'avoir un premier aperu du travail raliser. Il convient donc de choisir les outils d'analyses les mieux adapts au projet afin d'en avoir une vue claire et prcise.

    J'ai choisi de faire une premire tude en UML, car ce langage intgre parfaitement la notion du modle MVC. Cependant je n'ai pas fait une tude dans son intgralit, car il aurait inutile d'aller jusqu'au bout. En effet, UML propose d'aller jusqu' la dfinition des classes des objets de l'application, ainsi que dans le dcoupage des interactions entre les diffrentes couches du modle MVC. Une grande majorit des classes existaient dj, puisque je me basais sur des bases de donnes existantes et comme elles sont nombreuses, il aurait t fastidieux et laborieux de dtailler les interactions pour chacune d'elles. Et le rsultat aurait t sans doute inutilisable pour le dveloppement, car il aurait t beaucoup trop dense en informations pour une utilisation efficace. J'ai donc prfr rassembler les diffrentes classes par base de donnes pour avoir une premire bauche lisible des interactions dans mon programme.

    Ensuite, je me suis attach au dveloppement de ma base de donnes l'aide de la mthode Merise. Encore une fois, j'aurais pu le raliser avec le langage UML, seulement les liaisons entre les tables de ma base de donnes et les cls trangres auraient t moins videntes retrouver lors de l'application au langage SQL.

    J'ai choisi la mthode Merise, pour avoir une vue d'ensemble directe et rapide de la base de donnes et des liaisons entre les tables qui la composent, notamment avec le modle conceptuel de donnes et le modle physique des donnes.

    14

  • D. Le droulement du projet

    Le travail, que j'ai ralis durant ces dix semaines, peut tre dcoup en quatre parties :

    Numro des semaines

    Partie ralise Commentaire

    1 ~ 2 Configuration du poste de travail et tutoriels du Zend Framework

    La configuration prend en compte l'installation du logiciel de virtualisation, du logiciel de dveloppement, du serveur web et sa configuration.

    3 ~ 4 L'analyse Elle englobe l'tude avec le langage UML et la mthode Merise

    5 ~ 8 Le dveloppement Cette partie est l'implmentation de l'analyse au moyen du Zend Framework

    9 ~ 10 L'intgration du projet dans l'tablissement

    Dans cette partie, j'ai essay de rsoudre certains problmes d'intgration que posait mon application.

    Les parties les plus dlicates ont t la configuration du poste de travail et le dveloppement.

    La configuration du poste de travail a t dlicate sur plusieurs points, en particulier pour la configuration du serveur Web. En effet, ce serveur tait sous Linux en mode commande et comme je ne matrise pas pleinement ce systme d'exploitation, j'ai eu des difficults pour installer les modules. La commande ''yum'' m'a bien t utile car elle permet de rcuprer un module voulu avec tous les autres modules ncessaires pour le faire fonctionner. Seulement, avec cette commande, tous les modules ne sont pas disponibles. Par exemple, le module ''php-mssql'', qui permet d'utiliser Microsoft SQL Server sur un serveur Web Linux, est introuvable via cette commande.

    J'ai d rechercher sur internet o il tait disponible et comment l'installer. Aprs plusieurs installations diffrentes, j'ai finalement trouv un site Web qui le recensait. Ce site Web expliquait comment le rattacher la commande ''yum'' pour tlcharger ses modules. Une fois la manipulation faite, j'ai pu installer le module.

    Enfin la partie du dveloppement a t longue car j'ai du adapter mon analyse au Zend Framework qui tait nouveau pour moi. J'ai d me documenter et raliser plusieurs tests avant d'avoir des rsultats convainquants, malgr les tutoriels raliss les premires semaines.

    Pour les deux autres parties du projet, je n'ai pas eu de grosses difficults.L'analyse tait moins dure que certaines tudes de cas que j'ai ralis. Et j'ai rapidement su rsoudre une partie des problmes pour l'intgration de mon produit.

    15

  • II. L'analyse

    A. L'laboration de la base de donnes

    i. Liaison entre deux bases de donnes

    L'un des premiers points auquel je me suis attach de dfinir, est comment lier la base de donnes de Customer first la base de donnes de Nagios.Ces deux bases de donnes proviennent de deux logiciels totalement diffrents et leurs langages ne sont pas les mmes non plus. La base de donnes de Customer First est en Micrsoft SQL Server alors que la base de donnes de Nagios est en MySQL. Il est donc impossible de crer une seule base de donnes partir de ces deux-l.

    Customer First recense une grande partie des machines gres par le SIL et ce logiciel propose des champs de saisie personnalisables leurs utilisateurs.C'est par cette constatation que la premire solution est ne. Pour lier les deux bases donnes, il faudrait rajouter ( dans Customer First ) l'identifiant Nagios de chaque machine dans ces champs personnalisables.Ainsi, nous pourrions savoir quelle machine de Customer First correspond quelle machine dans Nagios puisque l'identifiant Nagios serait la fois dans Customer First et dans Nagios. Une fois cette liaison tablie, nous pourrions rcuprer l'organisme propritaire de la machine l'intrieur mme de la base de donnes de Customer First.Mais cette solution n'a pas t retenue par manque d'volutivit car elle ncessite de faire appel des champs qui risquent de disparatre ou d'tre modifier au cours des versions. La solution serait valable pour la version actuelle du logiciel, mais pas ncessairement pour les suivantes.

    En prenant diffremment la solution, nous avons galement pens ajouter un identifiant, non pas dans Customer First, mais dans Nagios. La valeur de l'identifiant serait alors celle de Customer First et l'ajout se ferait de faon normalise dans le nom de la machine ct Nagios. Le problme serait lgrement amlior, puisque les utilisateurs de Nagios pourraient savoir quelle organisme correspond telle ou telle machine, partir de leur base de donnes.Cette solution n'a pas non plus t retenue puisque elle contraint de rajouter un identifiant dans un champs dj occup. Dans certains cas, des problmes de tailles et de compatibilits pourraient survenir.

    De plus, avec ces deux solutions, nous n'avons pas le site gographique de la machine car cette information n'est enregistre ni dans Customer First ni dans Nagios.

    Nous avons choisi de raliser une base de donnes qui aurait un rle d'interface entre la base de donnes de Nagios et la base de donnes de Customer First. De cette faon, nous ne touchons aucune information contenue dans Nagios ou dans Customer First et nous pouvons rajouter les informations dont nous avons besoin dans cette nouvelle base de donnes.

    Pour faire la liaison entre les deux bases de donnes, la table contenant les informations des machines aura un champs rserv l'identifiant des htes de Nagios et un autre champs rserv l'identifiant des organismes grs dans Customer First. D'autres informations pourront tre stockes dans cette mme table, comme le site gographique, ou des tables part.

    ii. Approfondissement sur le contenu de la nouvelle base

    Le problme de connexion entre les bases de donnes tant rsolu, il faut s'attacher dfinir le reste de la nouvelle base de donnes.

    Le complment doit donner la possibilit l'utilisateur de choisir entre une plage horaire personnalisable et une plage horaire contractuelle pour ses calculs de disponibilits.

    16

  • Pour savoir s'il est ncessaire de rajouter ces informations dans notre base, il faut avant tout se documenter sur Nagios pour savoir s'il ne traite pas dj cette option. Dans Nagios, nous pouvons dfinir des plages horaires pour les tests d'tat des htes. On peut par exemple dfinir que l'tat de tel hte doit tre test entre 8 heures et 17 heures uniquement, pour des raisons qui sont propres au matriel et au responsable du rseau. Le dveloppeur de Nagios conseille tout de mme d'avoir une plage de tests la plus large possible pour permettre au responsable rseau de voir l'ensemble des problmes qu'ont connus les lments de son rseau.

    Un problme peut tre rcurant et survenir en dehors de la plage horaire contractuelle. Si le responsable du rseau ne prvoit pas une plage horaire suffisamment large, il risque ne pas voir cette anomalie. Or si elle existe, c'est bien parce que l'lment concern ou n'importe quelle configuration le concernant est mal paramtr. Ainsi, mme si cette anomalie intervient en dehors de la plage horaire, elle peut rvler des problmes de configuration ou des problmes sur tout lment du rseau. Il est donc recommand de s'en proccuper.C'est sur cette ide que le rseau du SIL est gr par Nagios : les tests de Nagios ont lieu 24 heures sur 24, 7 jours sur 7.

    Pour des soucis de performance, nous ne pouvons pas nous baser sur les plages horaires de Nagios. Et mme en cartant cette raison, cette configuration actuelle de Nagios nous satisfait grandement puisque grce celle-ci nous pouvons donner des statistiques relles, quelque soit la plage horaire demande. En effet, si Nagios avait respect les plages horaires pour dterminer quand tester les htes, le rsultat pour le calcul de plage personnalise aurait t erron car il se baserait que sur des tests de la plage contractuelle.

    Nous venons de le voir, les plages horaires contractuelles ne sont pas prise en compte dans la configuration actuelle de Nagios. Nous allons complter notre base de donnes pour qu'elle prenne en compte ces informations.

    Les plages horaires contractuelles appliques aux quipements du rseau dpendent du groupe des quipements. Comme nous sommes sur un rseau, c'est le dbit qui est le plus important garantir. C'est pourquoi les quipements sont classs par groupe de connexion rseau, et chacun groupe est attribu une plage horaire contractuelle. Par exemple, un quipement appartenant au groupe " ADSL light " - correspondant aux connexions ADSL des particuliers - aura une plage horaire restreinte. Alors que un quipement du groupe " DLS " - correspondant aux connexions professionnelles - aura une plage horaire beaucoup plus tendue.

    Dans cette exemple, nous voyons bien les liaisons existantes entre ces trois lments. Nous devons complter notre base de donnes en tenant compte. De cette faon, nous aurons une table pour les quipements du rseau, lie la table des groupes de connexion, elle-mme lie la table des plages horaires.

    La table des lments du rseau et la table des groupes ne sont pas compliques mettre en place, par contre la plage horaire demande tre plus labore.Une plage horaire est dfinie par une heure de dbut de priode, une heure de fin de priode, et de plusieurs dates de jours chms. Si nous stockons ces donnes dans une mme table, ceci reviendrait rserver un champs pour les heures de dbut et de fin de priode puis plusieurs champs pour les jours chms. Tt ou tard, nous aurons un problme de place avec les jours chms puisque nous n'allons mettre 365 champs libres. Ceci prendrait une place trs importante et nous aurions une redondance des donnes puisqu'avec cette solution, nous serions obligs de saisir toutes les dates des jours chms pour chaque plage horaire. Pour viter ce double problme, nous devons sparer les horaires des dates de jours chms. Ainsi nous pourrions saisir en une seule fois toutes les dates de jours chms et nous pourrons faire la liaison entre les dates et les plages horaires grce une table intermdiaire.

    17

  • Nous arrivons au modle de conception de donnes suivant :

    Les liaisons entre les bases de donnes sont abstraites car elles ne sont pas visibles dans les contraintes de la nouvelle base de donnes elle-mme. Elles seront implmentes au niveau logiciel.

    Cependant des contraintes ont t mise en place pour viter que plusieurs quipements aient le mme identifiant des autres bases de donnes. Si l'utilisateur persiste en essayant d'ajouter un de ces cas particuliers, la requte sera rejete par une erreur SQL.

    Enfin, les base de donnes de Customer First et de Nagios comportent un trs grand nombre de tables. Les reprsenter ici nuiraient la comprhension du modle, c'est pourquoi j'ai prfr ne reprsenter que les tables qui nous servent de ''point d'entre'' ces bases de donnes. Les liaisons en pointill droite marque le fait que d'autres tables existent.

    18

  • Une fois ce modle labore, j'en ai dduit le modle physique des donnes. Il permet de visualiser les diffrentes tables qui composent la base de donnes avec leurs liaisons.

    Par rapport au prcdent modle, nous pouvons remarquer que l'association ''Jour_Chaume'' est devenue une table dans la base de donnes. C'est cette table qui permet de lier les dates des jours chms aux plages horaires. Elle contient les couples des identifiants de ces deux autres tables pour faire la correspondance. Nous remarquons aussi que de nouveaux champs ont t ajouts dans d'autres tables. Ils contiennent les identifiants d'autres tables et permettent de faire leurs liaisons logiques. Par exemple, un quipement appartient un type d'quipements ( ADLS light , DSL, etc ). Ainsi nous devrons faire un test d'galit entre les champs '' Type_Equip_ID '' de la table des quipements et des types, pour retrouver le type d'un quipement. Grce ce procd, nous pouvons avoir la totalit des informations d'un quipement ou de tout autre lment de la base de donnes.Ma base de donnes tant termine, j'ai continu mon analyse avec UML.

    19

  • B. l'analyse avec UML, prise en compte du modle MVC

    i. Dcoupage chronologique des fonctionnalits

    Tout d'abord, j'ai ralis les ''plans types'' des fonctionnalits de mon application. Ils dtaillent textuellement et squentiellement les oprations utilisateur/machine qui font avancer le droulement de l'application. Ils ne font pas partie proprement parler du langage UML mais ils sont une aide pour l'analyse.

    En effet , comme ils dtaillent chaque action de l'utilisateur ou de la machine, ils m'ont permis de raliser le diagramme d'activits. Celui aide mieux la comprhension du droulement de mon application. Ce diagramme prsente squentiellement les actions ralisables d'une fonctionnalit ainsi que l'ensemble des directions qu'elles entrainent.

    A titre d'exemple, nous allons tudier la fonctionnalit des statistiques par hte.

    Voici son diagramme d'activits :

    20

  • 21

  • Au stade de l'analyse, nous n'avions pas la totalit de l'implmentation en tte ce qui a occasionn quelques erreurs dans l'analyse. Ce diagramme en comprend deux, par rapport l'implmentation dfinitive :

    - lorsque l'utilisateur clique sur le bouton ''Contractuelle'', il doit remplir un formulaire pour connatre les dates de la priode de tests,

    - une fois les statistiques de la plage horaire contractuelle affiches, fonctionnalit propose les options de formatage en PDF et en XML.

    La correction de ces erreurs n'impliquent pas une refonte globale de la fonctionnalit. C'est pourquoi, Je ne les ai pas corriges car l'analyse a pour but d'aider au dveloppement, elle ne doit pas ncessairement tre une rplique exacte de celui-ci.

    ii. La prise en compte du modle MVC

    Le langage UML prsente un avantage pour mettre en valeur les interactions entre les diffrentes parties du modle MVC grce au diagramme de squence. Ce diagramme prsente les diffrentes interactions de faon squentiel, ainsi les dveloppeurs peuvent suivre le droulement d'une fonctionnalit. Il permet aussi de visualiser les donnes requises et transmises par chaque fonction de l'application.

    Dans mon application, je fais appel plusieurs bases de donnes qui ont chacune un certain nombre de tables. J'ai prfr ressembler toutes les tables par bases de donnes afin de gagner en lisibilit, plutt que d'avoir une vingtaine de tables sur un mme diagramme.

    Ci-aprs, nous avons l'un de ces diagrammes : Il correspond la fonctionnalit d'afficher les statistiques par htes avec une plage horaire personnalise. Les autres diagrammes ressemblent globalement celui-l, c'est pourquoi je n'en prsente qu'un seul.

    22

  • 23

    Administrateur Vue Contrleur quipements

    Charger_hotes( ) : Vector

    Charger_Equip( ) : Vector

    Charger_Nagios( ) : Vector

    Charger_CustomerF( ) : Vector

    Nagios Customer First

    Aff icher_ecran1( Vector )

    Valider( )

    Ctrl_selec_hote (Vector) : Boolean

    Charger_Equip( Vector ) : Vector

    Charger_Nagios( Vector ) : Vector

    Charger_CustomerF( Vector ) : Vector

    Calculer_stat_hote ( ) : Vector

    Ctrl_selec_hote (Vector) : Boolean

    Aff icher_ecran2( )

    Non_contract ( )Aff icher_ecran3( int )

    Personnalise( )

    Aff icher_ecran3( int )

    Valider( )

    Ctrl_selec_plan (Vector) : Boolean Ctrl_selec_plan (Vector) : Boolean

    Aff icher_ecran4( Vector )

    Diagramme de squenceAfficher les statistiques par hte

  • Le droulement de ce diagramme peut tre dcoup en trois phases :

    Au dbut, l'utilisateur vient de cliquer sur le bouton pour entrer dans ce cas d'utilisation. Il n'apparat pas ici, puisqu'il ne fait pas partie du cas d'utilisation. A ce moment l, l'application fait appel toutes les couches pour afficher l'ensemble des htes. C'est la fonction ''Charger_hotes() : Vector'' qui en est l'initiative. ''Vector'' signifie qu'un tableau de type ''Vector'' sera retourn par cette fonction. Il contiendra l'ensemble des donnes rcupres par la fonction.

    Une fois les htes chargs, l'utilisateur doit choisir les htes dont il souhaite avoir les statistiques et valident. La couche ''Vue'' rcupre les slections et les transmet la couche ''Contrleur'' pour vrifier si les slections sont corrects l'aide de la fonction ''Ctrl_select_hote( Vector ) : Boolean''.Si le boolen retourn est vrai alors la slection est bonne et l'application charge l'cran 2.

    Ensuite, l'utilisateur affine le type de plage horaire qu'il souhaite utiliser pour les calculs des statistiques et valide. Pour valider les informations donnes par l'utilisateur, la couche ''Vue'' les transmet la couche ''Contrleur'' grce la fonction ''Ctrl_select_plan( Vector ) : Boolean''. Si les donnes sont correctes, la couche ''contrleur'' rcupre l'ensemble des donnes grce aux ''Vector'' et calcule les statistiques l'aide de la fonction ''Calculer_stat_hote() : Vector''. La couche ''Vue'' rcupre les donnes et les affiche.

    III.L'implmentation au travers du Zend Framework

    A. L'affichage : le premier aperu de l'application

    La partie affichage est un point essentiel dans une application puisque c'est travers elle que l'utilisateur apprhende ou non son utilisation. Elle doit tre avant tout claire et intuitive afin que l'utilisateur prenne l'application en main sans peine. Pour un site Web, il existe un certain nombre de standard dans l'organisation de la page. Ils dpendent la fois du pays et aussi du type d'utilisateur final. La plus courante prsente un bandeau en haut - sur lequel il peut y avoir le titre du site , un menu gauche, et enfin le contenu du site sur le reste de la page. J'ai opt pour cette solution car le thme de mon site doit mettre en avant l'efficacit par rapport la crativit. Le bandeau du haut rappelle le titre de la partie o se trouve l'utilisateur. Le menu prsente les fonctionnalits du site. Et au centre, nous avons le titre de l'cran lorsqu'il est justifi, puis le contenu proprement dit.

    J'ai commenc cette partie assez tt de manire avoir une prsentation claire pour les jeux d'essai du reste du dveloppement. La structure du site et sa prsentation ont t crites grce des balises de structures 'div' et dans une feuille de prsentation CSS. Cette sparation, entre le code HTML de la page et la prsentation, permet d'automatiser certaines normes graphiques propre au site et ainsi d'allger grandement le travail des dveloppeurs. De mme, elle rend la maintenance du site plus aise. J'ai veill ce que l'intgralit de mon site soit valid aux normes du W3C (World Wide Web Consortium), garantissant un code juste et dans les normes de qualit internet. De mme, le site est compatible avec Mozilla Firefox 1.6 et suprieur et Internet Explorer 6.0 et suprieur. L'intgralit du site fonctionne aussi sous Opera et suprieur, except les fonctionnalits de formatage XML et PDF. De cette faon, mon site Web remplit, en grande partie, sa fonction d'accessibilit.

    Une importante partie de la prsentation est un ensemble de formulaires afin de dfinir la volont de l'utilisateur. C'est pourquoi, le cheminement des crans est assez linaire.

    24

  • Tout d'abord, nous avons l'cran d'accueil :

    Le menu du bas n'est pas prsent, dans la version dfinitive du site. Je l'ai prsenter ici pour montrer les diffrences de tons et de couleurs lorsque le curseur passe sur les diffrents objets du menu. Cette mthode est valable pour un grand nombre de boutons de mon application.

    Puis nous avons les crans des formulaires. Je ne prsente ici qu'un seul cheminement ( celui de la plage horaire personnalise ) puisque seul l'cran de la plage horaire change. Dans la version contractuelle, seules la date du dbut de priode et de fin de priode sont prsentes. Les heures sont rcupres dans ma base de donnes.

    Le premier cran consiste slectionner les htes pour lesquels on souhaite avoir leurs statistiques. Le surlignement blanc permet de mieux voir quelle ligne on va slectionner. Sur l'image, le curseur n'apparat pas mais il se trouve sur la dernire ligne du tableau. Si l'utilisateur ne slectionne aucun hte, le mme cran sera raffich avec un message d'erreur.

    25

  • Au deuxime cran, l'utilisateur doit choisir quel type de plage horaire il souhaite utiliser pour le calcul des statistiques. La plage horaire personnalise lui permet de dfinir avec exactitude la plage horaire alors que la plage horaire contractuelle s'appuie sur ma base de donne pour recueillir les horaires journaliers prendre en compte et les jours chms viter.

    Dans le troisime cran, l'utilisateur dfinit sa plage horaire. S'il choisit '' 24 heures sur 24 '' , l'heure de dbut et de fin de priode ne sera pas pris en comptes. De mme, s'il slectionne '' Personnalis '', et qu'il saisit deux heures identiques, l'application considrera l'horaire comme un horaire 24 heures sur 24. En cas de mauvaise saisie, l'cran sera raffich avec un message d'erreur.

    26

  • Enfin, le dernier cran prsente les statistiques. Le surlignement a t gard pour faciliter leur reprage. De plus, j'ai choisi d'afficher les statistiques en rouge, noir ou vert selon qu'elles sont critiques, moyennes ou bonnes. Si l'application n'a pas pu calculer de statistiques pour une quelconque raison, le rsultat sera des points d'interrogations rouges.

    27

  • L'icne PDF, en bas gauche de l'cran, permet de convertir le tableau de statistiques en fichier PDF. Le logiciel Acrobat Reader se lance alors avec ce fichier, directement dans l'explorateur. L'utilisateur n'a plus qu' en faire une sauvegarde, s'il le souhaite. Il en est de mme pour l'icne de l'XML.Voici une partie du rendu de la page en PDF :

    Voici une partie du rendu de la mme page en XML :

    28

  • Le plus ( + ) au niveau de la balise '''' signifie que l'information contenue dans ces balises n'est pas affiche. Ceci correspond la mme normalisation de l'arborescence des fichiers et dossiers.

    Pour l'instant, le menu donne accs qu' une seule fonctionnalit : celle de prsenter les statistiques de disponibilit.L'onglet ''Organisme'' montre comment agencer d'autres fonctionnalits mon site.

    B. L'implmentation avec le Zend Framework

    Si la partie vue du site est assez simple raliser, il en est tout autrement pour la partie contrleur. En effet, une grande partie du dveloppement se situe dans l'utilisation du Zend Framework et dans la mise au point du calcul des statistiques.

    i. Le fichier boot strap

    Le boot strap est un fichier qui est charg chaque changement de page. Il permet de charger les parties utiles du framework afin que le serveur Web puisse interprter le reste du code.Dans le Zend Framework, le boot strap est plac la racine du site par convention,. Pour comprendre comment il a t crit, nous allons le dcouper en plusieurs parties afin de mieux les commenter.

    Un fichier PHP peut contenir du code PHP, mais aussi d'autres langages comme de l'HTML. Pour dlimiter la partie du code PHP du reste, le code PHP doit tre crit dans la balise . Une fois notre balise ouverte, nous pouvons commencer crire en PHP.

    Avant toute chose, il est conseill de dfinir l'affichage des erreurs PHP et le repre horaire de la zone du serveur.

  • Pour charger une classe, nous devons utiliser la fonction loadClass(). Nous devons lui passer en paramtre le nom de la classe charger. Pour trouver le fichier de la classe, la fonction remplace les tirais bas ( _ ) par des slashs ( / ) et ajoute un '' .php '' la fin. Par exemple, le chemin du fichier de la classe '' Zend_Config_Ini '' est '' Zend/Config/Ini.php''.Cette convention permet de retrouver rapidement les fichier des classes charger.Une fois nos classes charges, on peut dmarrer une session (au besoin) et lancer la classe ''Controller'' qui a t appel en crant un objet Zend_Controller_Front et en lanant l'application grce sa fonction dispatch().

    // Chargement des classesZend_Loader::loadClass('Zend_Config_Ini') ;Zend_Loader::loadClass('Zend_Controller_Front') ;(...)Zend_Loader::loadClass('Zend_Session');Zend_Loader::loadClass('Zend_View');

    Zend_Session::start();

    //Initialisation du programme$frontController = Zend_Controller_Front::getInstance() ;$frontController->throwExceptions(true) ;$frontController

    ->setControllerDirectory('./application/controllers') ;$frontController->dispatch() ;

    Le fichier boot strap s'arrte ici. Notons que nous n'avons pas besoin de fermer la balise du code PHP par '' ?> '' car la fonction $frontController->dispatch() aura pour effet de quitter cette page de code pour lancer une autre page. Ainsi, l'application ne lira jamais ce qu'il y a en dessous de cette fonction. Ceci est valable pour d'autres fichiers de l'application comme les contrleurs qui lancent leurs pages de vues.

    ii. Les contrleurs

    Les contrleurs sont essentiels dans notre application puisque c'est eux qui ont la charge de valider ou non les commandes et les saisies de l'utilisateur. Lors de mon analyse, j'ai pu identifier un certain nombre de fonctions comme nous l'avons. A ce moment-l, je ne savais pas comment fonctionnait le Zend Framework. Certains de ces mcanismes m'ont contraint adapter mon analyse ce framework : par exemple, ma fonction ''charger_hotes()'' du diagramme de squence se traduit par une partie de l'action ''hoteAction'' du contrleur ''StatistiqueController''. Et en fonction de la page o se trouvait l'utilisateur, l'action renverra telles ou telles donnes la vue, mais pas ncessairement sous la forme d'un seul ''Vector'' comme je l'avais mentionn.

    Mon analyse reste valable dans les transitions qu'opre mon application entre les diffrentes couches du modle MVC et dans les contrles raliser.

    30

  • Pour avoir une ide de l'organisation du dossier des contrleurs, voici son arborescence :

    Tous les contrleurs sont rpertoris dans le dossier ''controllers''.

    Le contrleur ''IndexController'' est celui de la page d'accueil du site.

    Le contrleur ''StatistiquesController'' contient toutes les actions et contrles relatifs aux statistiques.

    Afin de voir concrtement comment j'ai adapt mon analyse au Zend Framework, nous allons dtailler le code de l'action ''hoteAction'' du contrleur ''StatistiquesController'' :

    a) Architecture principale de l'action ''hoteAction''

    Cette action permet de contrler l'ensemble des informations provenant des pages des statistiques des htes. Cet ensemble de pages forme un formulaire permettant de dfinir la volont de l'utilisateur. Au niveau du contrleur, nous devons donc trouver un moyen pour garder en mmoire les choix de l'utilisateur pour pouvoir les rutiliser lors du calcul et de l'affichage des statistiques.

    Dans la programmation oriente objet, les objets peuvent prendre des attributs qui dfinissent leurs tats (par exemple, la vitesse pour une voiture). J'ai essay de crer un attribut pour chaque donne dont j'avais besoin dans la classe qui contient mon action, savoir ''StatistiquesController''. Cette mthode n'a pas fonctionn comme je l'esprais : les donnes antrieurs taient perdues lors des changements de pages.

    J'ai donc d me documenter sur le Zend framework pour trouver un moyen de rsoudre ce problme. J'avais trouv une partie de la solution lorsque j'ai pens utiliser les variables de session. Dans PHP, il est possible de dfinir des variables de sessions qui gardent leurs valeurs lors des changements de pages. Inclure directement cette solution dans mon programme n'aurait pas t trs propre car ces variables auraient t visibles par tous les contrleurs, introduisant ainsi des problmes de nommage et de lisibilit du code. En approfondissant mes recherches, j'ai trouv la classe du framework qui permet de grer des variables de sessions. Cette classe est Zend_Session_Namespace.

    Pour l'utiliser, il faut simplement charger la classe Zend_Session dans le boot strap, dmarrer une session grce la fonction Zend_Session::start(), crer un objet du type Zend_Session_Namespace et y ajouter ce que l'on souhaite en mettant les valeurs comme attributs. Par exemple, dans mon application, je dois garder en mmoire les identifiants des htes que l'utilisateur a slectionn pour pouvoir calculer leurs statistiques. Comme nous ne savons pas combien d'htes l'utilisateur va slectionner, il est plus judicieux d'utiliser un tableau que des variables pour chaque hte. J'ai dcid d'appeler ce tableau ''$stats''. Pour l'enregistrer dans l'espace de session $espaceSession, il faut faire :

    $espaceSession->stats = $stats ;

    L'espace de session $espaceSession prendra alors la valeur de $stats en attribut.

    Comme l'action ''hoteAction'' s'occupe de plusieurs pages, un autre problme se pose : il faut pouvoir distinguer chacune de ces pages pour pouvoir effectuer leurs contrles correspondant et pour pouvoir les lancer.

    31

  • L'ensemble des pages sont des formulaires, c'est dire que nous devons rcuprer les valeurs saisies par l'utilisateur avant de contrler ou d'afficher l'cran suivant. Grce ce principe, j'ai rsolu le problme en incluant, dans mes pages HTML, une balise spciale qui contiendra le numro de la prochaine tape du formulaire afficher.Cette balise est la balise . Elle est invisible l'affichage comme nous l'indique son type. Voici comme je l'ai dclare dans la premire tape du formulaire.

    ( La balise est intercale dans une balise de structure '''' pour plus de lisibilit dans le code, mais ceci n'est pas obligatoire. )

    Je lui affecte un nom grce ''name''et la valeur de la prochaine tape grce ''value'', ainsi je pourrai l'appeler et rcuprer sa valeur lorsque le formulaire sera envoy au serveur.Une fois la valeur rcupre, il ne reste plus qu' tester la valeur de la variable pour dterminer quelle est la prochaine tape afficher.

    En algorithme, la structure principale de l'action est donc :

    fonction hoteAction()Dbut

    Si l'action provient d'un formulaire Alors :

    monEtape = etape du formulaire ;

    Si ( monEtape == 2 ) Alors :

    Contrle pour l'tape 2 ;

    Fin SiSi ( monEtape == 3 ) Alors :

    Contrle pour l'tape 3 ;Fin SiSi ( monEtape == 4 ) Alors :

    Contrle pour l'tape 4 ;Fin SiSi ( monEtape == pdf ) Alors :

    Contrle pour l'tape du document PDF ;

    Fin SiSi ( monEtape == xml ) Alors :

    Contrle pour l'tape du document XML ;

    Fin SiSinon

    monEtape = 1 ;Contrle pour la premire tape ;

    Fin SiAffichage() ;

    Fin

    32

  • On peut remarquer ci-dessus, les options de formatage sont au mme niveau que les tapes du formulaire puisque je contrle leur accs au mme moment. Ceci est fait pour rendre le code plus lisible et mme chronologiquement cette solution se tient puisque ces options sont ralises aprs l'tape 4. Elles sont quivalentes une cinquime tape, qui aurait diffrents affichages selon que l'utilisateur dcide de formater la page en XML ou en PDF.

    Enfin lorsque tous les contrles sont raliss et que les variables ont t passes la vue, on l'affiche avec la fonction ''Affichage()''.

    Concrtement, voici comment sont implmentes les diffrentes parties de cet algorithme, avec le Zend Framework :

    Le premier contrle (celui du formulaire) est implment en utilisant la fonction isPost(). Elle renvoie un boolen vrai si la requte est un ''Post'', c'est dire une requte provenant d'un formulaire :

    // Si les donnes proviennent d'un formulaire Alorsif ( $this->_request->isPost() ){

    (...)}

    Si c'est le cas, l'application excutera ce qui sera entre accolades ( { ... } ).

    La rcupration d'une valeur d'une balise d'un formulaire passe par l'utilisation d'un filtre. Celui-ci a pour but de pr-formater la valeur dans le but de supprimer les caractres illgaux tels que des slashs ( / ) ou des chevrons ( < > ) . Dans mon application, j'utilise le filtre du Zend Framework ( $filter ) grce la fonction $filter->filter() et un filtre de PHP grce la fonction trim(). La rcupration de la valeur brute de la variable se fait par la fonction getPost() du controleur courant.

    L'implmentation complte est le code suivant :

    // Chargement de la classeZend_Loader::loadClass('Zend_Filter_StripTags');// Cration de l'objet filtre$filter = new Zend_Filter_StripTags() ;

    // Rcupration de la variable "etape" pour connatre la page // afficher$etape = trim($filter->filter

    ($this->_request->getPost('etape'))) ;

    Enfin, les conditions sont celles du code PHP : si nous voulons tester si notre variable $etape est gale deux, le teste d'galit s'crira :

    if ($etape == "2" ){

    (...)}

    Nous faisons de mme pour les autres boucles conditionnelles.

    33

  • Les premiers contrles des tapes consistent vrifier si les donnes reues sont correctes. Dans ce cas-ci, l'application prpare les donnes pour la prochaine tape, sinon elle recharge la mme.

    b) Aperu d'une des fonctions de calcul des statistiques

    Maintenant que nous avons vu l'architecture globale de la fonction, analysons le processus de la dernire tape celui qui permet de calculer les statistiques.

    Pour calculer les statistiques, il faut pralablement vrifier plusieurs lments.

    Le premier des lments connatre est le type de plage horaire que l'utilisateur a prcdemment slectionn. En effet si l'utilisateur slectionne une plage horaire contractuelle, un certain nombre de ses informations seront rcupres sur la base de donnes. Alors que si l'utilisateur a slectionn la plage horaire personnalise, toutes ses informations seront rcupres partir du formulaire. C'est pourquoi, la fonction qui calcule les statistiques est divise en deux versions une pour chaque type de plages horaires.

    Ensuite, nous devons savoir si les informations saisies par l'utilisateur sont correctes et calculer les statistiques si ncessaire. C'est dans cette fonction qu'intervient la partie qui permet de calculer les statistiques.

    Je vais dtailler la version de la plage horaire contractuelle car c'est la plus intressante des deux, puisqu'elle fait appel la base de donnes ralise. La fonction s'appelle ''hote_form22()'' car elle est utile pour l'action ''hoteAction'' et elle valide la deuxime version du deuxime formulaire que l'utilisateur doit saisir.

    Voici le dbut de la fonction :

    private function hote_form22($espaceSession){

    $formvalide = true ;

    Zend_Loader::loadClass('Zend_Filter_StripTags');$filter = new Zend_Filter_StripTags() ;

    // Rcupration des variables du formulaire// --- Rcupration de la date de dbut$jdeb = $filter->filter($this->_request->getPost("jdeb")) ;$mdeb = $filter->filter($this->_request->getPost("mdeb")) ;$adeb = $filter->filter($this->_request->getPost("adeb")) ;

    $datedeb = $jdeb . '/' . $mdeb . '/' . $adeb ;$espaceSession->datedeb = $datedeb ;

    // --- Rcupration de la date de fin$jfin = $filter->filter($this->_request->getPost("jfin")) ;$mfin = $filter->filter($this->_request->getPost("mfin")) ;$afin = $filter->filter($this->_request->getPost("afin")) ;

    $datefin = $jfin . '/' . $mfin . '/' . $afin ;$espaceSession->datefin = $datefin ;

    34

  • Dans cette partie, l'application initialise un variable boolenne et rcupre les donnes du formulaire par l'intermdaire du filtre $filter. Elle formate aussi les dates et les enregistre dans l'espace de session, pour pouvoir les rutiliser plus tard.

    Maintenant, nous pouvons contrler la saisie de l'utilisateur :

    // Si un des champs est vide ou si les dates ne sont pas // valides :if ( $jdeb == '' || $mdeb == '' || $adeb == '' ||

    $jfin == '' || $mfin == '' || $afin == '' || !Zend_Date::isDate($datedeb) || !Zend_Date::isDate($datefin) )

    {// Le boolan de validit du formulaire passe faux$formvalide = false ;

    }

    Nous contrlons si tous champs ont t remplis et si les dates de dbut et fin de priode sont correctes. Pour cela, nous utilisons une fonction statique du Zend Framework qui s'appelle Zend_Date::isDate(). Elle teste si $datedeb et $datefin sont des dates valides. Cette fonction prend en compte tous les contrles possibles sur la validit d'une date comme le test du numro du jour du mois de Fvrier pour les annes bissextiles. Comme nous voulons l'inverse, il faut ajouter un point d'exclamation devant l'appel de la fonction. Ceci aura pour effet d'inverser la valeur boolenne retourne par la fonction. Ainsi si la date est fausse, la valeur boolenne finale sera ''vrai''.Si le formulaire n'est pas valide, nous plaons notre variable boolenne $formvalide faux.Sinon, nous calculons les statistiques.

    Pour raliser ce calcul, nous devons connatre les htes qui ont t slectionns par l'utilisateur. Nous avons ces donnes grce au tableau de la variable de session nomm hotes[]. Ce tableau contient les valeurs de leur identifiant.Si nous rcuprons une valeur du tableau, nous pouvons calculer les statistiques pour un hte. Nous enregistrerons cette donnes dans un tableau pour pouvoir retrouver toutes les statistiques par la suite. Ensuite, nous pouvons passer l'hte suivant et ainsi de suite jusqu' ce qu'il n'y est plus d'enregistrements dans le tableau hotes[].

    Nous avons rduit notre problme au calcul des statistiques pour un seul hte. Pour raliser ce calcul, nous devons rcuprer les donnes concernant l'hte telles

    que sa plage horaire et l'identifiant cot Nagios. Grce cet identifiant, nous rcuprons les donnes de l'hte cot Nagios.

    Lorsque toutes les donnes sur un hte sont aquises, nous pouvons commencer la boucle de calcul des statistiques. Nous devons comptabiliser le nombre total de tests effectus et le nombre de fois que l'hte est en ligne. Ainsi, nous n'aurons plus qu' faire une division entre ces deux variables pour avoir le ratio de disponibilit de l'hte. En multipliant par 100, nous en obtiendrons le pourcentage.

    Pour que notre statistique soit juste, nous devons veiller ce que :

    - l'heure du test soit entre l'heure de dbut et l'heure de fin- la date de test soit entre la date de dbut de dbut et de fin de priode- la date de test ne soit pas gal un jour chm

    35

  • Nous devons d'abord rcuprer les informations du test en cours de validit pour pouvoir les tester aprs :

    $heurefor = date('H', strtotime($val['end_time'])) ;$minfor = date('i', strtotime($val['end_time'])) ;$secfor = date('s', strtotime($val['end_time'])) ;

    $afor = date('Y', strtotime($val['end_time'])) ;$mfor = date('m', strtotime($val['end_time'])) ;$jfor = date('d', strtotime($val['end_time'])) ;$datefor = mktime(0,0,0,$mfor,$jfor,$afor) ;

    Le premier test effectuer serait le cas le plus large, c'est dire un test sur l'anne ou le mois. Mais comme on peut raliser les tests de dates dans leur globalit ( c'est dire en prenant en compte leur anne, mois et jour ) il est plus lisible de les regrouper.C'est pourquoi, nous testons si la date du test est un jour chm. De cette manire, nous enregistrons le rsultat dans une variable boolenne que nous placerons avec les autres tests de dates.

    // Test pour les jours chms contractuels$testjourchaume = false ;foreach ($result2 as $key => $val2){

    if ( $val2['Jour'] == $jfor && $val2['Mois'] == $mfor ){

    $testjourchaume = true ;}

    }

    La variable $result2 correspond au tableau contenant l'ensemble des jours chms pour l'quipement en cours. $val2 contient toute la ligne courante de ce tableau. Pour accder une valeur d'une colonne, il faut ajouter son nom entre cote simple ( '...' ) et entre crochet ( [...] ).

    Dans leur format initial, les dates sont longues comparer ( l'anne, le mois , le jour ... ) . C'est pourquoi, il est prfrable de les convertir en nombre de secondes depuis une date antrieure. De cette faon, seul un test suffit pour comparer deux dates, puisque nous manipulons des valeurs entires.

    C'est la fonction ''mktime()'' qui permet de faire cette conversion : elle convertit les dates en nombre de secondes depuis le 1ier Janvier 1970 (date marquant le dbut de l'poque de UNIX).Cette date de dpart nous convient parfaitement pour notre application puisque l'utilisation de Nagios au sein du SIL est suprieure cette date. Ainsi l'application n'aura jamais traiter de cas antrieurs, mme pour les donnes archives.Comme nous le voyons ci-dessous, nous testons simplement si l'entier $datefor est compris entre $datedeb et $datefin, puis nous ajoutons le boolen du test prcdent.

    $testheure = false ;// Si la date du test Nagios est dans l'intervalle demand et si le // jour n'est pas chmif ( $datedeb

  • A l'intrieur de cette boucle vient les tests des heures. Trois cas sont rpertoris :

    Le premier cas est si l'heure de dbut ($heuredeb) est gale l'heure de fin ($heurefin), nous considrons que l'horaire est de 24 heures sur 24. Il est plus logique d'opter pour cette solution que l'inverse car l'intervalle se rduirait en un point. De plus nous n'aurons aucun moyen d'exprimer clairement un horaire de 24 heures sur 24. Le boolen du test des heures passe donc vrai :

    // Si l'heure du dbut est gale l'heure de fin, on considre // le planning horaire comme totalif ($heuredeb == $heurefin){

    $testheure = true ;}

    Le deuxime cas est si l'heure de dbut ($heuredeb) est inferieure l'heure de fin ($heurefin). Nous sommes dans un cas normal d'utilisation.

    // Si l'heure de dbut est infrieur l'heure de fin, on teste // l'heure normalementif ($heuredeb < $heurefin){

    // et Si l'heure du test est dans l'intervalleif ($heuredeb

  • Maintenant que tous les tests concernant les heures sont effectus, nous devons savoir si l'hte a t en ligne ou non pour ce test. Pour cela, nous devons tester si la colonne ''state'' est gale 0. Mais ce n'est pas tout. En effet, si nous lisons la documentation de Nagios, nous nous apercevons qu'une autre colonne est prendre en considration. Celle-ci se nomme ''is_raw_check''. Pour connatre sont importance nous devons connatre le fonctionnement de Nagios. Lorsqu'il ralise un test sur une machine du rseau afin de connatre son tat, il reoit un code d'tat semblable au code d'tat des services. C'est le ''raw check''. Nagios doit raliser des oprations supplmentaires afin de connatre l'tat rel de l'hte.C'est pourquoi, nous devons liminer les cas o nous sommes dans un ''raw check'', pour ne garder que les tats certains des htes.

    // Si le test des heures est russiif ($testheure){

    $state = $val['state'] ;$is_raw_check = $val['is_raw_check'] ;

    // Si "is_raw_check" = 0 pour connatre l'tat relif ($is_raw_check == 0 ){

    // Si son tat est OKif ( $state == 0 ){

    // on incrmente le compteur de russites$compteurreussi= $compteurreussi + 1 ;

    }// On incrmente le compteur total$compteurtotal= $compteurtotal+ 1 ;

    }}

    ( La variable $val est la ligne courante du tableau contenant l'ensemble des tests de Nagios sur l'quipement en cours )

    Suite cela, nous regardons si les compteurs ont une valeur nulle. Si le compteur de tests total valide ($compteurtotal) est diffrent de 0 cela signifie qu'au moins un test correspondait aux attentes de l'utilisateur. Nous pouvons calculer les statistiques pour l'hte en cours, que nous enregistrons dans la variable de session. Dans le cas contraire, aucune ligne de tests de Nagios ne correspondait aux demandes de l'utilisateur. J'ai choisi de renvoyer des point d'interrogation en valeur pour alerter l'utilisateur. Le code qui correspond cette tape n'est pas difficile en soi, j'ai donc choisi de ne pas le faire figurer.

    Si nous reprenons le modle MVC, nous remarquons qu'une fois l'ensemble des contrles effectuer, la couche de contrle passe des donnes la couche d'affichage. Pour raliser cela avec le Zend Framework, nous devons raliser cette oprtion dans le contrleur.Il faut simplement dclarer la variable qui prendra effet dans la vue en lui affectant une valeur. Si la variable est par exemple le tableau des statistiques ($stats), voici la synthaxe pour le passer la vue.

    // Envoie des statistiques la vue$this->view->stats = $stats ;

    Par $this, nous faisons appel l'objet qui contient ce code, c'est dire le contrleur. Cette syntaxe est quivalente dire que nous dclarons la variable stats dans la vue du contrleur et que nous lui affectons la valeur de variable $stats.

    38

  • Si nous voulons rcuprer la variable de la vue dans une nouvelle variable $stats, la syntaxe sera la suivante :

    $stats = $this->stats ;

    $stats prendra la valeur de la variable stats de l'objet qui contiendra ce code, c'est dire la vue.

    Sur cette partie, il n'a pas t facile de respecter le concept du modle MVC. En effet, la base de donnes de Customer First est une base de donnes en Microsoft SQL Server, contrairement aux deux autres bases de donnes qui sont en MySQL. Ceci posa un problme puisque le Zend Framework propose des fonctions pour crer des requtes pour ces deux langages via un PDO ou PHP Data Object. Ceci est une interface d'abstraction pour accder aux bases de donnes, ce qui permet d'utiliser le mme code pour accder aux bases de donnes.Or je n'ai pas trouv de PDO pour Microsoft SQL Server fonctionnant sous Linux. Je n'ai donc pas pu utilis la fonctionnalit du Zend Framework pour cette base de donnes, et j'ai t contraint d'crire moi-mme le code PHP et SQL. Au dbut du dveloppement, je ne savais pas passer des donnes brutes de Microsoft SQL Server la vue. C'est pourquoi je ralisais la connexion de la base de donnes dans la partie contrleur et la rcupration des informations de la base de donnes se faisait dans la vue (ce qui est contraire au modle MVC, puisque la vue doit toujours passer par le contrleur pour accder aux bases de donnes).Aprs plusieurs tests, j'ai trouv le moyen d'enregistrer les informations utiles dans un tableau. J'ai donc pu rsoudre ce problme et dans sa dernire version, mon application respecte le modle MVC.

    ii. Les vues

    Aprs avoir vu comment sont implments les contrleurs et comment il transmettent les donnes la vue, nous allons passer l'implantation des vues elles-mmes.Voici l'arborescence de leur dossier :

    Dans mon applisation, seul le dossier ''scripts'' est utilis.

    Il contient tous les lments dont l'application a besoin pour afficher les vues.

    Pour comprendre comment a t construite cette partie, il faut savoir comment est cr un site Web :

    Les sites Web comprennent gnralement un haut de page. Celui contient la balise qui permet de dfinir le titre, les mots cl auxquels doit tre rattacher le site. Puis l'intrieur d'une balise , nous avons la page Web en elle-mme. Sa structure et son contenu sont alors crits de haut vers le bas et de gauche droite. Ainsi, si le site Web a un menu gauche comme le mien, le code pour ce menu sera dfini avant le contenu de la page.

    39

  • Comme la structure d'un site varie gnralement peu de page page, certaines parties de codes seront rutilises, comme par exemple le code du menu. Cependant un programme propre doit viter les doublons. C'est dans cet esprit de factorisation que la notion de templates apparat. Les templates de pages HTML sont des morceaux de pages qui peuvent appeler ou tre appels par d'autres templates.J'ai spar mes pages en trois templates :

    Le premier template est le template du haut du code de la page Web, il comprend le dbut de la balise ( qui englobe toutes les balises ) la balise , le menu la barre de titre, puis l'ouverture de la balise du contenu de la page web. Sur l'arborescence c'est le fichier ''header.phtml''.

    Le deuxime template est le template du contenu de la page web. Il contient l'essentiel des informations que la page doit transmettre.

    Enfin, le troisime template est le template du bas du code HTML de la page. Il ferme la balise du contenu et d'autres balises. Il correspond au fichier ''footer.phtml'' sur l'arborescence.

    Comme nous l'avons vu l'action ''indexAction'' du contrleur ''IndexController'' lance la page d'accueil du site et l'action ''hoteAction'' du contrleur ''StatistiquesController'' lance les pages relatifs aux statistiques des htes. Ainsi la page d'accueil aura un template qui lui sera associ ainsi que les pages des statistiques des htes.

    Pour ce dernier cas, il faut donc faire cohabiter plusieurs affichages dans un mme fichier (nomm ''hote.phtml''). Pour savoir lequel il faut charger, nous devons nous servir de la variable $this->etape qui contient le numro ou le nom de l'tape afficher.Pour les pages HTML, nous aurons l'appel du template du haut du code de la page HTML, puis les tests pour savoir quel contenu charger. Une fois ces tests finis, nous devons rajouter l'appel du bas du code de nos pages HTML.Ceci diffrent de l'analyse UML que j'ai labor prcdemment, puisque ce ne sont pas plusieurs fonctions qui sont responsables de l'affichage de plusieurs crans mais une vue qui est responsable de plusieurs cran.De mme, pour des soucis de factorisation de code, le troisime cran du formulaire ( celui o l'utilisateur saisie sa plage horaire personnalise ou contractuelle ) correspond au mme cas.

    En effet, ceci est possible car des deux crans, le seul changement que nous pouvons noter c'est la prsence ou non de la saisie de l'horaire. Pour traiter ce cas, j'ai cr une variable pour enregistrer quel type de formulaire l'utilisateur avait choisi. L'application teste cette variable et si elle correspond au formulaire de la plage horaire personnalise, elle affiche la partie pour saisir l'horaire, sinon elle saute cette tape.

    Enfin, pour diffrencier cette partie des parties PDF et XML, l'application teste si $this->etape est gale 1, 2, 3 ou 4. Si nous sommes dans l'un de ces cas, l'application excutera le code des pages HTML expliqu prcdemment.Les parties PDF et XML sont charges par l'application si $this->etape est gale ''pdf'' ou ''xml''.

    40

  • C. Les problmes d'intgration

    J'ai pu raliser l'ensemble du site dans les temps. Il est donc utilisable par l'tablissement. Malgr ces points positifs, un point ngatif subsiste encore : la lourdeur de l'alimentation de ma base de donnes. En effet, mme si elle est oprationnelle, il serait fastidieux de devoir enregistrer toutes les informations de tous les htes manuellement. C'est ce que j'ai essay de rsoudre les dernires semaines. En effet, mme si j'ai pu rapidement mettre au point un algorithme, il lui manquait la normalisation qui lui permettrait de fonctionner.

    Si nous voulions automatiser l'alimentation de ma base de donnes, il aurait t ncessaire que l'algorithme puisse faire le lien entre les deux bases de donnes. Ce lien ne doit pas tre pas dans ma base de donnes puisque mon algorithme est fait pour la mettre jour. Il ne doit donc pas s'appuyer sur les donnes de la nouvelle base.Pour faire ce lien, il restait Nagios et Customer First. Pour une question de lisibilit, nous avons choisi Nagios.

    Afin d'ajouter un libell comprhensible, nous voulions rajouter, dans Nagios, une partie du nom des organismes aux libells existants concernant les machines. Malheureusement cette solution s'est avre difficile appliquer pour prendre en compte l'ensemble des tablissements. En effet, quelque soit la normalisation de noms, nous aurons un problme de distinction. Par exemple, si nous tablissons de rajouter les quatre premiers caractres du libell de Customer First, pour l'hpital de Brive, nous devrons rajouter ''CH B'' ses machines. Seulement, il existe peut tre d'autres hpitaux dans une ville dont le nom commence par la lettre ''B'' qui sont rpertoris dans Customer First. De plus, certains libells sont entirement crits. Par exemple, pour une maison de retraite, le libell commence par ''Maison de Retraite''. La solution serait peut tre de prendre la premire lettre de chaque mot, mais l encore, nous aurons les mmes problmes que prcdemment.

    Enfin, mme si le dveloppement de la mise jour automatique arrive son terme, les utilisateurs devront ajouter manuellement des informations dans ma base de donnes, car celle-ci des informations qui ne sont ni dans Nagios, ni dans Customer First (comme le site gographique des htes). C'est pourquoi, quelque soit la solution adopte, des informations devront tre ajoutes manuellement.

    41

  • Conclusion

    Malgr des difficults d la configuration de mon poste de travail et l'utilisation d'un framework que je ne connaissais pas, j'ai pu raliser cette application dans les temps. Elle sera sans doute utilise au sein du SIL, jusqu' ce que Nagios ou d'autres logiciels intgrent ces fonctionnalits.

    Ce stage a t trs enrichissant pour moi. J'ai pu y dcouvrir une nouvelle mthode de dveloppement en PHP : la programmation oriente objet applique au Zend Framework.Je n'avais jamais pratiqu cette programmation avec le PHP et j'ai pu l'aborder avec un exemple concret et intressant. De plus j'ai pu faire mes premiers pas dans le Zend Framework, comprendre ces normalisations et ses concepts. Et sachant que ce framework veut s'inscrire comme le standard en matire de dveloppement PHP, c'est toujours une bonne chose de l'avoir abord. Il m'a apport satisfaction.

    Ce stage m'a aussi apport une vritable vision du monde de travail. Avant le stage, je croyais que le travail en entreprise tait beaucoup plus strict que je ne l'ai vcu ou vu au sein du SIL. Certes, la situation n'est pas toujours aussi idale celle-ci, mais je suis persuad que ce mode de fonctionnement n'est pas si rare dans les entreprises.

    Enfin, mme si ce stage a t une agrable approche du monde du travail, je souhaite continuer mes tudes en licence professionnelle. Ceci me permettra d'acqurir une spcialit dans un domaine que j'aime et d'obtenir une validit de mes tudes au niveau europen, m'offrant ainsi plus de possibilits pour ma vie active.

    42

  • Sources documentaires

    Document utilisateur :

    ObjectLine, CustomerFirst Data & View Definition

    Sites internet :

    http://akrabat.com

    http://classes.scriptsphp.org

    http://devzone.zend.com

    http://framework.zend.com

    http://fr.php.net

    http://fr.wikipedia.org

    http://nagios.org

    http://remi.collet.free.fr

    http://www.alsacreations.com

    http://www.developpez.net

    http://www.sil.fr

    43

    http://akrabat.com/http://www.sil.fr/http://www.developpez.net/http://www.alsacreations.com/http://remi.collet.free.fr/http://nagios.org/http://fr.wikipedia.org/http://fr.php.net/http://framework.zend.com/http://devzone.zend.com/http://classes.scriptsphp.org/