ETL Jusqu'à la version 2023.01

Attention

À partir de la version 2023.1, l'ETL est remplacé par le module Workers.

L'ETL du module Dashboard est responsable de l'extraction, de la transformation et du chargement des données dans la base dashboard dédiée au module.

Il est disponible sous forme d'une archive à installer sur un serveur, dédié ou non.

Prérequis

Logiciels

  • php >= 8.1

l'ETL est une application Symfony et nécessite donc l'interpréteur PHP

  • sqlite >= 3.34

l'ETL utilise une base de données sqlite pour gérer sa file de messages

  • libpq-dev >= 13.10 et le driver pdo_pgsql

l'ETL doit pouvoir communiquer avec la base de données PostgreSQL dédiée au module

Télécharger et décompresser l'archive

Informations

  • Cette étape doit être faite dans un projet AP4 initialisé.
  • Si vous n'avez pas de projet AP4 initialisé, vous pouvez demander à votre intégrateur.

Installer le paquet @anakeen/dashboard-etl à l'aide de la commande :

npx @anakeen/anakeen-platform install --flavour custom --cwd .

Décompressez l'archive qui nous intéresse node_modules/@anakeen/dashboard-etl/dashboard-etl-x.x.x.zip dans le répertoire voulu. Par la suite, nous ferons référence à ce répertoire à l'aide de la variable ETL_HOME.

Configuration de l'ETL

Configurer les variables d'environnement

Il faut renseigner dans .env.local les variables suivantes :

Obligatoires :

Variable Description Exemple
AP4_DOMAIN URL du serveur AP4 http://127.0.0.1:8080
AP4_TOKEN Jeton d'accès HTTP fourni par AP4 -
PSQL_HOST Nom d'hôte du serveur de base de données 127.0.0.1
PSQL_PORT Port du serveur de base de données 5432
PSQL_DB Nom de la base de données dédiée dashboard
PSQL_USER Nom d'utilisateur de la base de données anakeen
PSQL_PASSWORD Mot de passe de la base de données password

Informations

Le jeton d'accès doit être obtenu auprès d'AP4 :

./ank.php --script=generateETLToken

Optionnelles :

Variable Défaut Description
DELAY_BETWEEN_SYNC 60 Délai (en secondes) entre deux synchronisations avec AP4
MAX_DELAY_RETRY_UPDATE 3600 Délai maximum (en secondes) entre deux mises à jour échouées d'un élément, ce délai augmente avec le nombre d'essais sans pour autant dépasser MAX_DELAY_RETRY_UPDATE ($delay = 2 ** $retries)

La configuration peut être analysée à tout moment :

php bin/console etl:status

Informations

Cette commande vérifie la définition des variables et contrôle les connexions à AP4 ainsi qu'à la base de données.

Activer la synchronisation avec AP4

Pour activer la synchronisation avec AP4 :

php bin/console etl:entity:generate
php bin/console etl:schema:init
php bin/console etl:sync:start

La liste des commandes de l'ETL est disponible ici.

Lancement des services

L'ETL peut être lancé sous forme de service Supervisor ou sous forme de service systemd. Ces derniers vont superviser deux types de workers :

  • un worker récupèrant à temps régulier la liste des Smart Elements modifiés ou insérés depuis la dernière synchronisation
  • x workers évaluant les métriques pour chacun de ces Smart Elements et insèrant le résultat dans la base de données

Lancement par supervisor

Enregistrement pour lancement par supervisor

  1. Copier le fichier de configuration supervisor-etl.conf dans le répertoire de configuration de Supervisor :

    • Sur Debian/Ubuntu :
    # cp $ETL_HOME/utils/supervisor-etl.conf /etc/supervisor/conf.d/supervisor-etl.conf
    
    • Sur RedHat/CentOS :
    # cp $ETL_HOME/utils/supervisor-etl.conf /etc/supervisor.d/supervisor-etl.ini
    
  2. Mettre à jour si nécessaire le chemin des directives command:

command=php $ETL_HOME/dashboard-etl/bin/console ...

(configuré par défaut pour ETL_HOME="")

  1. Ajouter si nécessaire la directive user pour référencer l'utilisateur système sous lequel seront exécutés les services.

  2. Ajuster si nécessaire le nombre de workers dédiés à la mise à jour des éléments :

[program:etl-update]
...
numprocs=x

x est le nombre de workers qui seront déployés pour traiter les messages de demande de mise à jour

  1. Activer les services :
supervisorctl reread
supervisorctl update

Démarrage/Arrêt des services de l'ETL

  • Démarrer tous les services :
supervisorctl start etl-update:\* etl-sync:\*
  • Arrêter tous les services :
supervisorctl stop etl-update:\* etl-sync:\*
  • Redémarrer tous les services :
supervisorctl restart etl-update:\* etl-sync:\*
  • Voir le statut des services :
supervisorctl status etl-update:\* etl-sync:\*

Lancement par systemd

Enregistrement pour lancement par systemd

  1. Copier les fichiers de description des services de l'ETL :
cp $ETL_HOME/dashboard-etl/utils/etl-sync.service       /usr/lib/systemd/system/
cp $ETL_HOME/dashboard-etl/utils/etl-update@.service    /usr/lib/systemd/system/
  1. Mettre à jour si nécessaire le chemin des directives ExecStart:
ExecStart=php $ETL_HOME/dashboard-etl/bin/console ...

(configuré par défaut pour ETL_HOME="")

  1. Ajouter si nécessaire la directive User pour référencer l'utilisateur système sous lequel seront exécutés les services.

  2. Activer les services :

# worker de synchronisation
systemctl enable etl-sync.service
# worker(s) de mise à jour
systemctl enable etl-update@{1..x}.service

x est le nombre de workers qui seront déployés pour traiter les messages de demande de mise à jour

Démarrage/Arrêt des services de l'ETL

  • Démarrer tous les services :
systemctl start etl-sync.service etl-update@{1..x}.service
  • Arrêter tous les services :
systemctl stop etl-sync.service etl-update@{1..x}.service
  • Redémarrer tous les services :
systemctl restart etl-sync.service etl-update@{1..x}.service
  • Voir le statut des services :
systemctl status etl-sync etl-update@{1..x}.service