# Présentation générale du sujet :
La solution qui en résulte maintient l’exécution des divers composants du système de test de performance d’une manière automatique . En outre, notre projet a deux objectifs primordiale qui sont :
•analyser les fichiers logs de SGW et générer un rapport
•automatiser le processus intégral, allant de la phase de test de performance jusqu’à l’obtension de rapport d’analyse
# Objectif du document :
Ce document présente le contexte général de notre projet et un guide d'utilisation pour notre solution
* **La performance ?**
Dans notre cas, le test de performance qu'on veut réaliser consiste à calculer le nombre de trades traités par la SGW dans chaque seconde.
* **Les sénarios du test de performance à réaliser**:
1. Les messages CCP (Trade Reception) :
Ce cas de test couvre le scénario des messages provenant de CCP. La SGW lit les transactions et les envoie au client.
3. Les demandes d'operetaion (Operation Request):
Ce cas de test couvre le scénario de traitement des demandes d'opérations provenant du client.
5. les confirmation (Clearing notification):
Ce cas de test couvre le scénario de traitement des confirmations de CCP.

* **Jenkins** : Jenkins est le principal serveur d'automatisation open source, fournissant des centaines de plugins pour soutenir la construction, le déploiement et l'automatisation de tout projet. Il offre un moyen simple de configurer un environnement d'intégration continue ou de livraison continue (CI / CD) pour presque toutes les combinaisons de langages et de référentiels de code source à l'aide de pipelines, ainsi que l'automatisation autres tâches de développement de routine.
Dans Jenkins, un pipeline est une séquence d'événements liés les uns aux autres.
#######################
Nous avons télécharger et installer Jenkins sur windows. En outre, nous avons créer des pipelines jenkins qui servent à exécution les composants suivants sur une machine centos :
* **StreamGatewayCME v2020** : La SGW dont la performance doit être évaluée
> Extraits de fichier log SGW
> **Trade Reception :**

###########
> **Operation Request :**
>
>###########
> **Confirmation Request :**
> 
* **Apache ActiveMQ** :Le fournisseur JMS utilisé pour la connectivité CCP et DOWNSTREAM.
* **Xsimulator** : est un produit écrit en java, developpé par l’équipe SGW. Cet outil est utilisé pour générer des messages CCP, des demandes d'opération et des confirmations. En effet, il simule le comportement de marché et également de client selon le fichier de configuration vers le quel il pointe.
* **java** : java version "14.0.2" 2020-07-14
Java(TM) SE Runtime Environment (build 14.0.2+12-46)
Java HotSpot(TM) 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing)
* **Apache NetBeans 11.3** : La plateforme de développement la plus populaire pour Java
* **Logstash** : est un outil de collecte de données. Il regroupe tous les types de données provenant des différentes sources et les indexe puis les rend prêtes au stockage dans la base.
* **Elasticsearch** : est une base de données NoSQL orienté documents. Elle est basée sur le moteur de recherche Lucene, et elle est construite avec RESTful APIs. Elle offre des requêtes avancées pour effectuer des analyses détaillées et stocke toutes les données de manière centralisée. Elle est utile pour effectuer une recherche rapide des documents.
# **Comment utiliser**
Les étapes à suivre
1. **Fixer les fichiers de configuration (Xsimulator, SGW, logstash, DataAnalyser)**
* **Xsimulator**: Son fchier de config contient le nombre de trades à injecter, le sénario de test à réaliser (Trade Reception, Request .., confirmation),le workflow à effectuer(giveup, fullservice) et les noms des files d'attente activemq spécifiques (CCP_IN, CCP_OUT, DS_IN, DS_out) ...
Un extrait du fichier de conf XSimulator-Trade_reception.
```
xsimulator.gatewayName = CMEGatewayTest
xsimulator.marketName = CME
xsimulator.testMessages = 500
xsimulator.startSequence = 1
xsimulator.sendSequence = 0
xsimulator.messageProcessor = com.gl.ptd.sgw.simulate.cme.StandAloneMessageProcessor
#trade reception
xsimulator.processPathOutNew = true
#request operation
xsimulator.processPathIn = false
#confirmation
xsimulator.processPathOutAck = false
xsimulator.standAlone = true
xsimulator.workflow = giveup
xsimulator.mq.hostName = localhost
xsimulator.mq.port = 61616
xsimulator.mq.queue.out = CCP_OUT
xsimulator.mq.queue.in = CCP_IN
```
* **SGW** :
> **Extraits de cme-market.properties et global-sgw.properties, utilisé pour la configuration StreamGateways**.


