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

Objetos JavaScript extras

Visão geral

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

Objetos Built-in

Zabbix

O objeto Zabbix fornece interação com a funcionalidade interna do Zabbix.

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

Exemplo:

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

Você pode usar os seguintes aliases:

Alias Equivalente a
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))

O tamanho total de todas as mensagens registradas no log é limitado a 8 MB por execução de script.

Método Descrição
sleep(delay) Atrasa a execução do JavaScript por delay milissegundos.

Exemplo (atrasar a execução por 15 segundos):

Zabbix.sleep(15000)

Requisição Http

"HttpRequest" é o novo nome para este objeto a partir do Zabbix 5.4.
Anteriormente era chamado de "CurlHttpRequest". Os nomes dos métodos também foram alterados no Zabbix 5.4.
Os nomes antigos de objetos/métodos agora estão obsoletos e seu suporte será descontinuado após o Zabbix 6.0.

Este objeto encapsula o manipulador cURL, permitindo realizar requisições HTTP simples. Erros são lançados como exceções.

A inicialização de múltiplos objetos HttpRequest é limitada a 10 por execução de script.

Método Descrição
addHeader(value) Adiciona um campo de cabeçalho HTTP. Este campo será usado para todas as requisições seguintes até ser limpo com o método clearHeader().
O tamanho total dos campos de cabeçalho que podem ser adicionados a um único objeto HttpRequest é limitado a 128 KB (incluindo caracteres especiais e nomes de cabeçalho).
clearHeader() Limpa o cabeçalho HTTP. Se nenhum campo de cabeçalho for definido, o HttpRequest definirá o Content-Type como application/json se os dados enviados forem formatados em JSON; caso contrário, como text/plain.
connect(url) Envia uma requisição HTTP CONNECT para a URL e retorna a resposta.
customRequest(method, url, data) Permite especificar qualquer método HTTP no primeiro parâmetro. Envia a requisição do método para a URL com um payload opcional de data e retorna a resposta.
delete(url, data) Envia uma requisição HTTP DELETE para a URL com um payload opcional de data e retorna a resposta.
getHeaders(<asArray>) Retorna os campos do cabeçalho HTTP recebidos.
O parâmetro asArray pode ser definido como "true" (por exemplo, getHeaders(true)), "false" ou não definido. Se definido como "true", os valores dos campos de cabeçalho recebidos serão retornados como arrays; isso deve ser usado para recuperar os valores de cabeçalhos com o mesmo nome.
Se não definido ou definido como "false", os valores serão retornados como strings.
get(url, data) Envia uma requisição HTTP GET para a URL com um payload opcional de data e retorna a resposta.
head(url) Envia uma requisição HTTP HEAD para a URL e retorna a resposta.
options(url) Envia uma requisição HTTP OPTIONS para a URL e retorna a resposta.
patch(url, data) Envia uma requisição HTTP PATCH para a URL com um payload opcional de data e retorna a resposta.
put(url, data) Envia uma requisição HTTP PUT para a URL com um payload opcional de data e retorna a resposta.
post(url, data) Envia uma requisição HTTP POST para a URL com um payload opcional de data e retorna a resposta.
getStatus() Retorna o código de status da última requisição HTTP.
setProxy(proxy) Define o proxy HTTP para o valor "proxy". Se este parâmetro estiver vazio, nenhum proxy será usado.
setHttpAuth(bitmask, username, password) Define os métodos de autenticação HTTP habilitados (HTTPAUTH_BASIC, HTTPAUTH_DIGEST, HTTPAUTH_NEGOTIATE, HTTPAUTH_NTLM, HTTPAUTH_NONE) no parâmetro 'bitmask'.
A flag HTTPAUTH_NONE permite desativar a autenticação HTTP.
Exemplos:
request.setHttpAuth(HTTPAUTH_NTLM \| HTTPAUTH_BASIC, username, password)
request.setHttpAuth(HTTPAUTH_NONE)
trace(url, data) Envia uma requisição HTTP TRACE para a URL com um payload opcional de data e retorna a resposta.

Exemplo:

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://jira.example.com/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 em formato XML em itens, pré-processamento de descoberta de baixo nível e webhooks.

Para usar o objeto XML, o servidor/proxy deve ser compilado com suporte a libxml2.

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

Exemplo:

Input:

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

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 de JSON para XML, as regras inversas se aplicam):

1. Atributos XML serão convertidos em chaves com seus nomes precedidos de '@'.

Exemplo:

Input:

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

Output:

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

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

Exemplo:

Input:

<xml>
         <foo/>
       </xml>

Output:

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

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

Exemplo:

Input:

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

Output:

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

4. Múltiplos nodes filhos com o mesmo nome de elemento serão convertidos em uma única chave com um array de valores como seu valor.

Exemplo:

Input:

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

Output:

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

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

Exemplo:

Input:

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

Output:

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

6. Se um elemento de texto não tiver filhos, mas tiver atributos, o conteúdo de texto será convertido em um elemento com a chave '#text' e o conteúdo como valor; os atributos serão convertidos conforme descrito na regra 1.

Exemplo:

Input:

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

Output:

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

Funções globais de JavaScript

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

  • btoa(data) - codifica os dados em 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(data) - calcula o hash MD5 dos dados

  • sha256(data) - calcula o hash SHA256 dos dados

  • hmac('<hash type>',key,data) - retorna o hash HMAC como uma string formatada em hexadecimal;

  • Os tipos de hash MD5 e SHA256 são suportados; Os parâmetros key e data aceitam dados binários. Exemplos:

    • hmac('md5',key,data)
    • hmac('sha256',key,data)
  • sign(hash,key,data) - retorna a assinatura calculada (assinatura RSA com SHA-256) como uma string, onde:
    hash - apenas 'sha256' é permitido, caso contrário, um erro será lançado;
    key - a chave privada, que deve seguir o padrão PKCS#1 ou PKCS#8. A chave pode ser fornecida em diferentes formatos:

    • com espaços em vez de quebras de linha;
    • com '' escapados ou não escapados no lugar de quebras de linha;
    • sem quebras de linha, como uma string de linha única;
    • como uma string formatada em JSON.

    A chave também pode ser carregada a partir de um macro de usuário, macro secreta ou cofre.

    data - os dados que serão assinados. Pode ser uma string (dados binários também são suportados) ou um buffer (Uint8Array/ArrayBuffer).
    OpenSSL ou GnuTLS é usado para calcular as assinaturas. Caso o Zabbix tenha sido compilado sem essas bibliotecas de criptografia, um erro será lançado ('missing OpenSSL or GnuTLS library').
    Essa função é suportada desde o Zabbix 6.0.15.