Skip to content

coutcout/bouchon

Repository files navigation

bouchon

Snapshot workflow codecov Maintainability

Quick Start

Récupération de l'image

L'image est disponible sur le hub docker à l'adresse https://hub.docker.com/r/coutcout/bouchon.

Pour récupérer l'image, exécuter la commande suivante: docker pull coutcout/bouchon:TAG

Configuration de l'application

Configurer un endpoint

Création du fichier de définition des endpoints

Un endpoint doit être définit dans un fichier yml qui sera envoyé via le service POST /config/endpoint.

Il est possible de mettre plusieurs endpoint dans un même fichier yaml.

- name: test1
  folderName: folder1
  requestParameterPlace: URL
  urlTemplate: url{numberA}{title}
  fileTemplate: file{numberA}{title}
  parameters:
    - tag: numberA
      type: number
    - tag: title
      type: string

Dans l'exemple ci-dessus, un appel sur l'url .../url234hello devra retourné le contenu du fichier file234hello dans le sous-dossier folder1 du répertoire data.

Le paramètre numberA correspond à 123.

Le paramètre titre correspond à hello.

name
Nom du endpoint
folderName
Nom du sous-dossier (à l'intérieur du dossier data) dans lequel devront être stockées toutes les réponses
requestParameterPlace
Emplacement des paramètres de la requête.
Deux choix possibles:
  • URL: Les paramètres sont à récupérer dans l'URL de la requêtes
  • Indisonible pour le moment - BODY: Les paramètres sont à récupérer dans le body de la requêtes
urlTemplate
Template de l'URL qui devra être bouchonnée.
Les paramètres du bouchon doivent être de la forme {nom_param} et doivent exister dans le template du nom du fichier
fileTemplate
Template du nom du fichier qui devra être retourné à l'appel de l'URL bouchonnée.
Les paramètres du bouchon doivent être de la forme {nom_param} et doivent exister dans le template du nom du fichier
parameters
Liste des paramètres qui sont utilisé dans les templates avec leur type.
Le type doit correspondre à un type de regex.
Upload du fichier de définition des endpoints

Une fois le fichier fini, l'uploader via le service POST /config/endpoint.

Rechargement des endpoints

Une fois l'upload terminé, recharger les endpoints de l'application en appelant le service POST /config/endpoint/reload.

Le bouchon est prêt à être utilisé.

Dossier de stockage des fichiers de données

Lorsqu'un endpoint est appelé, l'application renvoie le contenu du fichier associé au endpoint.

Les fichiers doivent être stockés dans le répertoire data.

Actuellement, les fichiers data doivent être forcément déposés à la main dans le container.

Il est possible de le faire via un mapping de dossiers.

Services

Upload d'un fichier de définition de endpoint POST /config/endpoint

Service permettant d'uploader un ou plusieurs fichiers de définition de endpoints.

Paramètres dans le body de la requête:

Nom du paramètre Description du paramètre
files Champs de type file, accepte plusieurs fichier yaml/yml
name Nom du fichier de définition tel qu'il sera stocké sur le serveur.
Le nom du fichier sera préfixé de la date du jour au format yyyyMMdd.
Lorsque plusieurs fichiers sont envoyés, les noms seront incrémentés.Example:
  • test
  • test_001
  • test_002
  • ...
Suppression d'un fichier de définition de endpoint DELETE /config/endpoint/{NOM_FICHIER_DEFINITION}

Service permettant de supprimer un fichier de définition de endpoints.

Paramètres dans l'URL de la requête:

Nom du paramètre Description du paramètre
NOM_FICHIER_DEFINITION Nom du fichier donné via le service d'upload
Lister les fichiers de définition de endpoint GET /config/endpoint

Service permettant de lister l'ensemble des fichiers de définition de endpoints

Recharger les endpoints POST /config/endpoint/reload

Service permettant de recharger l'ensemble des endpoints disponibles à la suite d'un ajout/retrait/activation/désactivation de fichier de définition de endpoints.

Activer un fichier de définition de endpoint PUT /config/endpoint/{NOM_FICHIER_DEFINITION}/activate

Service permettant d'activer un fichier de définition de endpoints.

Paramètres dans l'URL de la requête:

Nom du paramètre Description du paramètre
NOM_FICHIER_DEFINITION Nom du fichier donné via le service d'upload.
Dans le cadre de d'un fichier désactivé, sur le serveur, il est suffixé d'un .deactivated. Pour autant, il est nécessaire de passer uniquement le nom du fichier sans extension à ce service.
Désactiver un fichier de définition de endpoint PUT /config/endpoint/{NOM_FICHIER_DEFINITION}/deactivate

Service permettant de désactiver un fichier de définition de endpoints.

Afin de le désactiver, un fichier est suffixé de l'extention .deactivated.

Paramètres dans l'URL de la requête:

Nom du paramètre Description du paramètre
NOM_FICHIER_DEFINITION Nom du fichier donné via le service d'upload.

Liste des fichiers de configurations

Les fichiers de configuration de l'application sont stockés dans le répertoire /home/config

application.yml Fichier de configuration racine, il permet de:
  • Importer les autres fichiers de configuration
  • Définir le port d'exposition (par défaut:8080)

Disponible ici

application-bouchon.yml

Profil spring: bouchon

Ce fichier détermine deux propriétés:

  • bouchon.folder.data

    Dossier dans lequel les fichiers renvoyés par le bouchon doivent être stockés.

    Chaque endpoint dispose de son sous-dossier défini dans le fichier de configuration du endpoint.

    Valeur par défaut: /mnt/data

  • bouchon.folder.config

    Dossier dans lequel les fichiers de configuration des endpoints seront stockés

    Les fichiers de configuration peuvent être uploader soit par mapping de dossier entre le container et la machine host, soit par le service POST /config/endpoint.

    Valeur par défaut: /home/bouchon/config

Disponible ici

application-custom-regex.yml

Profil spring: custom-regex

Ce fichier décrit des potentielles regex personnalisées sous la propriété bouchon.regex.

Chaque regex devra être définie de la manière suivante: nom_regex: regex

exemple

bouchon.regex: regex1: "\d{2}"

Par défaut, des regex existent déjà:

  • Dans l'application:
Nom de la regex Regex
string \w+
number \d+
boolean true|false
  • Dans le fichier application-custom-regex.yml
Nom de la regex Regex
date-yyyymmdd \d{8}
date-yyyy-mm-dd \d{4}-\d{2}-\d{2}

Pour rajouter des regex, il est donc nécessaire de remplacer le fichier application-custom-regex.yml.

Disponible ici

application-log.yml

Profil spring: log

Ce fichier détermine les loggers utilisés ainsi que leur level pour les logs applicatifs

Par défaut, les logs sont stockés dans le répertoire /mnt/logs.

Disponible ici

application-messages.yml

Profil spring: messages

Ce fichier détermine l'ensemble des messages de log.

Dans un but internationalisation de l'application, il faudrait remplacer ce fichier par celui de la langue voulue.

Disponible ici

Développement

Lancement de l'application

Les fichiers de configuration étant séparés de l'application, il est nécessaire de spécifier leur emplacement à l'aide de l'option jvm suivante:

--spring.config.location=<PATH_TO_APPLICATION_YAML>

TODO

Cliquez pour voir

1.0.0

  • Initialisation des endpoints

    • Création des répertoires s'ils n'existent pas
    • Création du mécanisme de regex paramétrable
    • Création d'une liste de paramètres commun à l'url et au fichier
      • Vérification de la validité de l'URL
      • Vérification de la validité du template de fichier
      • Comparaison des paramètres de l'URL et du Fichier
    • Création de la regex de l'url à partir du template de l'url
  • Appel d'un endpoint (GET)

    • Parsing de l'url à partir de la regex pour récupérer les paramètres
    • Génération du nom du fichier recherché
    • Récupération du fichier
    • Renvoi du fichier
  • Gestions des appels en POST avec paramètres dans le body en JSON

  • Chargement d'endpoints à partir de fichiers yaml dans un dossier

    • Paramétrage du dossier
    • Lecture du dossier
    • Chargement d'un fichier
    • Vérification du fichier
    • Parsing des endpoints
    • Chargement des endpoints
    • Chargement des fichiers au démarrage
  • Création d'un service de manipulation des fichiers d'endpoints

    • Service qui liste les fichiers disponibles
    • Service qui supprime un fichier
    • Service qui envoie un fichier
      • Possibilité d'envoyer plusieurs fichiers
      • Lecture du fichier
    • Service qui recharge les endpoints à partir du dossier de configuration
    • Service qui désactive un fichier de endpoint
  • Retrait de la création des endpoints via le fichier de propriétés

  • Dockerisation de l'application

    • Création du dockerfile
    • Publication de l'image

1.0.1

  • Création des TUs

1.2.0

  • Implémation d'un CI/CD

1.3.0

  • Service de dépot d'un fichier de données
    • Déposer un fichier dans le dossier du endpoint
    • Ecrasement du fichier si déjà existant
    • Création de la regex du nom de fichier à partir du template du fichier
    • Vérifier le nom du fichier avec la regex
    • Gestion des erreurs

1.4.0

  • Service de suppression d'un fichier de données
    • Suppression du fichier dans le bon endpoint
    • Gestion des erreur