Ronan Jaffré Stage de 2ième année 2 juin – 31 juillet 2008 Institut d'ingénierie informatique de Limoges Alstom Villeurbanne Sujet : Amélioration des scripts python du projet eTrain Maître de stage : Fabien Chanussot, ingénieur informaticien Tuteur de stage : Christophe Boucher 1/22 Remerciements Avant tout développement sur cette expérience professionnelle, il apparaît opportun de commencer ce rapport de stage par des remerciements, à ceux qui m’ont beaucoup appris au cours de ce stage, et même à ceux qui ont eu la gentillesse de faire de ces deux mois de stage un moment agréable. Aussi, je remercie Fabien Chanussot, mon maître de stage qui m’a beaucoup aidé et accompagné tout au long de cette expérience professionnelle avec patience, pédagogie et bonne humeur. Enfin, je remercie l’ensemble de l'équipe pour leur chaleureuse accueil et pour les conseils qu’ils ont pu me prodiguer au cours de ce stage. 2/22 Sommaire Introduction ...................................................................................................................4 I.Présentation de l'entreprise ........................................................................................5 1.Alstom.....................................................................................................................5 1.1.Historique.........................................................................................................5 1.2.Activités............................................................................................................6 2.Alstom Transport.....................................................................................................8 2.1.Organisation.....................................................................................................9 2.2.Activités............................................................................................................9 3.Alstom Villeurbanne................................................................................................9 3.1.Historique.........................................................................................................9 3.2.Activités..........................................................................................................10 3.3.eTrain UTM....................................................................................................10 II.Contexte du stage....................................................................................................11 1.Le service et l'équipe eTrain.................................................................................11 2.Environnement logiciel et matériel........................................................................11 3.Déroulement chronologique du stage...................................................................11 III.Travail effectué........................................................................................................14 1.Présentation du sujet............................................................................................14 2.Python et WebService..........................................................................................14 2.1.Python............................................................................................................14 2.2.WebService....................................................................................................15 3.Démarches effectuées..........................................................................................15 3.1.Fichiers python...............................................................................................16 3.2.Multiservices...................................................................................................16 3.3.Arrêt des services..........................................................................................16 3.4.Settings par device ........................................................................................16 4.Résultats...............................................................................................................16 Conclusion...................................................................................................................19 Bibliographie................................................................................................................20 3/22 Introduction Dans le cadre de ma 2ième année dans mon école d'ingénieur en informatique, 3il, j'ai été accueilli pour un stage d'une durée de deux mois (du 2 Juin jusqu'au 31Juillet) dans le service Software Engineering d'Alstom Transport à Villeurbanne. L'équipe dans laquelle j'ai effectué mon stage travaille sur le projet eTrain UTM, un logiciel de maintenance pour les équipements d'une rame de train. Ce logiciel permet d'analyser les différents états des variables du système, de trouver la raison de la panne et de résoudre le problème. Au sein de cette équipe, l'objectif de mon stage a été de travailler et d'améliorer les scripts pythons des simulateurs afin de rajouter quelques fonctionnalités necessaires au projet. Ce stage a donc été une opportunité pour moi de percevoir comment une équipe d'informaticiens travaille ensemble sur un projet et atteigne les objectifs dans les délais prévus. Cela m'a aussi permis de réaliser comment une entreprise réputée dans son domaine tente de garder son avance par rapport à ses concurents et quelle stratégie Alstom Transport a choisie dans ce secteur. I.Présentation de l'entreprise 1.Alstom ALSTOM est un groupe industriel géré par un conseil d’administration composé de 9 membres dont 4 français, Patrick KRON est actuellement le Président Directeur Général. La durée du mandat de chacun des administrateurs est de 4 ans. Le comité exécutif comporte 11 membres qui sont les directeurs ou présidents des différents secteurs et des fonctions supports (Ressources humaines, juridiques, finances…) 1.1.Historique A l'origine ALSTHOM, contraction de «Alsace» et de «Thomson» était le résultat de la fusion, réalisée en 1928, d'une partie de la SACM (Société alsacienne de constructions mécaniques à Mulhouse puis à Belfort), spécialiste de la construction de locomotives, et de la Compagnie Française Thomson-Houston, société francoaméricaine spécialiste des équipements de traction électrique et la construction électromécanique. Rappels : 1922 :Création de la CFTH (Compagnie Française Thomson-Houston), 1928 :Création d'ALSTHOM société de construction électromécanique (Compagnie Française Thomson-Houston + Alsacienne de Construction Mécanique) 1958 :Arrivée à la direction Générale de l'ALSTHOM (siège : Avenue Kléber à Paris) de M. Glasser qui inaugure une nouvelle ère et de nouvelles méthodes de direction avec des restructurations internes. 1965 :Création de trois filiales, issues de participation de l'ALSTHOM et de la CGE, se répartissant des fabrications différentes, ALSTHOM-SAVOISIENNE (transformateurs et machine électrique), DELLE-ALSTHOM (appareillages moyennes tensions), UNELEC (appareillage basse tensions). En 1969, la Compagnie générale d'électricité (C.G.E), qui avait absorbé Alcatel en 1966, devient l'actionnaire majoritaire d'ALSTHOM. Cette prise de contrôle est confirmée en 1976 après la fusion avec les Chantiers de l'Atlantique. Entreprise franco-britannique Le 22 juin 1989, ALSTHOM fusionne avec la branche GEC Power Systems du groupe britannique The General Electric Company et devient ainsi sous le nom de Gec ALSTHOM une coentreprise paritaire franco-britannique, filiale commune de GEC et de Alcatel ALSTHOM. La nouvelle société, ainsi indépendante depuis 1998, a pris le nom d'ALSTOM. En 1999, ALSTOM crée une coentreprise avec ABB, nommée ABB ALSTOM Power, dans le domaine des systèmes de production d'énergie, puis en acquiert en 2000 la totalité des parts. En 2001, Alcatel et GEC cèdent leurs parts (24% chacun) dans ALSTOM. Concentration de l'industrie d'énergie Le 9 janvier 2004, ALSTOM cède ainsi à Areva son activité transmission et distribution pour 913 M€. Fin 2005, ALSTOM cède à Barclays Private Equity son activité Power Conversion (électronique de puissance), qui prendra le nom de Converteam en avril 2006. Le 4 janvier 2006, ALSTOM décide de se départir de ses chantiers navals, les Chantiers de l'Atlantique et Leroux Naval, au profit du spécialiste norvégien Aker Yards, cette transaction ayant été finalisée le 31 mai 2006. La société commune constituée avec Bouygues dans le domaine hydraulique est opérationnelle depuis novembre 2006. Concentration de l'industrie ferroviaire En 1994, la société achète 51% des actions du constructeur ferroviaire allemand Linke-Hofmann-Busch (LHB), de Salzgitter, de sa société mère Preussag. Le 13 juin 1997, ALSTHOM achète les restant 49% des actions de LHB, qui figure désormais comme ALSTOM LHB. En 1998, ALSTHOM achète à la famille De Dietrich plus des deux tiers des actions de De Dietrich Ferroviaire situés à Reichshoffen en Alsace, ce qui donne naissance à ALSTOM DDF. En juillet 2000, ALSTOM rachète la société italienne Fiat Ferroviaria. 1.2.Activités Deux grands métiers, trois secteurs Alstom se concentre sur deux métiers dont il est l'un des leaders mondiaux: Alstom Power (les équipements et service de production d'électricité) − Secteur Power Systems − Secteur Power Service Alstom Transport (les équipements et service de transport ferroviaire) Deux grands métiers: Energie et Transport Le total des commandes 2007-2008 s'élève à 23,5 milliards d'euro: Alstom Power Systems en génère 11,6 Mds €, Alstom Power Service 4,4Mds €, et Alstom Transport 7,5 Mds €. Alstom Power est n°3 mondial dans les équipements de production d'électricité: 25% de la capacité de production d'électricité mondiale est d'origine Alstom − n°1 mondial dans les centrales clés en main − n°1 mondial dans l'hydro-électricité − n°1 mondial dans les équipements de contrôle des émissions − n°1 mondial dans les services pour les compagnies d'électricité Alstom Transport est n°2 mondial dans le transport ferroviaire: 1 métro sur 4 et 1 tramway sur 4 dans le monde est d'origine Alstom − n°1 mondial dans la grande et très grande vitesse − n°2 mondial dans les transports urbains Une large présence internationale Alstom est bien implanté en Europe mais vend égalements ses services en Asie, en Afrique et en Amérique du nord. Europe (50%) Amérique du Nord (13%) Power Systems Amérique du Sud (4%) Afrique-Moyen Orient (19%) Asie (14%) Power Service Transport Commande reçues par région et par secteur Priorité à l'innovation Le budget de Recherches & Développements s'élève à 554 milliards d'euro. Son avance technologique est symbolisée par des programmes majeures: − Power : 7 partenariats sur centrales et sites pilotes travaillent pour le captage de CO2 (USA, Canada, Allemagne, France, Norvège, Suède) − Transport : Présentation de l'AGV (février 2008), nouveau tramway Citadis, signalisation. 2.Alstom Transport Dans une logique de mobilité durable, ALSTOM Transport développe et propose la gamme de systèmes, d’équipements et de service la plus compète du marché ferroviaire. Avec 18% du marché et un chiffre d’affaires de 5,3 milliards d’euros, l’entreprise est n°1 des trains à grande et très grande vitesse et au second rang mondial sur les marchés des transports urbains, des trains régionaux, de la signalisation, des équipements d’infrastructure et de l’ensemble des services associés. Une large gamme de produits et services 2.1.Organisation Pour répondre au mieux aux besoins spécifiques des marchés du transport à l'échelle mondiale, ALSTOM Transport est organisé en 5 régions dans le monde, choisis selon des critères culturels, afin de gérer plus facilement les projets ; les opérations représentent les différents segments du secteur. Organigramme d'Alstom Transport 2.2.Activités Alstom Transport propose des services tels que la rénovation, la fourniture de pièces détachées ainsi que la maintenance sur des équipements (équipement de signalisation…), des matériels roulants (trains, métros, tramway…) et des infrastructures (voies ferrées…), qu’ils soient construits ou non par ALSTOM. Pour l'année fiscale 2004-2005, la répartition du chiffre d'affaire se fait comme suit: – Matériel roulant : 57% – Services : 23% – Solutions de signalisation : 12% – Systèmes de transport : 5% – Infrastructure : 3% Sur le marché mondial du transport ferrovier, Alstom possède deux principaux concurents, Siemens et Bombardier. A eux trois, ils totalisent 50% des parts de marché. Alstom Transport en France possède 4 clients majeurs : – SNCF : Très grande vitesse, Grandes Lignes, TER (Régions Françaises), Ile de France, Fret – Collectivités Locales : tramways, tram-trains et métros – RATP : métros, tramways, et RER parisiens – RFF : signalisation et infrastructure Il réalise 30% du chiffre d'affaire d'Alstom Transport (1.7 milliards d'euros). Un tiers est destiné à l'exportation et 80% au matériel roulant. 3.Alstom Villeurbanne 3.1.Historique L’existence du site remonte à 1886 où était installée, à l’époque, la compagnie « Moulins électriques ». Depuis, la société a changé de nom et d’activité de nombreuses fois tout en demeurant dans le secteur électrique ou des automatismes. Dans les années 70, sous le nom de Compagnie Électromécanique, elle est sollicitée pour des premiers contrats ferroviaires. Cette nouvelle entité qui se développe entre dans le groupe ALSTOM en 1983. En 1995, ce sont deux unités internes d’ALSTOM, ECS Villeurbanne (Electronic Control System) et TIE Paris (Transport Informatique Embarqué) qui fusionnent et la nouvelle unité prend le nom de TES (Transport Electronic System) puis EES (Equipment Electronic System) en 1997. 3.2.Activités Alstom Villeurbanne est le Centre mondial d'Expertise d'Alstom Transport pour le systèmes électroniques embarqués, véritables cerveaux des trains. Le site assure la conception, la fabrication, la maintenance et le SAV des systèmes électroniques embarqués et sur voies. Ceux-ci contrôlent et pilotent le fonctionnement des équipement du train et de la signalisation (régulation de la vitesse, informations sécuritaires au conducteur). Il est aussi spécialisé dans les systèmes d'informations en France. Avec plus de 400 ingénieurs, Villeurbanne est un maillon central d'Alstom pour le développement des systèmes électroniques. Basé en France, le site a une vocation internationale puisque 68% de son chiffre est réalisé à l'export. 625 employés y travaillent. On y compte 16% d'opérateurs, 16% d'administratifs et techniciens, 68% d'ingénieurs et cadres. Alstom Villeurbanne possède un laboratoire de compatibilité électromagnétique et des chambres d'essais climatiques et aux brouillards salins. Le site travaille sur divers projets tels que des systèmes d'information passagers, des contrôleurs de traction ou de convertisseur auxiliaire ainsi qu'eTrain (maintenance) sur lequel j'ai travaillé. Produits et systèmes du matériel roulant 3.3.eTrain UTM eTrainUTM est une application WinForms .NET qui permet d’assurer la maintenance des équipements électroniques embarqués Alstom. Il permet entre autre: le vidage des événements enregistrés sur les équipements embarqués; le chargement logiciel sur les équipements ; l'affichage d'un « oscilloscope logiciel » ; l'identification logiciel et matériel des équipements ; L'utilité de ce logiciel est donc de réparer (de manière software) un équipement en se branchant au switch de la rame de train et d'essayer d'en découvrir la cause. Etrain communique avec les équipements du train par WebService (SOAP). II.Contexte du stage 1.Le service et l'équipe eTrain Le service Le service Software Engineering se trouve dans le batiment Bel Air 1 à Villeurbanne. Son rôle est de développer des logiciels afin d'assurer une maintenance des équipements de la rame posant problème. Il est constitué de plusieurs équipes de développement : – Opéra qui développe un logiciel de base embarqué, – Workbench pour les fichiers de configurations, – et eTrain pour la maintenance débarquée. L'équipe eTrain L'équipe dans laquelle j'ai travaillé s'occupait essentiellement du développement du logiciel eTrain. Voici la liste des membres par ordre alphabétique qui la composent: Abadja Saïd, Prestataire chez Sogeti-Transiciel Bonnichon Sylvain, Prestataire chez Orange Business Services Calamusa Jérome, Prestataire chez B2i Chanussot Fabien, Concepteur logiciel Gonzalez Julie, Prestataire chez ASystem Leglise Marie-Laure, Responsable logiciel Passelegue Sabine, Responsable déploiement Poete Stéphane, Architecte logiciel En plus de cette équipe fixe, se trouvent Vincent Brun, stagière, ainsi que plusieurs prestataires tels que Jérome ... et Vincent par exemple qui sont là pour une durée relativement courte. TODO: manque quelques noms. 2.Environnement logiciel et matériel Environnement matériel La salle de notre équipe comporte deux tables en forme de trèfle. Sur chacune d'elles, cinq ou six ordinateurs sont posés et sont reliés au réseau intranet de l'entreprise ainsi qu'à Internet. Tous les membres de l'équipe travaillent sur des ordinateurs fixes avec écrans plats. Environnement logiciel Les ordinateurs tournent sur le système d'exploitation Windows 2000. Etant donné le travail en équipe à fournir dans un tel projet, Clearcase a permis aux développeurs de travailler en parallèle sur le code source logiciel. Dans le cas de la programmation des services coté simulateur, Python25 a été fortement utilisé ainsi qu'évidemment eTrain pour tester leurs fonctionnements. Wireshark a également servi pour vérifier les messages SOAP envoyés. 3.Déroulement chronologique du stage Le stage a duré huit semaines dans lesquelles j'ai pu travailler sur les codes python du simulateur. TODO: rédaction. 1ière semaine Découverte de l'entreprise et de l'équipe. Découverte de l'architecture eTrain/Simulateur Codage de fonctions python (soap_getTimeDate et soap_setTimeDate) dans IdentificationServer.py Codage de fonctions python (soap_AddTraceDefinition et soap_DelTraceDefinition) dans TargetTracesServer.py 2ième semaine Explication du sujet de stage. Travail sur SetTestData.py et TestScenarioServer.py: ajout d'un paramètre -d (ici train.xml) à SetTestData et lancement des services par serveurs multithreadés. Cela consiste à lancer un message SOAP contenant le fichier xml à TestScenarioServer. Ce dernier analyse alors le fichier xml et lance un thread par liste de services du même port. Présence à une présentation powerpoint sur Alstom et Alstom transport. 3ième semaine Travail fini sur SetTestData. Travail sur l'ajout d'une fonctionnalité: kill'em all. C'est à dire couper tout les serveurs de services lancés. Apparemment le paramètre -s <settings.xml> n'est propre qu'à un device. Il contient le numéro de version de l'équipement et d'autres informations. Or un projet peut avoir plusieurs équipements et donc des versions différentes. La solution serait de modifier les scripts précédents pour résoudre ces deux problèmes. Congé le 20 Juin(départ en Allemagne à Stuttgart) 4ième semaine Congé le 23 Juin(départ en Allemagne à Stuttgart) Travail sur l'envoi d'un message SOAP 'KillEmAll' de la part de SetTestData à TestScenarioServer.py fini. Problème sur la fermeture des threads. Je me renseigne sur les signaux en python, et la fonction AsServer. 5ième semaine Travail sur la fermeture des threads fini. J'ai fini par modifier la fonction AsServer. Recherche sur le passage en paramètre à SetTestData de plusieurs fichiers xml de configuration (settings.xml) Rédaction du rapport de stage. 6ième semaine Travail sur les fichiers xml de configuration (settings.xml) fini. Finition de codes réalisés précédemment. Rédaction du rapport de stage. Présence à la réunion de service. 7ième semaine Finition de codes réalisés précédemment. Rédaction du rapport de stage. 8ième semaine Rédaction du rapport de stage. Reflexion sur des ajouts utiles au projet. III.Travail effectué 1.Présentation du sujet Dans le projet eTrainUTM se trouvent plusieurs acteurs: – L'application .NET, – SetTestData, – TestScenarioServer, – Les services. Comme le montre le schéma suivant, le script python TestScenarioServer est lancé sur la cible. Il est l'interface entre eTrain et les services lancés. Des données sont d'abord initialisées (Numéro de version d'un équipement par exemple) par SetTestData qui analyse un fichier xml passés en paramètre (settings.xml) et envoit ces données par plusieurs requêtes SOAP. Lors d'une demande d'informations, l'application eTrainUTM .NET interroge le service identifié par son socket (ip + port) et le nom du service et envoit la requête SOAP approprié pour récupérer la bonne information. [schéma 1] Cependant avant mon arrivé, le logiciel ne pouvait gérer les informations que d'un seul équipement et qu'un seul service à la fois. Certains fonctionnalités n'étaient pas non plus codée sur certains services. Il a fallu donc que je travaille sur ces points. 2.Python et WebService 2.1.Python TODO: trop de listing. Python est un langage portable, dynamique, extensible, gratuit, qui permet (sans l'imposer) une approche modulaire et orientée objet de la programmation. Python est développé depuis 1989 par Guido van Rossum et de nombreux contributeurs bénévoles. Détaillons un peu les principales caractéristiques de Python, plus précisément, du langage et de ses deux implantations actuelles: • Python est portable, non seulement sur les différentes variantes d'Unix, mais aussi sur les OS propriétaires: MacOS, BeOS, NeXTStep, MS-DOS et les différentes variantes de Windows. • Python est gratuit, mais on peut l'utiliser sans restriction dans des projets commerciaux. • Python convient aussi bien à des scripts d'une dizaine de lignes qu'à des projets complexes de plusieurs dizaines de milliers de lignes. • La syntaxe de Python est très simple et, combinée à des types de données évolués (listes, dictionnaires,...), conduit à des programmes à la fois très compacts et très lisibles. A fonctionnalités égales, un programme Python (abondamment commenté et présenté selon les canons standards) est souvent de 3 à 5 fois plus court qu'un programme C ou C++ (ou même Java) équivalent, ce qui représente en général un temps de développement de 5 à 10 fois plus court et une facilité de maintenance largement accrue. • Python gère ses ressources (mémoire, descripteurs de fichiers...) sans intervention du programmeur, par un mécanisme de comptage de références (proche, mais différent, d'un garbage collector). • Il n'y a pas de pointeurs explicites en Python. • Python est (optionnellement) multi-threadé. • Python est orienté-objet. Il supporte l'héritage multiple et la surcharge des opérateurs. Dans son modèle objets, et en reprenant la terminologie de C++, toutes les méthodes sont virtuelles. • Python intègre, comme Java ou les versions récentes de C++, un système d'exceptions, qui permettent de simplifier considérablement la gestion des erreurs. • Python est dynamiquement typé. Tout objet manipulable par le programmeur possède un type bien défini à l'exécution, qui n'a pas besoin d'être déclaré à l'avance. • La bibliothèque standard de Python, et les paquetages contribués, donnent accès à une grande variété de services : chaînes de caractères et expressions régulières, services UNIX standards (fichiers, pipes, signaux, sockets, threads...), protocoles Internet (Web, News, FTP, CGI, HTML...), persistance et bases de données, interfaces graphiques. • Python est un langage qui continue à évoluer, soutenu par une communauté d'utilisateurs enthousiastes et responsables, dont la plupart sont des supporters du logiciel libre. • Pour finir, Python est un langage de choix pour traiter le XML. 2.2.WebService En quelques mois, les Web Services sont devenus le nouveau point de convergence technologique de l'ensemble des acteurs du marché de l'informatique. L'objectif des Web Services est de faciliter l'accès aux applications entre entreprises et ainsi de simplifier les échanges de données. Ils poursuivent un vieux rêve de l'informatique distribuée où les applications pourraient interopérer à travers le réseau, indépendamment de leur plate-forme et de leur langage d'implémentation. Dans ce sens, ils s'inscrivent dans la continuité d'initiatives telles que CORBA (Common Object Request Broker Architecture, de l'OMG) en apportant toutefois une réponse plus simple, s'appuyant sur des technologies et standards reconnus et maintenant acceptés de tous. Un Web Service est un composant implémenté dans n'importe quel langage, déployé sur n'importe quelle plate-forme et enveloppé dans une couche de standards dérivés du XML. Il doit pouvoir être découvert et invoqué dynamiquement par d'autres services. SOAP (Simple Object Access Protocol) est un protocole d'échange inter-application indépendant de toute plate-forme, basé sur le langage XML. Un appel de service SOAP est un flux ASCII encadré dans des balises XML et transporté dans le protocole HTTP. WSDL (Web Services Description Language) donne la description au format XML des Web Services en précisant les méthodes pouvant être invoquées, leur signature et le point d'accès (URL, port, etc..). C'est, en quelque sorte, l'équivalent du langage IDL pour la programmation distribuée CORBA. 3.Démarches effectuées Fabien, mon maitre de stage m'a donné successivement des petits travaux à faire concernant les scripts python. J'ai donc tenté de résoudre les problèmes qu'on m'avait posé tout en respectant la structure déjà présente. 3.1.Fichiers python Durant la première semaine, j'ai été amené à travailler sur quelques petites fonctions telles que soap_getDateTime dans le script TargetControlServer.py. Cela m'a permis d'apprendre le python ainsi que l'architecture SOAP et l'utilisation d'eTrain. J'ai également du travailler sur le nouveau code du service Traceur (le script TargetTracesServer.py). Cependant, le code était trop complexe pour moi encore et j'ai du passer à autre chose pour l'instant. J'ai tout de même appris à 'parser' (c'est à dire analyser) les fichiers xml en python et à remplir les informations dans une structure de type objet. 3.2.Multiservices Une fois quelques fonctions du traceur finies, Fabien m'a expliqué que dans le fichier train.xml se trouvait la liste des fichiers xml des équipements de la rame. Ces fichiers xml comportent la liste des services et des sockets necessaires au bon fonctionnement du logiciel. Afin de pouvoir utiliser ce fichier, j'ai rajouté un paramètre au script SetTestData.py ainsi qu'un message SOAP pour envoyer le lien du fichier xml à TestScenarioServer. Je me suis donc interessé à savoir comment faire un message SOAP. Dans le fichier de description des Webservices du TestScenarioServer (le WSDL), j'ai copié coller un message afin d'implanter le mien et j'ai rajouté un paramètre de type string contenant le 'path' du fichier xml. Le code wsdl est au format xml, voilà ma fonction: <s:element name="SetDevicesVariables"> <s:complexType> <s:sequence> <s:element name="xmlFileName" type="s:string"/> </s:sequence> </s:complexType> </s:element> J'ai ensuite lancé wsdl2py qui génère à partir du fichier wsdl des fichiers pythons. Du coté TestScenarioServer, j'ai du programmer la fonction LoadDevicesVariables afin de récupérer ce fichier xml. Avant de me lancer tête baissée, il a fallu savoir comment je pouvais lancer tout les services des équipements. Auparavant les services étaient lancés grace à la fonction AsServer contenue dans le package ZSI. Il fallait y fournir comme paramètre un port et la liste des services à lancer. Etant donné que parmis mes services à lancer, il y pouvait y avoir plusieurs ports, il me fallait donc lancer plusieurs serveurs (avec AsServer) et ceci simultanément. Je me suis donc penché sur de la documentation sur Internet afin de lancer des threads en python. Il y aurait donc un thread par port qui lancerait un serveur avec la liste des services correspondant. J'ai alors analyser le fichier train.xml puis ceux des équipements pour y trouver leur liste de service: En voici un exemple: <ServicesCollection> <WebService BaseUri="http://{0}:81/cgi-bin/targetControl" Name="controld" /> <WebService BaseUri="http://{0}:81/cgi-bin/targetTraces" Name="traced" /> <WebService BaseUri="http://{0}:81/cgi-bin/targetIdentification" Name="identd" /> </ServicesCollection> Grace aux outils fournis par python sur les chaines de caractères, j'ai pu récupérer le port (ici 81) et les noms des services. Dans le cas où il n'y avait pas de port indiqué, j'ai attribué comme valeur par defaut le port 42. Je les ai ensuite triés suivant le port dans des dictionnaires en python. Cela a été d'ailleurs très facile vu les puissants outils proposés par le langage. Une fois que j'avais une liste de service à lancer sur un port, je n'avais plus qu'à créer un thread par port lançant les services. 3.3.Arrêt des services Une fois le lancement de plusieurs service, il m'a été demandé de pouvoir fermer tout les services déjà lancés depuis SetTestData. J'ai donc ajouté un paramètre '-k' sur ce fichier qui envoit un message SOAP 'KillEmAll' à TestScenarioServer. J'ai du donc, comme avec le lancement de plusieurs services, modifier le wsdl afin d'y ajouter ma requête SOAP, cette fois sans paramètre. Du coté TestScenarioServer, j'ai longtemps cherché comment je pouvais fermer les services. J'ai tout d'abord cherché sur divers forums des fonctions permettant de 'killer des pid', mais cela n'était pas suffisemment propre. J'ai finalement regardé de plus près la fonction AsServer pour voir s'il y avait une condition d'arrêt et j'ai trouvé la fonction qui tourne en boucle: serve_forever() qui dérive de ServiceContainer. Après maintes recherches sur google, j'ai fini par trouver le code de cette fonction avec en plus une condition d'arrêt. Après l'avoir implanté dans mon code, je n'avais plus qu'à effectuer la méthode stop() à chaque référence de thread pour fermer les serveurs. Après quelques tests concluants en modifiant les codes ZSI, j'ai fini par faire un héritage de ServiceContainer pour y faire une surcharge de serve_forever() et d'y ajouter mon code. Ainsi lors d'une mise à jour de ZSI, mon code marchera toujours. 3.4.Settings par device Pour le moment, chaque équipement utilisait le même fichier de configuration passé en paramètre dans SetTestData (settings.xml). J'ai donc voulu rajouter une balise xml dans les fichiers des équipements comportant le chemin du fichier de configuration. Cependant, mon maitre de stage m'a déconseillé de toucher à ce fichier étant donné qu'il était autogénéré par l'équipe WorkBench. J'ai du donc créer un fichier xml qui définissait les fichiers de configuration pour un ID d'équipement correspondant à celui stocké dans train.xml. Toutes les infos étant stockées dans TestScenarioServer, Il m'a fallu modifier la structure pour supporter plusieurs informations d'équipements. Cela s'est traduit par un dictionnaire d'identifiants d'équipement. Il a aussi fallu revoir tout les messages SOAP afin qu'ils s'adressent bien à un équipement en particulier. Donc à chaque message SOAP (du coté SetTestData=>TestScenarioServer et Service=>TestScenarioServer), un paramètre comportant l'id de l'équipement a été implanté. Evidemment, cela a entrainé un grosse modification du fichier TestScenario.wsdl et des autres fichiers de services comportant des requêtes SOAP à TestScenarioServer. 4.Résultats TODO: nc Au cours de ce stage, j’ai beaucoup appris. Les apports que j’ai tiré de cette expérience professionnelle peuvent être regroupés autour de trois idées principales : les compétences acquises, les difficultés rencontrés et solutions apportées ainsi que la vie en société. Compétences acquises [Détailler ici les compétences que vous avez pu tirer, développer, mieux cerner lors de votre stage. L’ensemble des savoirs, savoir-faire tirés de l'expérience nécessaires à l'exercice d'un métier. La notion de savoir renvoie évidemment aux connaissances initialement et ultérieurement acquises indispensables à l'exercice de la profession. La notion de savoir procédural est liée à ce qui est commun au métier, à la profession. L'expérience, le tour de main de l'ouvrier par exemple est lié à la singularité de l'individu, à sa pratique dans l'exercice de l'activité et en relation avec d'autres, au sein de l'équipe, face aux clients.] Difficultés rencontrés et solutions apportées [ Durant toute expérience professionnelle, des difficultés sont rencontrés : problèmes de communication, de formation, problèmes d’efficacité, mauvais résultats, non respect de délai… Il y a toujours des problèmes et surtout des solutions ! Si vous n’arrivez pas a trouver quelles difficultés vous avez rencontrés, c’est sans doute que vous avez trouvé facilement des solutions pour les résoudre ! Montrer ces erreurs ou les difficultés rencontrées permet de montrer que ces problèmes qui arrivent à tous, vous ont effectivement rendu plus fort ! ] La vie en société Mon stage chez [•] a été très instructif. Au cours de ces [•] mois, j’ai ainsi pu observer le fonctionnement d’une [•]. Au-delà, de l’activité de chacun des services, j’ai pu apprendre comment s’articulent les différents départements d’une telle entreprise. Par ailleurs, les relations humaines entre les différents employés de la société, indépendamment de l’activité exercée par chacun d’eux, m’a appris sur le comportement à avoir en toute circonstance. L’articulation des différents départements Comme il a été vu plus haut, [•] départements structurent la société [•]. Aussi, et au travers de l’analyse qui a pu être faite, il apparaît indéniable que tous ces services interviennent à un moment ou a un autre de la prise de décision. Pour autant, cette prise de décision mérite d’être étudiée spécifiquement, dès lors qu’elle est largement [•]. En effet, il est possible de comparer ce type de société [•]. L’expression la plus éloquente de ce partage de responsabilité est la décision de [•]. Aussi, toutes les semaines, les [résultats] étaient diffusés à tous les employés, de manière à ce qu’ils soient impliqués dans les résultats de l’entreprise (sachant que le but est chaque semaine d’avoir un maximum de [•] et à ce qu’ils connaissent [•]. [La circulation de l’information est ainsi un des points forts que j’ai retenu de cette société, tant au niveau du travail collaboratif, que dans l’implication de tous dans le bon fonctionnement de la société.] Les relations humaines entre les employés Au-delà du fonctionnement de l’entreprise, j’ai pu ressentir [•]. En effet, l’atmosphère au sein de la société était très [•]. J’ai ainsi constaté que la hiérarchie des fonctions de la société [•] était [•] dans les rapports entre les employés, favorisant par là [•]. A titre d’exemple, je [•]. [Au travers de cette convivialité, j’ai pu comprendre que l’activité d’une société est plus performante dans une atmosphère chaleureuse et bienveillante.] Conclusion TODO: nc Ce que j’ai bien pu apprendre (sur le plan technique, la manière de réfléchir, le monde l’entreprise etc) et comment repasser mes chemises. [La conclusion résume bien sur, dans une première partie, les principales conclusions de votre rapport de stage. Mais la conclusion permet aussi dans une deuxième partie de vous interroger sur la suite, sur l’avenir de l’entreprise, sur le service, et de mettre en perspective votre stage dans votre formation et dans projet professionnel.] A titre de conclusion, il semble intéressant de mettre en évidence les questions actuelles qui se posent sur l’avenir de l’industrie de [•], de savoir comment les acteurs économiques vont faire [•]. Au centre de cette question se trouve naturellement le problème de [•]. En effet, mon stage a été très bénéfique à cet égard : [•]. Il en résultera [•] La loi du [•] a donné un certain nombre de solutions aux dérives que pourraient prendre le [•]. Pour autant, plutôt que la [•], un changement de [•] apparaît plus à même à régler [•]. Bibliographie Python http://diveintopython.org/ http://www.poromenos.org/tutorials/python http://www.easter-eggs.org/article_77_Le_langage_Python.html http://www.xminc.com/mt/archives/pythontut2.html http://wikipython.flibuste.net/moin.py/CodeXML http://docs.python.org/tut/node7.html http://docs.python.org/lib/module-signal.html http://python.developpez.com/faq/?page=Thread http://docs.python.org/lib/thread-objects.html http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/1/ http://www.cifen.ulg.ac.be/inforef/swi/download/python_notes.pdf WebService http://www.commentcamarche.net/web-services/web-service.php3 http://en.wikipedia.org/wiki/Web_service http://www.redbooks.ibm.com/redbooks/pdfs/sg246461.pdf http://www.redbooks.ibm.com/redbooks/pdfs/sg246583.pdf http://www.redbooks.ibm.com/redbooks/pdfs/sg247257.pdf http://pywebsvcs.sourceforge.net/zsi.html