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

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

Dit object omvat een cURL-handle waarmee eenvoudige HTTP-verzoeken kunnen worden gedaan. Fouten worden als uitzonderingen gegooid.

Het initialiseren van meerdere HttpRequest-objecten is beperkt tot 10 per uitvoering van het script.

Methode Beschrijving
addHeader(value) Voegt een HTTP-header veld toe. Dit veld wordt gebruikt voor alle volgende verzoeken totdat het wordt gewist met de methode clearHeader().
De totale lengte van de header velden die aan een enkel HttpRequest-object kunnen worden toegevoegd, is beperkt tot 128 Kbytes (speciale tekens en kopernamen inbegrepen).
clearHeader() Wist de HTTP-header. Als er geen header velden zijn ingesteld, zal HttpRequest Content-Type instellen op application/json als de te verzenden data in JSON-formaat is; anders text/plain.
connect(url) Verzendt een HTTP CONNECT-verzoek naar de URL en geeft de respons terug.
customRequest(method, url, data) Maakt het mogelijk om een willekeurige HTTP-methode op te geven in de eerste parameter. Verzendt het methode-verzoek naar de URL met een optioneel data payload en geeft de respons terug.
delete(url, data) Verzendt een HTTP DELETE-verzoek naar de URL met een optionele data payload en geeft de respons terug.
getHeaders(<asArray>) Geeft het object van ontvangen HTTP-header velden terug.
De parameter asArray kan worden ingesteld op "true" (bijv. getHeaders(true)), "false" of ongedefinieerd zijn. Als het op "true" is ingesteld, worden de waarden van de ontvangen HTTP-header velden geretourneerd als arrays; dit moet worden gebruikt om de veldwaarden van meerdere headers met dezelfde naam op te halen.
Als het niet is ingesteld of ingesteld op "false", worden de waarden van de ontvangen HTTP-header velden geretourneerd als strings.
get(url, data) Verzendt een HTTP GET-verzoek naar de URL met een optionele data payload en geeft de respons terug.
head(url) Verzendt een HTTP HEAD-verzoek naar de URL en geeft de respons terug.
options(url) Verzendt een HTTP OPTIONS-verzoek naar de URL en geeft de respons terug.
patch(url, data) Verzendt een HTTP PATCH-verzoek naar de URL met een optionele data payload en geeft de respons terug.
put(url, data) Verzendt een HTTP PUT-verzoek naar de URL met een optionele data payload en geeft de respons terug.
post(url, data) Verzendt een HTTP POST-verzoek naar de URL met een optionele data payload en geeft de respons 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 de parameter 'bitmask' 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) Verzendt een HTTP TRACE-verzoek naar de URL met een optionele data payload en geeft de respons 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 laagdrempelige detectie-preprocessing en webhooks.

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

Methode Beschrijving
XML.query(data, expression) Haalt de inhoud van een knooppunt 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

Bij de conversie van XML naar JSON worden de volgende regels toegepast (voor conversies 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. Zelfsluitende elementen (<foo/>) worden geconverteerd als zijnde 'null' waarde.

Voorbeeld:

Invoer:

<xml>
         <foo/>
       </xml>

Uitvoer:

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

3. Lege attributen (met "" waarde) worden geconverteerd als zijnde een lege tekenreeks ('') waarde.

Voorbeeld:

Invoer:

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

Uitvoer:

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

4. Meerdere kindknooppunten met dezelfde elementnaam worden geconverteerd naar één 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: wordt de tekstinhoud 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 globale JavaScript-functies zijn geïmplementeerd met Duktape:

  • btoa(data) - codeert de data 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 data

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

  • hmac('<hash type>',key,data) - geeft de HMAC-hash als een hex-geformatteerde string terug; MD5- en SHA256-hash types worden ondersteund; sleutel- en dataparameters ondersteunen binair. Voorbeelden:

    • hmac('md5',key,data)
    • hmac('sha256',key,data)
  • sign(hash,key,data) - geeft de berekende handtekening (RSA-handtekening met SHA-256) terug als een string, waarbij:
    hash - alleen 'sha256' is toegestaan, anders wordt er een foutmelding weergegeven;
    key - de privésleutel. Deze 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 ''s in plaats van nieuwe regels;
    • zonder enige nieuwe regels als een eenregelige string;
    • als een JSON-geformatteerde string.

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

    data - de data die zal worden ondertekend. Het kan een tekenreeks zijn (ook binair ondersteund) of buffer (Uint8Array/ArrayBuffer).
    OpenSSL of GnuTLS wordt gebruikt om de handtekeningen te berekenen. Als Zabbix is gebouwd zonder een van deze versleutelingsbibliotheken, wordt er een foutmelding weergegeven ('missing OpenSSL or GnuTLS library').
    Deze functie wordt ondersteund sinds Zabbix 6.4.1.