com.efluid.oss:efluid-datagate-generator

A generator from Java API


License
Apache-2.0

Documentation

Efluid Datagate - Advanced database value management

Build Status codecov

Outil dédié à l'identification, au packaging et au déploiement de modifications dans une base de données, en s'appuyant sur les principes de git.

Projet mis en place initialement pour la gestion et l'évolution du paramétrage pour une instance de l'application Efluid

Documentation

La documentation générale est disponible ici : accueil doc (WIP)

Build

Build standard

La gestion du build est portĂ©e par maven. Frontend et backend sont gĂ©rĂ©s dans le mĂȘme projet.

Pour packager l'application, lancer :

mvn package

Build auto drone

Un pipeline drone est spécifié à la racine

Version Standalone docker

Une configuration complete "standalone" est intĂ©grĂ©e. Elle intĂšgre dans un seul container l'application (fat-jar) et une instance postgres complĂšte pour le fonctionnement et la gestion. La configuration peut ĂȘtre montĂ©e depuis un volume.

Aucun autre prĂ©-requis que la prĂ©sence de docker sur le poste de build n'est nĂ©cessaire. Le build est traitĂ© par un script, oĂč le build java (maven) est rĂ©alisĂ© directement dans un container. Pour windows toutes les commandes sont donnĂ©es avec Powershell.

Pour builder la version standalone

Pour utiliser le build sur un poste de dev windows, par exemple pour la version avec postgres embarqué :

# ĂȘtre dans le dossier racine du projet
cd efluidDataGate

# lancer le script de build depuis le dossier racine
./efluid-datagate-app/src/docker/build-desktop/standalone-with-postgres/build.ps1

Pour builder une version avec H2 sur un serveur efluid :

# ĂȘtre dans le dossier racine du projet
cd efluidDataGate

# lancer le script de build depuis le dossier racine
./efluid-datagate-app/src/docker/build-serv-efluid/standalone-with-h2/build.sh

L'instance est déployée dans le répo local docker sous le nom efluid-datagate:${PROJECT_VERSION}

Pour démarrer la version standalone server avec les scripts fournis

S'assurer au préalable qu'un dossier est prévu pour stocker les éléments logs et cfg de efluidDataGate, comme /opt/server/efluidDataGate

AprĂšs build, faire :

cp ./efluid-datagate-app/src/docker/start-efluidDataGate.sh /opt/server/efluidDataGate/

Copier éventuellement la configuration désirée dans /opt/server/efluidDataGate/dest/cfg/application.yml et /opt/server/efluidDataGate/src/cfg/application.yml et lancer avec :

# Exemple de création / lancement d'une instance "src" sur le port 8080
sudo /opt/server/efluidDataGate/start-efluidDataGate.sh src 8080

# Exemple de création / lancement d'une instance "dest" sur le port 808&
sudo /opt/server/efluidDataGate/start-efluidDataGate.sh dest 8081

Pour démarrer la version standalone - A LA MAIN

Sous linux / windows, par exemple pour la version avec h2 :

docker run -it --rm -p 8080:8080 efluid-datagate:latest-h2

Pour utiliser un fichier de configuration spécifique, le monter sous "/cfg/application.yml". Par exemple :

Sous linux :

docker run -it --rm -p 8080:8080 -v $pwd/efluid-datagate-app/src/main/resources/config/application.yml:/cfg/application.yml efluid-datagate:latest-h2

Ou sous windows :

docker run -it --rm -p 8080:8080 -v ${pwd}\efluid-datagate-app\src\main\resources\config\application.yml:/cfg/application.yml efluid-datagate:latest-h2

Les BDD sont initialisées, puis l'application démarre. Elle est ensuite accessible sur http://localhost:8080 Elle démarre en mode Wizzard avec en BDD gérée par défault l'instance local PGSQL

Il existe 2 variantes Ă  ce stade pour la version standalone :

  • efluid-datagate:latest-h2 : avec BDD H2 embarquĂ©e
  • efluid-datagate:latest-pgsql : avec BDD Postgres complĂšte embarquĂ©e dans le mĂȘme container

Version struff

La version struff n'est pas Ă  jour. Ne pas l'utiliser pour l'instant

Utilisation en développement

Grandes lignes

Prérequis :

  • JDK11 (openjdk)
  • Maven 3.x
  • IDE (intellij recommandĂ©)

Idéalement docker desktop pour monter des BDD locales facilement

Disponibilité de bases de données de développement

Voir la documentation de paramÚtrage des BBB disponible ici : bases de données

Connexion Ă  l'application avec un utilisateur technique

L'utilisateur technique a été créée pour permettre l'execution des services REST via l'utilisation de CURL sans avoir besoin de se connecter à l'interface de l'application.

À chaque lancement de l'application l'utilisateur technique est rajoutĂ© dans la base de donnĂ©e s'il n'existe pas.

