[comment]: # translation:outdated

[comment]: # ({96feb912-d3accdff})
# 1 Extra JavaScript-objecten

[comment]: # ({/96feb912-d3accdff})

[comment]: # ({dfa8c394-ab8bd378})
### Overzicht

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

[comment]: # ({/dfa8c394-ab8bd378})

[comment]: # ({c73f2449-c73f2449})
### Ingebouwde objecten

[comment]: # ({/c73f2449-c73f2449})

[comment]: # ({500e2fca-e5dc8dd0})
#### 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))|

::: noteimportant
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)

[comment]: # ({/500e2fca-e5dc8dd0})

[comment]: # ({e9f5974a-51c5ca42})
#### HttpRequest

::: noteimportant
"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.

::: noteimportant
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()`.<br>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.<br>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.<br>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.<br>De HTTPAUTH\_NONE-vlag maakt het mogelijk om HTTP-authenticatie uit te schakelen.<br>Voorbeelden:<br>`request.setHttpAuth(HTTPAUTH_NTLM \| HTTPAUTH_BASIC, username, password)`<br>`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:

```javascript
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);
```

[comment]: # ({/e9f5974a-51c5ca42})

[comment]: # ({73df7bc5-06cac1ca})
#### XML

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

::: noteimportant
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.<br>**expression** - een XPath-expressie;<br>**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:*

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

[comment]: # ({/73df7bc5-06cac1ca})

[comment]: # ({9e03c929-a12fbdc2})
##### 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:*

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

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

Voorbeeld:

*Invoer:*

    <xml>
      <foo/>
    </xml>

*Uitvoer:*

```json
{
  "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:*

```json
{
  "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:*

```json
{
  "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:*

```json
{
  "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:*

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

[comment]: # ({/9e03c929-a12fbdc2})

[comment]: # ({37bf26f7-1368a2b0})
### 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

```javascript
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:<br>
    **hash** - alleen 'sha256' is toegestaan, anders wordt er een foutmelding weergegeven;<br>
    **key** - de privésleutel. Het moet overeenkomen met de PKCS#1- of PKCS#8-standaard. De sleutel kan op verschillende manieren worden opgegeven:<br>
    -    met spaties in plaats van nieuwe regels;
    -    met geëscapete of niet-geëscapete '\n'-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).<br>
    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').<br>Deze functie wordt ondersteund sinds Zabbix 6.0.15.

[comment]: # ({/37bf26f7-1368a2b0})
