Esta é uma tradução da página de documentação original em inglês. Ajude-nos a torná-la melhor.

Objetos JavaScript adicionais

Visão geral

Esta seção descreve as adições à linguagem JavaScript implementadas com Duktape e funções JavaScript globais suportadas.

Objetos nativos (built-in)

Zabbix

O objeto Zabbix fornece interação com as funcionalidades internas do Zabbix.

Método Descrição
log(loglevel, mensagem) Grava a <mensagem> no log do Zabbix usando o nível de log <loglevel> (veja o parâmetro DebugLevel do arquivo de configuração).

Exemplo:

Zabbix.log(3, "esta é uma entrada de log gravada com nível de log 'Warning'")

Você pode usar os seguintes apelidos (aliases):

Apelido Apelido para
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))
Método Descrição
sleep(delay) Atrasa a execução do JavaScript por delay milissegundos.

Exemplo (atrasa execução por 15 segundos):

Zabbix.sleep(15000)

HttpRequest

This object encapsulates cURL handle allowing to make simple HTTP requests. Errors are thrown as exceptions.

HttpRequest is a new name for this object since Zabbix 5.4. Previously it used to be called CurlHttpRequest. Method names have also been changed in Zabbix 5.4. The old object/method names are now deprecated and their support will be discontinued after Zabbix 6.0.

Method Description
addHeader(name, value) Adds HTTP header field. This field is used for all following requests until cleared with the clearHeader() method.
clearHeader() Clears HTTP header. If no header fields are set, HttpRequest will set Content-Type to application/json if the data being posted is JSON-formatted; text/plain otherwise.
connect(url) Sends HTTP CONNECT request to the URL and returns the response.
customRequest(method, url, data) Allows to specify any HTTP method in the first parameter. Sends the method request to the URL with optional data payload and returns the response.
delete(url, data) Sends HTTP DELETE request to the URL with optional data payload and returns the response.
getHeaders() Returns object of received HTTP header fields.
get(url, data) Sends HTTP GET request to the URL with optional data payload and returns the response.
head(url) Sends HTTP HEAD request to the URL and returns the response.
options(url) Sends HTTP OPTIONS request to the URL and returns the response.
patch(url, data) Sends HTTP PATCH request to the URL with optional data payload and returns the response.
put(url, data) Sends HTTP PUT request to the URL with optional data payload and returns the response.
post(url, data) Sends HTTP POST request to the URL with optional data payload and returns the response.
getStatus() Returns the status code of the last HTTP request.
setProxy(proxy) Sets HTTP proxy to "proxy" value. If this parameter is empty then no proxy is used.
setHttpAuth(bitmask, username, password) Sets enabled HTTP authentication methods (HTTPAUTH_BASIC, HTTPAUTH_DIGEST, HTTPAUTH_NEGOTIATE, HTTPAUTH_NTLM, HTTPAUTH_NONE) in the 'bitmask' parameter.
The HTTPAUTH_NONE flag allows to disable HTTP authentication.
Examples:
request.setHttpAuth(HTTPAUTH_NTLM \| HTTPAUTH_BASIC, username, password)
request.setHttpAuth(HTTPAUTH_NONE)
trace(url, data) Sends HTTP TRACE request to the URL with optional data payload and returns the response.

Example:

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

O objeto XML permite o processamento de dados XML no item e pré- processamento de descoberta de baixo-nível e webhooks.

De modo a usar o objeto XML, o Server/Proxy deve ser compilado com suporte a libxml2.

Método Descrição
XML.query(expression, data) Recupera conteúdo do nó usando XPath. Retorna null se o nó não for encontrado.
expression - uma expressão XPath;
data - dado XML como uma string.
XML.toJson(data) Converte dado em formato XML para JSON.
XML.fromJson(object) Converte dado em formato JSON para XML.

Exemplo:

Entrada (input):

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

Saída (output):

{
           "menu": {
               "food": {
                   "@type": "breakfast",
                   "name": "Chocolate",
                   "price": "$5.95",
                   "description": null,
                   "calories": "650"
               }
           }
       }
Regras de serialização

A conversão de XML para JSON será processada de acordo com as seguintes regras (para conversões JSON para XML regras reversas são aplicadas):

1. atributos XML serão convertidos para chaves que possuem seus nomes precedidos com '@'.

Exemplo:

Entrada (input):

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

Saída (output):

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

2. Elementos com auto fechamento (<foo/>) serão convertidos como tendo valor 'null'.

Exemplo:

Entrada (input):

<xml>
         <foo/>
       </xml>

Saída (output):

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

3. Atributos vazios (com valor "") serão convertidos como tendo um valor string vazia ('').

Exemplo:

Entrada (input):

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

Saída (output):

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

4. Múltiplos nós filhos com o mesmo nome de elemento serão convertidos para uma chave única que tem um array de valores como seu valor.

Exemplo:

Entrada (input):

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

Saída (output):

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

5. Se um elemento texto não tem atributos e filhos, ele será convertido como uma string.

Exemplo:

Entrada (input):

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

Saída (output):

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

6. Se um elemento texto não tem filhos, mas tem atributos: o conteúdo de texto será convertido para um elemento com a chave '#text' e conteúdo como valor; atributos serão convertidos como descritos na serialização regra 1.

Exemplo:

Entrada (input):

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

Saída (output):

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

Funções JavaScript globais

Funções JavaScript globais adicionais foram implementadas com Duktape:

  • btoa(string) - codifica string para uma string base64
  • atob(base64_string) - decodifica uma string base64
try {
           b64 = btoa("utf8 string");
           utf8 = atob(b64);
       } 
       catch (error) {
           return {'error.name' : error.name, 'error.message' : error.message}
       }
  • md5(string) - calcula o hash MD5 de uma string
  • sha256(string) - calcula o SHA256 de uma string