This is a translation of the original English documentation page. Help us make it better.

Objets JavaScript supplémentaires

Aperçu

Cette section décrit les ajouts de Zabbix au langage JavaScript implémentés avec Duktape et les fonctions JavaScript globales prises en charge.

Objets intégrés

Zabbix

L'objet Zabbix fournit une interaction avec la fonctionnalité interne de Zabbix.

Méthode Description
log(loglevel, message) Écrit <message> dans le journal Zabbix en utilisant le niveau de journalisation <loglevel> (voir le paramètre DebugLevel du fichier de configuration).

Exemple :

Zabbix.log(3, "this is a log entry written with 'Warning' log level")

Vous pouvez utiliser les alias suivants :

Alias Alias vers
console.log(object) Zabbix.log(4, JSON.stringify(object))
console.warn(object) Zabbix.log(3, JSON.stringify(object))
console.error(object) Zabbix.log(2, JSON.stringify(object))

La taille totale de tous les messages consignés est limitée à 8 Mo par exécution de script.

Méthode Description
sleep(delay) Retarde l'exécution de JavaScript de delay millisecondes.

Exemple (retarder l'exécution de 15 secondes) :

Zabbix.sleep(15000)

HttpRequest

""HttpRequest" est un nouveau nom pour cet objet depuis Zabbix 5.4. Auparavant, il s'appelait CurlHttpRequest. Les noms des méthodes ont également été modifiés dans Zabbix 5.4. Les anciens noms d'objet/méthode sont désormais obsolètes et leur prise en charge sera interrompue après Zabbix 6.0.

Cet objet encapsule le handle cURL permettant de faire des requêtes HTTP simples. Les erreurs sont levées en tant qu'exceptions.

L'initialisation de plusieurs objets HttpRequest est limitée à 10 par exécution de script.

Méthode Description
addHeader(name, value) Ajoute un champ d'en-tête HTTP. Ce champ est utilisé pour toutes les requêtes suivantes jusqu'à ce qu'il soit effacé avec la méthode clearHeader().
La longueur totale des champs d'en-tête pouvant être ajoutés à un seul objet HttpRequest est limitée à 128 Ko (caractères spéciaux et noms d'en-tête inclus).
clearHeader() Efface l'en-tête HTTP. Si aucun champ d'en-tête n'est défini, HttpRequest définira Content-Type sur application/json si les données publiées sont au format JSON ; text/plain sinon.
connect(url) Envoie la requête HTTP CONNECT à l'URL et renvoie la réponse.
customRequest(method, url, data) Permet de spécifier n'importe quelle méthode HTTP dans le premier paramètre. Envoie la demande de méthode à l'URL avec la charge utile data facultative et renvoie la réponse.
delete(url, data) Envoie la requête HTTP DELETE à l'URL avec la charge utile data facultative et renvoie la réponse.
getHeaders(<asArray>) Renvoie l'objet des champs d'en-tête HTTP reçus.
Le paramètre asArray peut être défini sur "true" (par exemple, getHeaders(true)), "false" ou être indéfini. S'il est défini sur "true", les valeurs de champ d'en-tête HTTP reçues seront renvoyées sous forme de tableaux ; cela doit être utilisé pour récupérer les valeurs de champ de plusieurs en-têtes de même nom.
Si non défini ou défini sur "false", les valeurs de champ d'en-tête HTTP reçues seront renvoyées sous forme de chaînes.
get(url, data) Envoie une requête HTTP GET à l'URL avec la charge utile data facultative et renvoie la réponse.
head(url) Envoie la requête HTTP HEAD à l'URL et renvoie la réponse.
options(url) Envoie la requête HTTP OPTIONS à l'URL et renvoie la réponse.
patch(url, data) Envoie la requête HTTP PATCH à l'URL avec la charge utile data facultative et renvoie la réponse.
put(url, data) Envoie une requête HTTP PUT à l'URL avec la charge utile data facultative et renvoie la réponse.
post(url, data) Envoie une requête HTTP POST à l'URL avec la charge utile data facultative et renvoie la réponse.
getStatus() Renvoie le code d'état de la dernière requête HTTP.
setProxy(proxy) Définit le proxy HTTP sur la valeur "proxy". Si ce paramètre est vide, aucun proxy n'est utilisé.
setHttpAuth(bitmask, username, password) Définit les méthodes d'authentification HTTP activées (HTTPAUTH_BASIC, HTTPAUTH_DIGEST, HTTPAUTH_NEGOTIATE, HTTPAUTH_NTLM, HTTPAUTH_NONE) dans le paramètre 'bitmask'.
Le drapeau HTTPAUTH_NONE permet de désactiver l'authentification HTTP.
Exemples :
request.setHttpAuth(HTTPAUTH_NTLM \| HTTPAUTH_BASIC, nom d'utilisateur, mot de passe)
request.setHttpAuth(HTTPAUTH_NONE)
trace(url, data) Envoie la requête HTTP TRACE à l'URL avec la charge utile data facultative et renvoie la réponse.

Exemple :

try {
           Zabbix.log(4, 'jira webhook script value='+value);
         
           var result = {
               'tags': {
                   'endpoint': 'jira'
               }
           },
           params = JSON.parse(value),
           req = new HttpRequest(),
           fields = {},
           resp;
         
           req.addHeader('Content-Type: application/json');
           req.addHeader('Authorization: Basic '+params.authentication);
         
           fields.summary = params.summary;
           fields.description = params.description;
           fields.project = {"key": params.project_key};
           fields.issuetype = {"id": params.issue_id};
           resp = req.post('https://tsupport.zabbix.lan/rest/api/2/issue/',
               JSON.stringify({"fields": fields})
           );
         
           if (req.getStatus() != 201) {
               throw 'Response code: '+req.getStatus();
           }
         
           resp = JSON.parse(resp);
           result.tags.issue_id = resp.id;
           result.tags.issue_key = resp.key;
       } catch (error) {
           Zabbix.log(4, 'jira issue creation failed json : '+JSON.stringify({"fields": fields}));
           Zabbix.log(4, 'jira issue creation failed : '+error);
         
           result = {};
       }
         
       return JSON.stringify(result);

XML

L'objet XML permet le traitement des données XML dans l'élément et le prétraitement de découverte de bas niveau et les webhooks.

Pour utiliser l'objet XML, le serveur/proxy doit être compilé avec le support libxml2.

Méthode Description
XML.query(data, expression) Récupère le contenu du nœud à l'aide de XPath. Renvoie null si le nœud n'est pas trouvé.
expression - une expression XPath ;
data - données XML sous forme de chaîne.
XML.toJson(data) Convertit les données au format XML en JSON.
XML.fromJson(object) Convertit les données au format JSON en XML.

Exemple :

Entrée :

<menu>
           <food type = "breakfast">
               <name>Chocolate</name>
               <price>$5.95</price>
               <description></description>
               <calories>650</calories>
           </food>
       </menu>

Sortie :

{
           "menu": {
               "food": {
                   "@type": "breakfast",
                   "name": "Chocolate",
                   "price": "$5.95",
                   "description": null,
                   "calories": "650"
               }
           }
       }
Règles de sérialisation

La conversion XML vers JSON sera traitée selon les règles suivantes (pour les conversions JSON vers XML, des règles inversées sont appliquées) :

1. Les attributs XML seront convertis en clés dont les noms seront précédés de '@'.

Exemple :

Entrée:

 <xml foo="FOO">
          <bar>
            <baz>BAZ</baz>
          </bar>
        </xml>

Sortie :

 {
          "xml": {
            "@foo": "FOO",
            "bar": {
              "baz": "BAZ"
            }
          }
        }

2. Les éléments à fermeture automatique (<foo/>) seront convertis comme ayant une valeur 'null'.

Exemple :

Entrée:

<xml>
         <foo/>
       </xml>

Sortie :

{
         "xml": {
           "foo": null
         }
       }

3. Les attributs vides (avec la valeur "") seront convertis comme ayant une valeur de chaîne vide ('').

Exemple :

Entrée:

<xml>
         <foo bar="" />
       </xml>

Sortie :

{
         "xml": {
           "foo": {
             "@bar": ""
           }
         }
       }

4. Plusieurs nœuds enfants avec le même nom d'élément seront convertis en une seule clé qui a un tableau de valeurs comme valeur.

Exemple :

Entrée:

<xml>
         <foo>BAR</foo>
         <foo>BAZ</foo>
         <foo>QUX</foo>
       </xml>

Sortie :

{
         "xml": {
           "foo": ["BAR", "BAZ", "QUX"]
         }
       }

5. Si un élément de texte n'a ni attribut ni enfant, il sera converti en chaîne.

Exemple :

Entrée:

<xml>
           <foo>BAZ</foo>
       </xml>

Sortie :

{
         "xml": {
           "foo": "BAZ"
          }
       }

6. Si un élément de texte n'a pas d'enfant, mais possède des attributs : le contenu du texte sera converti en un élément avec la clé '#text' et le contenu comme valeur ; les attributs seront convertis comme décrit dans la règle de sérialisation 1.

Exemple :

Entrée:

<xml>
         <foo bar="BAR">
           BAZ
         </foo>
       </xml>

Sortie :

{
         "xml": {
           "foo": {
             "@bar": "BAR",
             "#text": "BAZ"
           }
         }
       }

Fonctions JavaScript globales

Des fonctions JavaScript globales supplémentaires ont été implémentées avec Duktape :

  • btoa(string) - encode la chaîne en chaîne base64
  • atob(base64_string) - décode la chaîne base64
try {
           b64 = btoa("utf8 string");
           utf8 = atob(b64);
       } 
       catch (error) {
           return {'error.name' : error.name, 'error.message' : error.message}
       }
  • md5(données) - calcule le hachage MD5 d'une chaîne

  • sha256(données) - calcule le hachage SHA256 d'une chaîne

  • mac('<ype de hachage>',clé,données) - renvoie le hachage HMAC sous forme de chaîne au format hexadécimal ; Les types de hachage MD5 et SHA256 sont pris en charge ; Les paramètres de clé et de données prennent en charge les données binaires. Exemples :

    • hmac('md5',clé,données)
    • hmac('sha256',clé,données)
  • sign(hachage,clé,données) - renvoie la signature calculée (signature RSA avec SHA-256) sous forme de chaîne, où :
    hash - seul 'sha256' est autorisé, sinon une erreur est renvoyée ;
    clé - la clé privée. Il doit correspondre à la norme PKCS#1 ou PKCS#8. La clé peut être fournie sous différentes formes :

    • avec des espaces au lieu de retours à la ligne ;
    • avec des '' échappés ou non au lieu de nouvelles lignes ;
    • sans aucun retour à la ligne sous la forme d'une chaîne à une seule ligne ;
    • sous forme de chaîne au format JSON.

    La clé peut également être chargée à partir d'une macro utilisateur/macro secrète/coffre.

    data - les données qui seront signées. Il peut s'agir d'une chaîne (les données binaires sont également prises en charge) ou d'un tampon (Uint8Array/ArrayBuffer).
    OpenSSL ou GnuTLS est utilisé pour calculer les signatures. Si Zabbix a été compilé sans aucune de ces bibliothèques de chiffrement, une erreur sera générée ("bibliothèque OpenSSL ou GnuTLS manquante").
    Cette fonction est prise en charge depuis Zabbix 6.0.15.