1 Extra JavaScript-objecten

Overzicht

Deze sectie beschrijft Zabbix-toevoegingen aan de JavaScript-taal die zijn geïmplementeerd met Duktape en ondersteunde globale JavaScript-functies.

Ingebouwde objecten

Zabbix

Het Zabbix-object biedt interactie met de interne Zabbix-functionaliteit.

Methode Omschrijving
log(loglevel, message) Schrijft <message> in het Zabbix-logboek met gebruik van het logniveau <loglevel> (zie configuratiebestand DebugLevel parameter).

Voorbeeld:

Zabbix.log(3, "dit is een logboekvermelding geschreven met het logniveau 'Waarschuwing'")

Je kunt de volgende aliassen gebruiken:

Alias Alias voor
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))

De totale grootte van alle gelogde berichten is beperkt tot 8 MB per scriptuitvoering.

Methode Omschrijving
sleep(delay) Vertraagt de uitvoering van JavaScript met delay milliseconden.

Voorbeeld (vertraagt de uitvoering 15 seconden):

Zabbix.sleep(15000)

HttpRequest

"HttpRequest" is een nieuwe naam voor dit object sinds Zabbix 5.4. Eerder stond het bekend als "CurlHttpRequest". Ook de methodenamen zijn veranderd in Zabbix 5.4. De oude object-/methodenamen worden nu afgekeurd en hun ondersteuning wordt stopgezet na Zabbix 6.0.

Dit object omhult een cURL-handle om eenvoudige HTTP-verzoeken te maken. Fouten worden als uitzonderingen gemeld.

De initialisatie van meerdere HttpRequest-objecten is beperkt tot 10 per scriptuitvoering.

Methode Omschrijving
addHeader(value) Voegt een HTTP-koptekstveld toe. Dit veld wordt gebruikt voor alle volgende verzoeken totdat het wordt gewist met de methode clearHeader().
De totale lengte van de koptekstvelden die aan een enkel HttpRequest-object kunnen worden toegevoegd, is beperkt tot 128 Kbytes (speciale tekens en koptekstnamen inbegrepen).
clearHeader() Wist de HTTP-koptekst. Als er geen koptekstvelden zijn ingesteld, zal HttpRequest Content-Type instellen op application/json als de te posten gegevens JSON-opmaak hebben; anders text/plain.
connect(url) Verstuurt een HTTP CONNECT-verzoek naar de URL en geeft de reactie terug.
customRequest(method, url, data) Staat toe om in het eerste parameter een willekeurige HTTP-methode op te geven. Verstuurt het methodeverzoek naar de URL met optionele data-lading en geeft de reactie terug.
delete(url, data) Verstuurt een HTTP DELETE-verzoek naar de URL met optionele data-lading en geeft de reactie terug.
getHeaders(<asArray>) Geeft het object van ontvangen HTTP-koptekstvelden terug.
De parameter asArray kan worden ingesteld op "true" (bijv. getHeaders(true)), "false" of niet gedefinieerd zijn. Als deze op "true" wordt ingesteld, worden de ontvangen waarden van HTTP-koptekstvelden als arrays geretourneerd; dit moet worden gebruikt om de veldwaarden van meerdere koptekstvelden met dezelfde naam op te halen.
Als niet ingesteld of ingesteld op "false", worden de ontvangen waarden van HTTP-koptekstvelden als strings geretourneerd.
get(url, data) Verstuurt een HTTP GET-verzoek naar de URL met optionele data-lading en geeft de reactie terug.
head(url) Verstuurt een HTTP HEAD-verzoek naar de URL en geeft de reactie terug.
options(url) Verstuurt een HTTP OPTIONS-verzoek naar de URL en geeft de reactie terug.
patch(url, data) Verstuurt een HTTP PATCH-verzoek naar de URL met optionele data-lading en geeft de reactie terug.
put(url, data) Verstuurt een HTTP PUT-verzoek naar de URL met optionele data-lading en geeft de reactie terug.
post(url, data) Verstuurt een HTTP POST-verzoek naar de URL met optionele data-lading en geeft de reactie terug.
getStatus() Geeft de statuscode van het laatste HTTP-verzoek terug.
setProxy(proxy) Stelt de HTTP-proxy in op de waarde "proxy". Als deze parameter leeg is, wordt geen proxy gebruikt.
setHttpAuth(bitmask, username, password) Stelt ingeschakelde HTTP-authenticatiemethoden (HTTPAUTH_BASIC, HTTPAUTH_DIGEST, HTTPAUTH_NEGOTIATE, HTTPAUTH_NTLM, HTTPAUTH_NONE) in het 'bitmask'-parameter in.
De HTTPAUTH_NONE-vlag maakt het mogelijk om HTTP-authenticatie uit te schakelen.
Voorbeelden:
request.setHttpAuth(HTTPAUTH_NTLM \| HTTPAUTH_BASIC, username, password)
request.setHttpAuth(HTTPAUTH_NONE)
trace(url, data) Verstuurt een HTTP TRACE-verzoek naar de URL met optionele data-lading en geeft de reactie terug.