login: technical-user
password: technical-user
email: datagate@efluid.com

Le fichier application-dev.yml contient le token de l'utilisateur technique nĂ©cessaire pour effectuer des requĂȘtes.

datagate-efluid.security.technical-user-token: TOKEN_FROM_CONFIG_FILE

Création de la configuration spécifique du développeur

Créer un fichier application-dev.yml sur la base de cet exemple (ici pour utiliser des instances oracles locales montées sur localhost:49121 avec les PWD par défaut):

datagate-efluid:

    managed-datasource:
        driver-class-name: oracle.jdbc.OracleDriver
        url: jdbc:oracle:thin:@localhost:49121:xe
        username: DEMO
        password: DEMO
        meta:
            filter-schema: DEMO

    display:
        diff-page-size: 10

    security:
        salt: 12345678901234567890123456789012

    details:
        instance-name: REFERENCE-EFLUID-18.4

    model-identifier:
        enabled: true
        class-name: fr.uem.efluid.tools.versions.EfluidDatabaseIdentifier
        show-sql: true

    web-options:
        enable-custom-h2-console: false

## TECH FEATURES CUSTOM
spring:
    profiles:
        active: full

    datasource:
        driver-class-name: oracle.jdbc.OracleDriver
        url: jdbc:oracle:thin:@localhost:49121:xe
        username: MANAGER
        password: MANAGER

    jpa:
        show-sql: true
        hibernate:
            ddl-auto: none

    flyway:
        enabled: false

## WEB SERVER CONFIG
server:
    port: 8085

Les fichiers *.yml sont gitignorés dans le dossier resources/config de l'app. Il est possible d'y gérer sa conf personnelle

Pour cela, utiliser comme paramĂštres :

  • port 49121
  • compte sys / dba
  • RĂŽle SYSDBA

Puis avant de démarrer la création de compte, lancer :

alter session set "_oracle_script"=true;

Enfin, créer les comptes utilisateurs suivants :

  • MANAGER (BDD de management), pwd MANAGER, Tablespace USERS, accorder tous les droits
  • DEMO (utilisĂ© pour avoir une instance DEMO "simulĂ©e" locale), pwd DEMO, Tablespace USERS, accorder tous les droits

Tester les connexions locales avec MANAGER et DEMO

DĂ©marrage depuis un IDE

Pour démarrer depuis un IDE, lancer la classe exécutable fr.uem.efluid.Application

Ajouter les options de démarrage suivantes :

--spring.config.location=classpath:/application.yml,classpath:/config/application-dev.yml

Il peut ĂȘtre nĂ©cessaire d'ajuster les options de JVM en fonction de votre environnement

Aide au développement / maintenance

Utilisation des tests automatisés

Le comportement des fonctions clĂ©s de l'application est validĂ© par diffĂ©rents tests automatisĂ©s, de types tests unitaires et tests d'intĂ©gration. Ces tests sont exĂ©cutĂ©s automatiquement lors du build avec Maven. Ils peuvent ĂȘtre dĂ©marrĂ©s manuellement depuis l'IDE directement Ă©galement

A noter : les tests d'intĂ©grations utilisent une BDD embarquĂ©e H2, droppĂ©e aprĂšs chaque exĂ©cution (et rollbackĂ©e aprĂšs chaque cas de test). Une console web est accessible pour consulter les donnĂ©es de la BDD H2 utilisĂ©e : il suffit d'ajouter un point d'arrĂȘt sur un test dont on souhaite suivre le comportement au niveau BDD, puis d'accĂ©der Ă  la console Ă  l'adresse http://localhost:8082. Dans l'interface de connexion, utiliser les paramĂštres de connexion suivants :

  • url: jdbc:h2:~\h2;
  • username: sa
  • password: -- laisser vide --

RequĂȘtes utiles

Consulter l'index

select 
   idx.id, 
   concat(p.key_name,'=',idx.key_value) as key, 
   p.table_name, 
   p.where_clause as where, 
   idx.action, 
   idx.payload, 
   c.original_user_email as commit_by 
from index idx 
inner join dictionary p on p.uuid = idx.dictionary_entry_uuid 
inner join commit c on c.uuid = idx.commit_uuid
order by table_name, id

Supprimer un commit pour retester un import / merge

Penser à vérifier d'abord les commits présents

select * from commit

Puis il est possible de supprimer le commit et les données associées à partir d'un critÚre sur le "comment" (ici pour un merge) :

delete from index where commit_uuid = (select uuid from commit where comment like '###%');
delete from commit_merge_sources where commit_uuid = (select uuid from commit where comment like '###%');
delete from lobs where commit_uuid = (select uuid from commit where comment like '###%');
delete from commit where uuid = (select uuid from commit where comment like '###%');

License

Apache public License 2.0