Skip to content

Commit

Permalink
Rework
Browse files Browse the repository at this point in the history
  • Loading branch information
florimondmanca committed Oct 9, 2024
1 parent 4503fcc commit beb5958
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 26 deletions.
7 changes: 2 additions & 5 deletions .github/workflows/metabase_export.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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}

##
## ----------------
Expand Down
10 changes: 6 additions & 4 deletions docs/tools/metabase.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
20 changes: 4 additions & 16 deletions tools/metabase-export.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
23 changes: 23 additions & 0 deletions tools/metabase-export.sql
Original file line number Diff line number Diff line change
@@ -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);

0 comments on commit beb5958

Please sign in to comment.