Voorbeeld:

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

Het XML-object maakt de verwerking van XML-gegevens mogelijk in item- en voorverwerkingsfuncties voor lage niveaus en webhooks.

Om het XML-object te gebruiken, moet de server/proxy zijn gecompileerd met libxml2-ondersteuning.

Methode Omschrijving
XML.query(data, expression) Haalt knooppuntinhoud op met behulp van XPath. Geeft null terug als het knooppunt niet wordt gevonden.
expression - een XPath-expressie;
data - XML-gegevens als een tekenreeks.
XML.toJson(data) Converteert gegevens in XML-indeling naar JSON.
XML.fromJson(object) Converteert gegevens in JSON-indeling naar XML.

Voorbeeld:

Invoer:

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

Uitvoer:

{
           "menu": {
               "food": {
                   "@type": "breakfast",
                   "name": "Chocolate",
                   "price": "$5.95",
                   "description": null,
                   "calories": "650"
               }
           }
       }
Serialisatieregels

De XML-naar-JSON-conversie wordt uitgevoerd volgens de volgende regels (voor de omgekeerde conversie van JSON naar XML worden omgekeerde regels toegepast):

1. XML-attributen worden geconverteerd naar sleutels waarvan de namen worden voorafgegaan door '@'.

Voorbeeld:

Invoer:

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

Uitvoer:

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

2. Zelfafsluitende elementen (<foo/>) worden geconverteerd alsof ze de waarde 'null' hebben.

Voorbeeld:

Invoer:

<xml>
         <foo/>
       </xml>

Uitvoer:

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

3. Lege attributen (met een "" waarde) worden geconverteerd alsof ze de lege tekenreeks ('') als waarde hebben.

Voorbeeld:

Invoer:

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

Uitvoer:

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

4. Meerdere kindknopen met dezelfde elementnaam worden geconverteerd naar een enkele sleutel met een array van waarden als zijn waarde.

Voorbeeld:

Invoer:

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

Uitvoer:

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

5. Als een tekstelement geen attributen en geen kinderen heeft, wordt het geconverteerd als een tekenreeks.

Voorbeeld:

Invoer:

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

Uitvoer:

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

6. Als een tekstelement geen kinderen heeft, maar wel attributen heeft: de tekstinhoud wordt geconverteerd naar een element met de sleutel '#text' en de inhoud als waarde; attributen worden geconverteerd zoals beschreven in regel 1 van de serialisatie.

Voorbeeld:

Invoer:

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

Uitvoer:

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

Globale JavaScript-functies

Aanvullende wereldwijde JavaScript-functies zijn geïmplementeerd met Duktape:

  • btoa(data) - codeert de gegevens naar een base64-string
  • atob(base64_string) - decodeert een base64-string
try {
           b64 = btoa("utf8-string");
           utf8 = atob(b64);
       } 
       catch (error) {
           return {'error.name' : error.name, 'error.message' : error.message}
       }
  • md5(data) - berekent de MD5-hash van de gegevens

  • sha256(data) - berekent de SHA256-hash van de gegevens

  • hmac('<hash type>',key,data) - retourneert de HMAC-hash als hexadecimaal geformatteerde string; MD5- en SHA256-hashtypen worden ondersteund; key- en data-parameters ondersteunen binaire gegevens. Voorbeelden:

    • hmac('md5',key,data)
    • hmac('sha256',key,data)
  • sign(hash,key,data) - retourneert de berekende handtekening (RSA-handtekening met SHA-256) als een string, waar:
    hash - alleen 'sha256' is toegestaan, anders wordt er een foutmelding weergegeven;
    key - de privésleutel. Het moet overeenkomen met de PKCS#1- of PKCS#8-standaard. De sleutel kan op verschillende manieren worden opgegeven:

    • met spaties in plaats van nieuwe regels;
    • met geëscapete of niet-geëscapete ''-tekens in plaats van nieuwe regels;
    • zonder enige nieuwe regels als een enkele-regel string;
    • als een JSON-geformatteerde string.

    De sleutel kan ook worden geladen vanuit een gebruikersmacro/geheime macro/kluis.

    data - de gegevens waarvoor de handtekening wordt gemaakt. Het kan een string zijn (binaire gegevens worden ook ondersteund) of een buffer (Uint8Array/ArrayBuffer).
    OpenSSL of GnuTLS wordt gebruikt om de handtekeningen te berekenen. Als Zabbix is gebouwd zonder een van deze encryptiebibliotheken, wordt er een foutmelding weergegeven ('ontbrekende OpenSSL- of GnuTLS-bibliotheek').
    Deze functie wordt ondersteund sinds Zabbix 6.0.15.