Canopée
CompuGroup Medical est un éditeur de logiciels dans le domaine du médical. C'est un des principaux fournisseurs internationaux de logiciels eSanté. Les équipes de Montpellier travaillent sur le logiciel AxiSanté qui permet aux médecins de gérer l'intégralité de leur pratique médicale, ainsi que tout ce qui gravite autour.
L'installation d'AxiSanté est historiquement accompagnée de celle d'un outil permettant de gérer les mises à jour ainsi que de récupérer certaines statistiques. Cet outil a été créé dans les années 2000 et certaines limitations ne sont aujourd'hui plus compatibles avec les objectifs de modernisation de la société.
Il a donc été décidé de totalement le remplacer par un nouvel outil correspondant mieux aux besoins actuels.
Le remplaçant de cet outil est le projet Canopée. Il s'agit d'un écosystème composé de plusieurs composants interconnectés qui permettent de répondre aux différentes attentes :
- L'API (.NET Core) : Nœud central de l'écosystème Canopée.
- L'agent (.NET Core) : Service Windows exécuté sur les ordinateur des cabinets médicaux.
- Le scheduler (.NET Core) : Projet console permettant de lancer plusieurs tâches planifiées.
- L'IHM (Angular) : elle permet d'interagir avec l'écosystème Canopée.
- ELK : Suite ELK pour collecter et analyser les données.
L'API est le nœud central de l'écosystème Canopée. Il a trois vocations principales :
- Envoyer aux agents des ordres d'exécution appelés "pipelines" en fonction du contexte de ceux-ci.
- Recevoir, traiter, stocker et rediriger les données collectées par les agents.
- Stockage en base de données.
- Envoi vers logstash.
- Envoi vers d'autres applications CGM.
- Envoi vers un serveur SFTP pour les fichiers de logs.
- Exposer des APIs renvoyant des données agrégées pour d'autres applications.
Les agents peuvent exécuter deux types de pipelines :
Collectes de données : Possibilité de récupérer diverses informations sur l'ordinateur hôte comme des informations matérielles, le contenu de certains fichiers, les valeurs de certaines entrées dans le registre ou encore des fichiers de logs.
Ces données collectées seront utilisée à plusieurs fins. Premièrement, pour effectuer un suivi du parc informatique tant au niveau des données matérielles que des versions installées. Deuxièmement, pour conditionner l'envoi de certains pipelines en fonction de différents paramétrages comme la version d'un produit.
Actions sur le poste : Possibilité d'effectuer certaines actions sur l'ordinateur hôte comme télécharger un fichier, exécuter un fichier, dézipper une archive, déplacer un fichier ou un dossier, etc...
Ce type de pipeline permet aux agents de se mettre à jour automatiquement lorsqu'une nouvelle version est disponible.
Le scheduler est une solution permettant de lancer plusieurs tâches planifiées pour répondre à certains besoins : génération d'exports Excel, envois de données quotidiens à une autre application CGM et nettoyage du SFTP. Le projet a été conçu pour que de multiples tâches planifiées soient développées avec le même mécanisme. Le projet peut ensuite être déployé X fois pour lancer chacune des tâches avec ses propres configurations et sa propre récurrence.
L'IHM est le point d'entrée de Canopée et possède actuellement deux modules lors de l'écriture de ces lignes :
- Un module permettant de télécharger les différents exports Excel générés par le scheduler.
- Un module permettant de créer des demande de récupération de fichiers de logs.
- Un certains nombre de modules complémentaires seront ajoutés dans le futur.
ELK (Elasticseach, Logstash, Kibana) est une suite logicielle permettant de collecter des données de différents formats depuis plusieurs sources, de les analyser et de les visualiser.
L'espace de visualisation sera fourni avec des graphiques créés par l'équipe de développement, mais l'outil permettra également aux utilisateurs accrédités de requêter les données et de créer des graphiques personnalisés. Cette suite est donc utilisée pour stocker une partie de nos collectes, celles pour lesquelles il y a un besoin d'analyse. Les données sont envoyées à Logstash qui filtre et modifie les données avant de les envoyer à ElasticSearch. Les données sont ensuite visibles dans Kibana sous forme de tableaux ou dans des dashboards contenant différents graphiques. Notre API peut également interroger ElasticSearch pour agréger certaines données qui doivent être envoyées soit au Scheduler soit à d'autres applications.
L'agent est déployé chez les utilisateurs d'AxiSanté. Les données collectées permettent entre autre de mieux connaitre le matériel utilisé par les médecins afin de tester sur des environnements similaires ou encore de suivre les mises à jour des différents logiciels. Des données d'usage sont envoyées directement par AxiSanté pour certains modules afin de mieux comprendre comment ils sont utilisés. Le scheduler génère des exports hebdomadaires qui sont téléchargeables depuis l'IHM. Cette dernière permet également au support de créer des demandes de récupération de fichiers de logs qui seront exécutées par les agents concernés qui enverront une archive qui sera ensuite téléchargeable. Kibana permet d'analyser les données dans plusieurs dashboards.
Mon rôle sur ce projet est celui de leader technique. Je m'occupe de la conception technique de l'intégralité de la solution, de la bonne utilisation du gestionnaire de code source et de la relecture du code des autres membres de l'équipe afin que les bonne pratiques soient respectées. Une attention particulière a été portée sur la qualité du code avec la mise en place de tests unitaires automatisés et l'utilisation de sonarqube.
Cette mission est très enrichissante car j'interviens à tous les niveaux : prise du besoin, spécifications, conception, développement, documentation, tests avec l'équipe QA et déploiement.
J'ai donc pu progresser sur des technologies que je connaissais mais aussi découvrir et me former sur d'autres très intéressantes comme la suite ELK ou docker. Réaliser des tâches moins techniques sur lesquelles je n'avais pas l'habitude d'intervenir a renforcé mon expertise.
En plus de ma mission principale je suis intervenu sur des tâches devops pour lesquelles je n'avais que peu de connaissance en début de mission : je suis maintenant autonome sur certains sujets.