* **Logstash** : Il se compose de trois éléments :
1. Input (entrée) : contient la configuration pour recevoir les données de leurs sources.
1. Filter : s’agit d’un ensemble de conditions pour effectuer des transformations sur les
données.
1. Output (sortie) : est configuré pour déterminer la destination de données. Logstash peut envoyer les données à plusieurs destinations (fichiers, Elasticsearch, TCP, ...).
données.
Les figures ci-dessous representent le fichier de configuration pour les messages CCP (Trade Reception) et les confirmations (Cleaning Confirmation).



Pour les demandes d'opération (Operation Request) on a la meme section d'Input mais avec "filter" et "output" différents sauf que par rapport .


* **DataAnalyser** : exploite les fichiers des logs de SGW et génère des rapports de performance (csv,pdf,html). Son fichier propeietes contient les noms des differents types de test, les noms d'index elasticsearch correspondants (similaire à une base de données dans le monde relationnel) et les seuils de performances pour chaque sénario de test.

**Template Engine :**
1. **FreeMarker :**
Apache FreeMarker ™ est un moteur de template: une bibliothèque Java pour générer une sortie texte (pages Web HTML, e-mails, fichiers de configuration, code source, etc.) basée sur des templates et des données modifiables.

* Dependency :
> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
* HTML Template :
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
<link rel="stylesheet" href="test.css">
-->
<html>
<head>
<#include "test.css">
<title>Performance Report</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<img class="logo" src=${fislogo} >
<h1 > SGW Performance</h1>
<h2>${test_type1}</h2>
<p align=center><img class="chart" src=${image1} ></p>
<p>${interpretation1}</p>
....
* Data Model : NewFreeMarker.class
```
Configuration cfg = new Configuration(Configuration.VERSION_2_3_29);
cfg.setDirectoryForTemplateLoading(new File("src\\main\\resources"));
cfg.setDefaultEncoding("UTF-8");
Map<String, Object> root = new HashMap<>();
root.put("fislogo",logoEncoding);
root.put("test_type1",Test_Type1);
....
```
3. **Thymeleaf** est un moteur de modèle Java côté serveur moderne pour les environnements Web et autonomes, capable de traiter HTML, XML, JavaScript, CSS et même du texte brut.
Dans notre, cas nous avons utilisé une template HTML

* Dependency :
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.11.RELEASE</version>
<type>jar</type>
</dependency>
* HTML Template
* Data Model : NewThymeleaf.java
```
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
Context context = new Context();
context.setVariable("fislogo", logoEncoding);
...
```

* **Interface Jenkins :** permet de consulter et executer les pipeline jenkins
* **Interface Kibana :** permet de réaliser des recherches, de visualiser des documents individuels et d'agréger des résultats dans des graphes et des diagrammes.
2 . **la pipeline "RunSGW"**

* **Clean queues** : sert à vider les files d'attentes de Activemq des anciens messages.
* **Clean WorkingData** : Script sh qui sert à supprimer les WorkingData de SGW (WorkingData1,WorkingData2)
* start activemq
* **Start xsimulator** : sert à executer la copie de Xsimulator qui pointe sur le fichier de conf correspond aux messages CCP (Trade reception)
* start xsimulator :
* **Start xsimulator2** : sert à executer la copie de Xsimulator qui pointe sur le fichier de conf correspond aux demandes d'operation
* **Start xsimulator3** : sert à executer la copie de Xsimulator qui pointe sur le fichier de conf correspond aux confirmations
2. **La pipeline "Run_Logstash_TradeReception_ConfirmationAck**


* **Start elasticsearch**
* **Start logstash Trade Reception and Confirmation Notification :** sert à éxecuter logstash avec le fichier de conf responsable à l'extraction de données des messages CCP et des confirmations
3. **La pipeline "Run_Logstash_OpReq"**


* **Start elasticsearch**
* **Start logstash Trade Reception and Confirmation Notification :** sert à éxecuter logstash avec le fichier de conf responsable à l'extraction de données des demandes d'opération
4. **La pipeline "RunDataAnalyser"**


* **Start elasticsearch**
* **Build DataAnalyser :** build DataAnalyser with maven
* **start DataAnalyser :** run jar file
# Rapports de performance :
