Efluid Datagate - Advanced database value management
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
etDEMO
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