From beb59585876c335d196c8571f78120cd057d9727 Mon Sep 17 00:00:00 2001 From: florimondmanca Date: Wed, 9 Oct 2024 11:42:51 +0200 Subject: [PATCH] Rework --- .github/workflows/metabase_export.yml | 7 ++----- Makefile | 2 +- docs/tools/metabase.md | 10 ++++++---- tools/metabase-export.sh | 20 ++++---------------- tools/metabase-export.sql | 23 +++++++++++++++++++++++ 5 files changed, 36 insertions(+), 26 deletions(-) create mode 100644 tools/metabase-export.sql diff --git a/.github/workflows/metabase_export.yml b/.github/workflows/metabase_export.yml index 9c4638d53..9d277ad6b 100644 --- a/.github/workflows/metabase_export.yml +++ b/.github/workflows/metabase_export.yml @@ -27,13 +27,10 @@ jobs: run: | ssh-keyscan -H ssh.osc-fr1.scalingo.com >> ~/.ssh/known_hosts - - name: Init environment variables - run: | - echo "SRC_DATABASE_URL=${{ secrets.METABASE_EXPORT_SRC_DATABASE_URL }}" >> .env.metabase - echo "DEST_METABASE_DATABASE_URL=${{ secrets.METABASE_EXPORT_DEST_METABASE_DATABASE_URL }}" >> .env.metabase - - name: Run export run: make ci_metabase_export env: METABASE_SRC_APP: ${{ vars.METABASE_EXPORT_SRC_APP }} + METABASE_SRC_DATABASE_URL: ${{ secrets.METABASE_EXPORT_SRC_DATABASE_URL }} METABASE_DEST_APP: ${{ vars.METABASE_EXPORT_DEST_APP }} + METABASE_DEST_DATABASE_URL: ${{ secrets.METABASE_EXPORT_DEST_DATABASE_URL }} diff --git a/Makefile b/Makefile index 49d2fdbd6..afe43c794 100644 --- a/Makefile +++ b/Makefile @@ -265,7 +265,7 @@ ci_metabase_export: ## Export data to Metabase scalingo login --ssh --ssh-identity ~/.ssh/id_rsa ./tools/scalingodbtunnel ${METABASE_SRC_APP} --host-url --port 10000 & ./tools/wait-for-it.sh 127.0.0.1:10000 ./tools/scalingodbtunnel ${METABASE_DEST_APP} --host-url --port 10001 & ./tools/wait-for-it.sh 127.0.0.1:10001 - ./tools/metabase-export.sh + ./tools/metabase-export.sh ${METABASE_SRC_DATABASE_URL} ${METABASE_DEST_DATABASE_URL} ## ## ---------------- diff --git a/docs/tools/metabase.md b/docs/tools/metabase.md index e512f9599..3819fad89 100644 --- a/docs/tools/metabase.md +++ b/docs/tools/metabase.md @@ -12,16 +12,18 @@ Le Metabase de DiaLog est hébergé sur Scalingo sous l'application `dialog-meta Conformément aux recommendations Beta, une base de données dédiée aux données Metabase a été créée afin de la séparer des données de production. Elle est hébergée sur l'application `dialog-metabase` via un add-on PostgreSQL, comme indiqué dans [cette doc](https://doc.incubateur.net/communaute/les-outils-de-la-communaute/autres-services/metabase/metabase#connecter-metabase-a-une-base-de-donnees-anonymisee). -## Lancer l'export +## Lancer l'export depuis GitHub Actions L'export Metabase peut être déclenché via [GitHub Actions](./github_actions.md) à l'aide du workflow [`metabase_export.yml`](../../.github/workflows/metabase_export.yml). -La configuration passe par diverses variables d'environnement listées ci-dessous : +### Configuration + +La configuration de la GitHub Action passe par diverses variables d'environnement listées ci-dessous : | Variable d'environnement | Configuration | Description | |---|---|---| | `METABASE_EXPORT_SRC_APP` | [Variable](https://docs.github.com/fr/actions/learn-github-actions/variables) au sens GitHub Actions | `dialog` (pour la production) | -| `METABASE_EXPORT_DEST_APP` | [Variable](https://docs.github.com/fr/actions/learn-github-actions/variables) au sens GitHub Actions | `dialog-metabase` | | `METABASE_EXPORT_SRC_DATABASE_URL` | [Secret](https://docs.github.com/fr/actions/security-guides/using-secrets-in-github-actions) au sens GitHub Actions | L'URL d'accès à la base de données applicative par la CI (`./tools/scalingodbtunnel dialog --host-url`) | -| `METABASE_EXPORT_DEST_METABASE_DATABASE_URL` | [Secret](https://docs.github.com/fr/actions/security-guides/using-secrets-in-github-actions) au sens GitHub Actions | L'URL d'accès à la base de données Metabase par la CI (`./tools/scalingodbtunnel dialog-metabase --host-url --port 10001`) | +| `METABASE_EXPORT_DEST_APP` | Variable | `dialog-metabase` | +| `METABASE_EXPORT_DEST_DATABASE_URL` | Secret | L'URL d'accès à la base de données Metabase par la CI (`./tools/scalingodbtunnel dialog-metabase --host-url --port 10001`) | | `GH_SCALINGO_SSH_PRIVATE_KEY` | Secret | Clé SSH privée permettant l'accès à Scalingo par la CI | diff --git a/tools/metabase-export.sh b/tools/metabase-export.sh index 8f23fe48d..8e37bba56 100755 --- a/tools/metabase-export.sh +++ b/tools/metabase-export.sh @@ -2,21 +2,9 @@ # Inspiré de : https://doc.incubateur.net/communaute/les-outils-de-la-communaute/autres-services/metabase/metabase#connecter-metabase-a-une-base-de-donnees-anonymisee set -euxo pipefail -source .env.metabase ## Créé dans le workflow GitHub Actions +SRC_DATABASE_URL=$1 +DEST_DATABASE_URL=$2 -# Création des tables (persistera dans la DB source jusqu'à prochaine exécution de ce script) +export PGOPTIONS="-c custom.src_database_url=${SRC_DATABASE_URL}" -psql $SRC_DATABASE_URL -c "DROP TABLE IF EXISTS analytics_user" -psql $SRC_DATABASE_URL -c " -CREATE TABLE analytics_user AS -SELECT - uuid_generate_v4() AS id, - u.registration_date -FROM \"user\" AS u" -psql $SRC_DATABASE_URL -c "ALTER TABLE analytics_user ADD PRIMARY KEY (id)" - -# Création des index - -# Copie vers la DB Metabase - -pg_dump $SRC_DATABASE_URL -O -x -t analytics_user -c | psql "$DEST_METABASE_DATABASE_URL" +psql $DEST_DATABASE_URL -f ./tools/metabase-export.sql diff --git a/tools/metabase-export.sql b/tools/metabase-export.sql new file mode 100644 index 000000000..eab436d2a --- /dev/null +++ b/tools/metabase-export.sql @@ -0,0 +1,23 @@ +-- metabase-export.sql +-- Ce script est conçu pour être exécuté sur la base de données PostgreSQL de l'instance Metabase (destination). +-- Il consiste à extraire des données de la base applicative (source) pour les charger dans des tables Metabase. + +-- CONNEXION À LA DB APPLICATIVE (source) +-- Voir : https://www.postgresql.org/docs/current/contrib-dblink-connect.html +CREATE EXTENSION IF NOT EXISTS dblink; +SELECT dblink_connect('src', current_setting('custom.src_database_url')); + +-- COLLECTE DES DONNÉES D'INDICATEURS + +-- # Suivi des inscriptions des utilisateurs +-- On stocke dans Metabase un snapshot de la liste des dates d'inscription au moment de l'exécution +-- On va donc recréer la table en entier. +DROP TABLE IF EXISTS analytics_user_registration; + +CREATE TABLE analytics_user_registration AS + SELECT + uuid_generate_v4() AS id, + t1.registration_date + FROM dblink('src', 'SELECT registration_date FROM "user"') AS t1(registration_date); + +ALTER TABLE analytics_user_registration ADD PRIMARY KEY (id);