Suite à mon précédent article d’introduction à SquaredUp, il est maintenant temps de s’intéresser à quelques-uns des problèmes rencontrés lors de la construction de quelques dashboards ; en particulier ici lors de l’utilisation de tuiles de type « Matrix ».
Les tuiles « Matrix » sont très intéressantes car elles permettent d’afficher plusieurs informations sous différents formats (état de l’objet, état d’un moniteur, sparkline de performance, SLA propriété de l’objet…) sur une même ligne :
Certaines subtilités ne sont cependant pas documentées, et on peut rapidement se casser les dents sur une opération qui semblait pourtant simple au premier abord.
Propriété de l’objet
Il est possible d’afficher une colonne contenant simplement une propriété de l’objet au format texte. Dans la capture ci-dessus, on affiche par exemple la propriété DomainDnsName de la classe Microsoft.Windows.Computer.
La syntaxe est très simple (exemple fourni dans la documentation de SquaredUp) :
{
"title": "Domain DNS",
"_type": "celltile/text",
"config": {
"display": {
"contentTemplate": "{{properties.domainDnsName}}"
}
}
}
Ce que n’indique pas clairement la documentation, c’est l’obligation de respecter strictement la casse du nom de la propriété… à l’exception de son premier caractère, qui doit toujours être écrit en minuscule.
L’exemple le montre bien, mais sans explication écrite c’est loin d‘être évident !
Valeur calculée
SquaredUp utilise la syntaxe Mustache et supporte donc presque toutes les fonctions de transformation issues de Javascript.
Il est donc en théorie possible de ne garder que deux décimales après la virgule lors de l’affichage d’un compteur de performance avec la fonction ToFixed :
"labelTemplate": "{{ (value).ToFixed(2) }}"
Malheureusement, cela résulte en une colonne vide.
Et la raison est identique au point précédent : il est impératif d’utiliser la casse exacte de la syntaxe Javascript… sauf le premier caractère qui doit obligatoirement être en minuscule.
La syntaxte suivante fonctionne donc :
"labelTemplate": "{{ (value).toFixed(2) }}"
Simple à corriger… mais rageant lorsque l’on bute sur le problème !
Valeur d’un objet hébergée dans une colonne « bar »
L’exemple donné par la documentation semble encore une fois d’une simplicité enfantine :
{
"title": "Memory Usage Bar",
"_type": "celltile/bar",
"config": {
"source": {
"objectname": "Memory",
"countername": "PercentMemoryUsed"
},
"display": {
"valueTemplate": "{{(value ? Math.floor(value) : 0)}}"
}
}
}
Le nom du compteur, éventuellement un peu de formatage de la valeur via une fonction Javascript et voilà.
Mais lorsque la Matrix est ciblée sur une classe hébergée par une autre, cela ne fonctionne pas : la colonne est vide.
Un peu plus loin dans la documentation, dans la section concernant les sparklines, on trouve l’information suivante : lorsque la tuile est scopée sur un objet hébergé tel qu’un disque, une base de données ou un site web, il faut modifier la configuration du groupement :
"transforms": [
{
"operator": "group",
"parameters": {
"keys": [
"managedEntityId"
]
}
},
{
"operator": "merge",
"parameters": {
"sourceKey": "id",
"targetKey": "key.managedEntityId"
}
}
]
Il semble alors naturel de tenter la même modification pour la sparkline. Malheureusement sans succès…
La solution, qui m’a été apportée par le support de SquaredUp, est la suivante :
"transforms": [
{
"operator": "merge",
"parameters": {
"sourceKey": "id",
"targetKey": "managedEntityId"
}
}
]
Il s’agit quasiment de la même syntaxe, mais en n’utilisant que le merge.
C’est tout pour aujourd’hui !