Utiliser WarpView pour se construire son dashboard
Utiliser Discovery pour un dashboard as code
Nous utiliserons ici Discovery. Un dashboard as code a de multiples intérêts :
versionner son dashboard
le rendre dynamique en fonction de certains paramètres
afficher certaines info quand on dépasse un seuil par exemple
passer un graphique en rouge en fonction d’un KPI
…
le réutiliser simplement pour d’autres usages
le modulariser
Mode d’emploi
Discovery est très simple à prendre en main. Il s’agit de passer une structure de donnée (que je vais détailler) en WarpScript entre 2 balises HTML.
<html>
<head> <title>Raspi-1 dashboard</title> </head>
<body> <discovery-dashboardurl="https://your warp 10/api/v0/exec"> // Le WarpScript va ici </discovery-dashboard> <!-- Les imports --> <scriptnomodulesrc="https://unpkg.com/@senx/discovery-widgets/dist/discovery/discovery.js"></script> <scripttype="module"src="https://unpkg.com/@senx/discovery-widgets/dist/discovery/discovery.esm.js"></script>
</body>
</html>
Le WarpScript doit produire la structure suivante :
// dashboard
title : Titre du dashboard (optionnel)
description : Description du dashboard (optionnel)
options : les options communes pour le dashboard (ce sont les mêmes que pour WarpView et ici aussi) (optionnel)
autoRefresh : période en seconde entre 2 refresh des données, -1 pour désactiver (par défaut) (optionnel)
tiles : Liste des “tuiles” à afficher
// tuile
title : Titre de la tuile (optionnel)
x, y : position x et y sur la grille (commencent à 0 et la grille fait 12 cases de large)
w, h : hauteur et largeur en nombre de cases sur la grille (la largeur max est de 12)
type : type de graphique (‘line’, ‘area’, ‘scatter’, ‘spline-area’, ‘spline’, ‘step’, ‘step-after’, ‘step-before’, ‘annotation’, ‘bar’, ‘display’, ‘image’, ‘map’, ‘gauge’, ‘circle’, ‘pie’, ‘plot’, ‘doughnut’, ‘rose’, ‘tabular’, ‘button’)
unit : unité à afficher (optionnel)
options : les options communes pour le dashboard (ce sont les mêmes que pour WarpView et ici aussi) (optionnel)
autoRefresh : période en seconde entre 2 refresh des données, -1 pour désactiver (par défaut) (optionnel et ne concerne que ‘macro’)
data / macro
data : le code sera exécuté au moment de l’exécution de la structure du dashboard
macro : le code sera exécuté par la tuile une fois affichée
Bon, un exemple sera plus parlant :
{ 'title''Test' 'options' { 'autoRefresh'10 } // l'ensemble du dashboard se rafraîchira toutes les 10 secondes 'tiles' [ { 'title''Utilisation de "macro"' 'x'0'y'0'w'6'h'1 'options' { 'autoRefresh'2 } // cette tuile se rafraîchira toutes les 2 secondes 'type''display' 'macro' <% // C'est une macro WarpScript RAND 100.0 * ROUND %> } { 'title''Utilisation de "data"' 'x'6'y'0'w'6'h'1 'type''display' 'data' RAND 100.0 * ROUND } ] }
regardez, ça bouge oO
Notre dashboard
En utilisant ‘data’ on peut calculer au moment de la génération (ou du refresh) du dashboard, avec ‘macro’ c’est en ajax depuis la tuile.
Bon, cool, passons à nos métriques réalisés la dernière fois. On va utiliser ‘data’ car, ça nous permet d’utiliser des variables (genre, le token ou le host name) et on va rafraîchir le dashboard périodiquement.
Commençons par les variables :
// Variables 'your read token''token' STORE '2592000000000''duration' STORE // 1 mois 'rasp1-1''hname' STORE
Puis le dashboad (sans les tuiles) :
{ 'title''Raspi-1' 'options' { 'autoRefresh'30 } // auto refresh de 30 secondes 'tiles' [ // On va ajouter les tuiles là ! ] }
Tuile d’affichage de l’espace disque :
{ 'title''Disks' 'x'0'y'0'w'3'h'1'type''gauge''unit''Gb' 'data' [ $token '~linux.df.bytes.(capacityfree)' { 'hname' $hname 'device''~/dev/.*' } NOW -1 ] FETCH 'gts' STORE [ $gts bucketizer.last NOW 01 ] BUCKETIZE [ 'device''mountpoint' ] PARTITION 'gts' STORE [] 'data' STORE [] 'params' STORE $gts KEYLIST <% 'k' STORE { $gts $k GET <% 'g' STORE $g NAME 'linux.df.bytes.''' REPLACE $g VALUES REVERSE 0 GET %> FOREACH } 'vals' STORE $data { 'key' $k 'device' GET ' (' + $k 'mountpoint' GET + ')' + 'value' $vals 'capacity' GET $vals 'free' GET - 1024 / 1024 / 1024.0 / 100 * ROUND 100.0 / } +! DROP $params { 'maxValue' $vals 'capacity' GET 1024 / 1024 / 1024 / } +! DROP %> ASREGS FOREACH { 'data' $data 'params' $params } }