Last modified by Aurelie Bertrand on 2026/08/24 14:25

Show last authors
1 (% class="box infomessage" %)
2 (((
3 🙋 Ce tutoriel est à destination des **utilisateurs administrateurs de DigDash BI**.
4
5 ⏱ Il est prévu pour être suivi de manière autonome en **2 heures**.
6 )))
7
8 ----
9
10 {{toc/}}
11
12 ----
13
14 = Introduction =
15
16 Dans ce tutoriel, nous allons configurer une architecture complète (back-end et front-end) pour utiliser des flux (graphiques) DigDash en embarqué via la librairie Javascript.
17
18 Pour cela, nous allons mettre en œuvre un back-end léger en Python FastAPI. Ce composant permet de générer des jetons d'impersonnalisation (newAuthTokenAs) à l'aide d'une clé d'API, tout en masquant cette clé critique aux yeux des utilisateurs finaux (front-end). Il sera ensuite nécessaire de modifier notre reverse proxy. Puis, pour finir, nous allons créer une page HTML avec du Javascript pour faire appel à cette API.
19
20 = Architecture de la Solution =
21
22 Pour des raisons de sécurité, la clé d'API DigDash ne doit jamais transiter sur le navigateur du client. Le flux d'authentification s'organise donc ainsi :
23
24 * Le **Front-end **(Javascript) appelle une route sécurisée sur le serveur web (///generate-user-token//).
25 * **Nginx** relaie cette requête en local vers le serveur **FastAPI**.
26 * **FastAPI **interroge directement **DigDash **en injectant la clé d'API et les en-têtes requis, puis extrait le jeton.
27 * Le jeton est renvoyé à notre **Front-end** qui va pouvoir le consommer pour s’authentifier et afficher les flux (graphiques).
28
29 = Pré-requis =
30
31 Pour ce tutoriel et afin de pouvoir utiliser la méthode newAuthTokenAs il est nécessaire d’activer l’emprunt d’identité. Pour cela, nous vous invitons à suivre le paragraphe [[Avancé : Emprunt d’identité>>doc:Digdash.webIntegration.anonymisation_url.WebHome||anchor="emprunt"]] sur la page [[Anonymisation des Urls>>doc:Digdash.webIntegration.anonymisation_url.WebHome]].
32
33 Dans cet exemple d’implémentation, nous utilisons une clé d’API pour l’authentification de l’administrateur au prêt de DigDash. Il est donc nécessaire de créer une clé que l’on utilisera dans notre API back-end. Pour cela, nous vous invitons à suivre la procédure [[Créer une clé d'API>>doc:Digdash.API.DD_API.WebHome||anchor="API"]].
34
35 = Étape 1 : Configurer le Back-end =
36
37 (% class="box infomessage" %)
38 (((
39 **ℹ **Cette section décrit l'installation du serveur d'API sur une machine Ubuntu hébergeant déjà DigDash Enterprise.
40 )))
41
42 == Installation des pré-requis système ==
43
44 Connectez-vous à votre serveur en SSH et exécutez les commandes suivantes pour installer Python 3 et le gestionnaire d'environnement virtuel. Python sera la technologie socle pour notre back-end.
45
46 {{code language="shell"}}
47 # Mise à jour des dépôts système
48 sudo apt update
49
50 # Installation de Python 3, pip et le module venv
51 sudo apt install -y python3 python3-venv python3-pip
52 {{/code}}
53
54 == Initialisation de l'environnement applicatif ==
55
56 Créez et placez-vous dans le répertoire de votre choix (par exemple,// /var/www/embedded///) pour initialiser l'application :
57
58 {{code language="shell"}}
59 # Créer les dossiers de l'application à la racine
60 mkdir -p /var/www/embedded/
61
62 # Accéder au dossier
63 cd /var/www/embedded/
64
65 # Création de l'environnement virtuel Python
66 python3 -m venv venv
67
68 # Activation de l'environnement virtuel
69 source venv/bin/activate
70
71 # Installation des dépendances requises
72 pip install fastapi uvicorn httpx
73 {{/code}}
74
75 == Écriture du code source (main.py) ==
76
77 1. Créez un fichier nommé main.py dans le répertoire précédemment initialisé(((
78 {{code language="shell"}}
79 sudo vi main.py
80 {{/code}}
81 )))
82 1. Puis ajoutez-y le code suivant :(((
83 (% class="box warningmessage" %)
84 (((
85 ⚠ Modifiez la variable **//API_KEY //**et //**l'en-tête "DIGDASH_DOMAIN"**// avec vos propres paramètres.
86 )))
87
88 {{code language="python"}}
89 from fastapi import FastAPI, HTTPException
90 import httpx
91
92 app = FastAPI(title="DigDash Token API")
93
94 # Configuration locale : FastAPI communique directement avec Tomcat sur le port 8080
95 DIGDASH_LOCAL_URL = "http://127.0.0.1:8080"
96
97 # CONFIGURATION A COMPLETER
98 API_KEY = "<VOTRE_CLE_API_DIGDASH>"
99 DIGDASH_DOMAIN = "<VOTRE_DOMAINE_PUBLIC_EX_client.digdash.com>"
100
101 @app.get("/generate-user-token")
102 async def generate_user_token(target_user: str):
103 """
104 Génère un jeton d'authentification pour un utilisateur cible (newAuthTokenAs).
105 """
106 # Construction explicite de l'URL pour DigDash
107 url = f"{DIGDASH_LOCAL_URL}/ddenterpriseapi/DDEnterpriseServlet?method=newAuthTokenAs&userId={target_user}"
108
109 # En-têtes requis pour identifier l'environnement DigDash et communiquer l'API Key
110 headers = {
111 "X-API-KEY": API_KEY,
112 "Accept": "application/json",
113 "Host": DIGDASH_DOMAIN
114 }
115
116 async with httpx.AsyncClient() as client:
117 try:
118 response = await client.get(url, headers=headers)
119
120 # Si Tomcat renvoie une erreur (401, 404, 500, etc.)
121 if response.status_code != 200:
122 raise HTTPException(
123 status_code=response.status_code,
124 detail=f"Erreur DigDash Backend: {response.text}"
125 )
126
127 # La servlet renvoie le token que l'on transfert au front-end
128 raw_token = response.text
129 return {"token": raw_token}
130
131 except httpx.RequestError as exc:
132 raise HTTPException(
133 status_code=500,
134 detail=f"Erreur de communication interne avec Tomcat: {str(exc)}"
135 )
136
137 if __name__ == "__main__":
138 import uvicorn
139 # Lancement du serveur en local sur le port 8000
140 uvicorn.run(app, host="127.0.0.1", port=8000)
141 {{/code}}
142
143 (% class="box infomessage" %)
144 (((
145 💡 Pour une industrialisation, il est recommandé d’utiliser des fichiers “.env” pour ne pas avoir la clé codée directement dans le fichier python.
146 La mise en place de logs est également fortement recommandée pour tracer les usages de l’API et débugger.
147 )))
148 )))
149
150 == Démarrage du service ==
151
152 Pour tester le fonctionnement, vous pouvez lancer le processus via **uvicorn**. Cela va monopoliser votre terminal, il sera nécessaire d’en ouvrir un nouveau pour les prochaines étapes.
153
154 {{code language="shell"}}
155 # Lancement de l'application (assurez-vous que le venv est actif)
156 uvicorn main:app --host 127.0.0.1 --port 8000 --reload
157 {{/code}}
158
159 (% style="line-height:1.2; text-indent:0.15354330708661657pt; text-align:justify" %)
160 Si cette commande se déroule bien, vous devriez voir apparaître le message suivant :
161
162 (% style="line-height:1.2; text-align:justify; margin-top:16px" %)
163 (% style="color:#188038; font-family:~"Roboto Mono~",monospace; font-size:9pt; font-style:italic; font-variant:normal; font-weight:400; text-decoration:none; white-space:pre-wrap" %)//INFO: Application startup complete.//
164
165 (% class="box infomessage" %)
166 (((
167 💡 Pour une mise en production pérenne, il est recommandé de packager cette commande et de créer un service lancé au démarrage de votre serveur.
168 )))
169
170 == Test de fonctionnement ==
171
172 Afin de valider le fonctionnement de notre back-end, il est possible de réaliser un curl en local sur notre serveur DigDash.
173
174 (% class="box warningmessage" %)
175 (((
176 ⚠ Modifiez la variable**// target_user//** avec votre propre utilisateur de test.
177 )))
178
179 (((
180 {{code}}
181 curl -X GET "http://127.0.0.1:8000/generate-user-token?target_user=username" -H "accept: application/json"
182 {{/code}}
183
184 Si vous obtenez un message //**“Connection refused**”//, cela signifie que votre back-end ne répond pas et qu'une une étape précédente n’a pas fonctionné correctement.
185 Si vous obtenez n’importe quelle autre réponse ressemblant à **//{“token”:”xxx”}//**, alors DigDash a bien apporté une réponse et vous pouvez passer aux étapes suivantes.
186 )))
187
188 = Étape 2 : Configuration du Front-end =
189
190 Pour notre architecture côté client, nous allons créer un fichier index.html dans notre répertoire ///var/www/embedded///. L’appel à l'API se fait de manière transparente via l’utilisation de// fetch//.
191
192 1. Créez un fichier **index.html.**(((
193 {{code language="shell"}}
194 sudo vi index.html
195 {{/code}}
196 )))
197 1. (((
198 Puis ajoutez-y le code HTML/CSS/JavaScript suivant :
199
200 (((
201 (% class="box warningmessage" %)
202 (((
203 ⚠ Modifiez la variable **//myUser//** et les identifiants de flux (ici //**c74b5ca3**// et **//ee54be60//**) avec vos propres paramètres.
204 )))
205 )))
206
207 (((
208 {{code language="html"}}
209 <!DOCTYPE html>
210 <html lang="fr">
211 <head>
212 <meta charset="UTF-8">
213 <title>Dashboard Embarqué</title>
214 <script src="/digdash_dashboard/digdash.dashboard.js"></script>
215 <style>
216 .dashboard-container { display: flex; flex-wrap: wrap; gap: 20px; padding: 20px; }
217 .chart-box { border: 1px solid #ccc; width: 45%; height: 400px; background: #f9f9f9; }
218 </style>
219 </head>
220 <body>
221 <div class="dashboard-container">
222 <div id="chart-1" class="chart-box"></div>
223 <div id="chart-2" class="chart-box"></div>
224 </div>
225
226 <script>
227 // Fonction d'initialisation de DigDash
228 async function init() {
229 const myUser = 'Utilisateur1';
230 const response = await fetch('/generate-user-token?target_user='+myUser, {
231 method: 'GET'
232 });
233
234 if (!response.ok) throw new Error("Erreur lors de la récupération du token");
235
236 const data = await response.json();
237 const authToken = data.token;
238 console.log("Token récupéré avec succès :", authToken);
239
240 console.log("Parent: Initialisation de DigDash...");
241 DigDash.init({
242 "url": "/digdash_dashboard", // Utilisation du chemin relatif via Nginx
243 "user": myUser,
244 "authToken": authToken
245 });
246 }
247
248 function renderChildChart(containerId, flowId) {
249 console.log(`Enfant [${containerId}]: Attente de l'initialisation...`);
250 // Fonction permettant d'attendre l'initialisation de DigDash
251 function waitForInit(callback) {
252 if (DigDash.parameters && DigDash.parameters.size > 0) {
253 callback();
254 } else {
255 setTimeout(() => waitForInit(callback), 100);
256 }
257 }
258
259 waitForInit(() => {
260 console.log(`Enfant [${containerId}]: Dessin du flux ${flowId}`);
261 DigDash.drawPortlet(containerId, {
262 "type": "flow",
263 "flowId": flowId
264 })
265 });
266 }
267
268 init();
269
270 renderChildChart("chart-1", "c74b5ca3");
271 renderChildChart("chart-2", "ee54be60");
272 </script>
273 </body>
274 </html>
275 {{/code}}
276 )))
277 )))
278
279 (% class="box infomessage" %)
280 (((
281 💡 À partir du moment où la connexion à DigDash a été établie, il est possible d’utiliser les fonctions présentes dans DDCtrl.
282 )))
283
284 = Étape 3 : Configuration Nginx =
285
286 (% class="box infomessage" %)
287 (((
288 **ℹ** Dans cette section, nous décrivons la procédure d’ouverture de notre API pour un serveur Nginx déjà installé en suivant la documentation d’installation DigDash.
289 )))
290
291 Pour rendre cette API et ce site accessible depuis l'extérieur sans ouvrir de port supplémentaire sur votre pare-feu, vous devez ajouter deux règles de routage dans votre fichier de configuration Nginx existant.
292
293 1. Ouvrez votre fichier de configuration Nginx (généralement ///etc/nginx/sites-available/001-digdash.com.conf//) : (((
294 {{code language="shell"}}
295 sudo vi /etc/nginx/sites-available/001-digdash.com.conf
296 {{/code}}
297 )))
298 1. Localisez le bloc **server** qui écoute sur le port **443 ssl**.
299 1. Insérez les deux directives **location** suivante à l'intérieur de ce bloc et à la suite des autres location :(((
300 {{code language="shell"}}
301 # Routage vers le proxy d'authentification FastAPI
302 location /generate-user-token {
303 proxy_pass http://127.0.0.1:8000;
304 include proxy_params;
305
306 # Désactivation impérative de l'interception des erreurs Nginx
307 # pour laisser FastAPI transmettre ses messages d'erreur propres au client
308 proxy_intercept_errors off;
309 }
310
311 # Routage vers notre index.html
312 location /embedded/ {
313 alias /var/www/embedded/;
314 index index.html;
315 try_files $uri $uri/ =404;
316 }
317 {{/code}}
318 )))
319 1. Testez la syntaxe de la configuration et rechargez Nginx : (((
320 {{code language="shell"}}
321 # Vérification de la configuration Nginx
322 sudo nginx -t
323
324 # Si le test est positif, rechargement à chaud de la configuration
325 sudo systemctl reload nginx
326 {{/code}}
327 )))
328
329 = Étape 4 : Test de fonctionnement =
330
331 Pour finir ce tutoriel, vous pouvez tester l'accès à votre page web via l’url suivante :
332
333 [[https:~~/~~/VOTRE_DOMAINE.digdash.com/embedded/index.html>>https://VOTRE_DOMAINE.digdash.com/embedded/index.html]]
334
335 La page affichée doit contenir deux flux (graphiques) côte à côte, par exemple :
336
337 [[image:Flow_embed_result_fr.png||alt="Flux embarqués"]]
338
339
340 (% class="box infomessage" %)
341 (((
342 **ℹ** Dans la console du navigateur, quelques logs apparaissent pour aider au développement et au débug. Pour un usage en production, la suppression de ces éléments est recommandée.
343 )))
344
345 = Félicitations ! =
346
347 Vous avez réussi à mettre en place vos premiers graphiques DigDash en mode embarqué.
348 Il ne vous reste plus qu’à appliquer ce principe aux graphiques que vous souhaitez intégrer à vos pages web !
349
350