Sujet : Amélioration des scripts python du projet eTrain Maître de stage

publicité
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
Téléchargement