Cette étape est optionnelle (sauf avec les combinaisons d'OID's).
Une fois votre (ou vos) OID sélectionné, il est possible d'appliquer un traitement à ce dernier. Par exemple :
- Par ce que certaines valeurs d'OID sont parfois peu parlantes et difficilement exploitables en l'état.
- Pour utiliser les fonctions du transformateur, notamment pour calculer une bande passante à partir d'un OID d'interface réseau de switch, de routeur...
Le transformateur va donc vous permettre de rédiger des expressions pour manipuler et mettre en forme les valeurs des OID's.
- Bon à savoir : Pour être traitée avec les expressions de transformations, les données doivent récu sans unité. L'unité sera ensuite choisie via la liste déroulante prévue à cet effet.
Afin de traiter la valeur de votre OID dans le transformateur, il vous faut utiliser la fonction value().
value() (alias de value(0) ) est une fonction qui vous permet d'utiliser la valeur de l'OID afin d'y appliquer une transformation.
Dans le cas où plusieurs OIDs ont été sélectionnés, les valeurs correspondantes sont accessibles via les variables value(N), où N désigne l'indice de l'OID indiqué dans la liste.
Un bouton "Coller dans l'expression de transformation" vous permet de reporter automatiquement la bonne variable dans le champ de saisie d'expression.
Des fonctions avancées sont aussi disponibles afin de permettre ou faciliter certaines opérations :
- previousValue() retourne la valeur précédemment évaluée
- growth() retourne la différence entre les deux dernières valeurs évaluées (équivaut à value() - previousValue()).
- elapsed() retourne le délai (en secondes) écoulé entre les deux dernières évaluations
- bandwidth() retourne le calcul de bande passante (équivaut à growth() / elapsed()), en inférant que l'OID associé concerne un volume de données (l'unité de base est conservée)
- slice(valeur, début, fin) retourne une section de chaine de caractères, depuis les indices "début" (inclus) à "fin" (exclus). Les indices négatifs seront traités tels que _[longueur chaîne + indice]_, inversant le sens d'extraction.
- readByte(valeur, position) retourne la valeur décimale de l'octet à la position renseignée (entier positif) d'une chaîne d'octets (type OCTET_STR), ou, si aucune "position" n'est renseignée, la valeur hexadécimale de la chaîne complète.
- readBit(valeur, position) retourne la valeur du bit de poids faible à la position renseignée (entier positif, lu à partir de la droite). La valeur fournie doit être une décimale.
Dans le cas d'OIDs combinés, les fonctions previousValue, growth, elapsed et bandwidth peuvent s'utiliser sur l'OID de votre choix en précisant son index en argument.
Exemple : bandwidth(2) retournera la bande passante de l'OID ayant l'index 2 dans la liste de gauche.
Les fonctions slice, readByte, et readBit quant à elles doivent recevoir en premier paramètre "valeur" le retour d'une autre fonction.
Exemples d'expressions pour le transformateur
Dans l'exemple ci-dessous, il s'agit d'un switch qui renvoie une valeur de "1", "2" ou "3" pour rendre compte de l'état de son alimentation électrique. L'objectif est donc de transormer ces valeurs numeriques en texte compréhensible
Transformer une valeur numérique en chaine de caractères. Il est précisé dans la MIB que le 1 = OK, 2 = Warning, 3 = Failed |
value() == 1 ? "OK" : |
Calcul d'une bande passante
Calculer une bande passante, sur la base d'un OID qui fournit la quantité de données ayant transité sur un port (ex. : IfInOctets) |
bandwidth() |
Si le débit obtenu est négatif, essayez l'expression suivante : |
growth() < 0 ? (4294967295-previousValue() + value())/elapsed(): |
Utilisation des OIDs combinés
Transformer une combinaison de valeurs (plusieurs OIDs combinés) |
|
Autres exemples
Transformer une valeur basée sur un total de 255 vers une valeur en pourcentage |
(value() * 100) / 255 |
Transformer une valeur en bits vers une valeur en octets |
value() * 8 |
Fonctions avancées
readByte lit une chaîne d'octets (type OCTET_STR). readByte(value(), p) Le 2nd argument p est un entier positif désignant la position de l'octet que l'on souhaite lire, à partir de 0. Le retour de la fonction sera une représentation de l'octer en valeur décimale. |
|
Les exemples ci-contre supposent que
value() = \u0000\u001d\u0637"O soit 001DD8B7224F en hexadécimal |
readByte(value(), 1)retournera 29, soit la valeur décimale correspondant à 1D (2nd octet). |
readByte(value(), 5)retournera 79, soit la valeur décimale correspondant à 4F (6ème octet). |
|
readByte(value())retournera 001DD8B7224F, soit la valeur hexadécimale correspondant la chaîne d'octets entière. |
|
readBit lit un octet à partir d'une valeur décimale (représentant une valeur binaire). readBit(readByte(value(), 1), p) Le 1er argument doit être le retour d'une fonction existante, comme readByte(value(), 1) qui retournerait la valeur décimale d'un OID de type OCTET_STR. Le 2nd argument p est un entier positif désignant la position de l'octet que l'on souhaite lire, à partir de 0 depuis la droite. Le retour de la fonction sera une représentation binaire du bit (0 ou 1). |
|
Les exemples ci-contre supposent que
readByte(value(), 1) = 29 soit 00011101 en binaire |
readBit(readByte(value(), 1), 0)
retournera 1 (00011101), soit le 1er bit de poids faible (en position 0 depuis la droite) |
readBit(readByte(value(), 1), 5)
retournera 0 (00011101), soit le 6ème bit de poids faible (en position 5 depuis la droite) |
|
slice slice(value(), x, y) Le 1er argument x est un entier définissant la position de départ (incluse). |
|
Les exemples ci-contre supposent que
value() = "hello world" |
slice(value(), 0, 5)
retournera "hello", soit la sous-chaîne allant du 1er caractère (inclus) au 6ème caractère (exclus). |
slice(value(), 6)
retournera "world", soit la sous-chaîne allant du 7ème caractère (inclus) à la fin de la chaîne, la fin n'ayant pas été précisée. |
|
slice(value(), -10, -2)
retournera "ello wor", soit la sous-chaîne allant du 1er caractère (inclus) au 10ème caractère (exclus). slice(value(), 11 + (-10), 11 + (-2))
soit slice(value(), 1, 9)
|
N'hésitez pas à consulter l'aide contextuelle pour plus d'informations sur les expressions du transformateur.
Valeur de sortie
Enfin, concernant le traitement de la donnée, il est possible de lui assigner une unité, via la liste déroulante située sur la partie droite : |
Dès lors qu'une unité est sélectionnée, RG affichera automatiquement la valeur avec l'unité la plus adaptée (Kio, Mio, Gio... Année, mois, semaines...)