Você está visualizando a documentação da versão de desenvolvimento, que pode estar incompleta.
Esta página foi traduzida automaticamente. Se você notar um erro, selecione-o e pressione Ctrl+Enter para reportá-lo aos editores.

1 Objetos JavaScript adicionais

Visão geral

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

Não use atribuições não declaradas no pré-processamento do JavaScript. Use var para declarar variáveis locais.

Objetos internos

Zabbix

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

Método Descrição
log(loglevel, message) Grava <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, "esta é uma entrada de log gravada com o nível de log 'Warning'")

Você pode usar os seguintes aliases:

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

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

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

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

Zabbix.sleep(15000)

HttpRequest

Este objeto encapsula o manipulador cURL permitindo fazer 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 campo de cabeçalho HTTP. Este campo é usado para todas as requisições seguintes até ser limpo com o método clearHeader().
O comprimento total dos campos de cabeçalho que podem ser adicionados a um único objeto HttpRequest é limitado a 128 Kbytes (caracteres especiais e nomes de cabeçalho incluídos).
clearHeader() Limpa o cabeçalho HTTP. Se nenhum campo de cabeçalho for definido, HttpRequest definirá Content-Type como application/json se os dados enviados estiverem em formato JSON; text/plain caso contrário.
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 o data opcional e retorna a resposta.
delete(url, data) Envia uma requisição HTTP DELETE para a URL com o data opcional e retorna a resposta.
getHeaders(<asArray>) Retorna o objeto dos campos de cabeçalho HTTP recebidos.
O parâmetro asArray pode ser definido como "true" (por exemplo, getHeaders(true)), "false" ou indefinido. Se definido como "true", os valores dos campos de cabeçalho HTTP recebidos serão retornados como arrays; isso deve ser usado para recuperar os valores dos campos de múltiplos cabeçalhos com o mesmo nome.
Se não definido ou definido como "false", os valores dos campos de cabeçalho HTTP recebidos serão retornados como strings.
get(url, data) Envia uma requisição HTTP GET para a URL com o data opcional 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 o data opcional e retorna a resposta.
put(url, data) Envia uma requisição HTTP PUT para a URL com o data opcional e retorna a resposta.
post(url, data) Envia uma requisição HTTP POST para a URL com o data opcional 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 desabilitar 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 o data opcional 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 XML no pré-processamento de item e descoberta de baixo nível e webhooks.

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

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

Exemplo:

Entrada:

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

Saída:

{
           "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 invertidas são aplicadas):

1. Os atributos XML serão convertidos em chaves que têm seus nomes precedidos por '@'.

Exemplo:

Entrada:

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

Saída:

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

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

Exemplo:

Entrada:

<xml>
         <foo/>
       </xml>

Saída:

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

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

Exemplo:

Entrada:

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

Saída:

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

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

Exemplo:

Entrada:

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

Saída:

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

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

Exemplo:

Entrada:

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

Saída:

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

6. Se um elemento de texto não tiver filhos, mas tiver atributos, o conteúdo do 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 de serialização 1.

Exemplo:

Entrada:

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

Saída:

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

Funções globais do JavaScript

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

  • btoa(data) - codifica os dados em uma string base64;
  • atob(base64_string) - decodifica a string base64 como um buffer Uint8Array.
try {
           b64 = btoa("test string");
           buffer = atob(b64);
       
           // Observe que a lógica de decodificação depende do formato dos dados do buffer.
           decoded = String.fromCharCode.apply(this, [].slice.call(buffer));
       } 
       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 suportam 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 é gerado;
    key - a chave privada. Ela deve corresponder ao padrão PKCS#1 ou PKCS#8. A chave pode ser fornecida em diferentes formas:

    • com espaços em vez de quebras de linha;
    • com \n escapado ou não escapado em vez 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 de uma macro de usuário/macro secreta/vault.

    data - os dados que serão assinados. Pode ser uma string (dados binários também são suportados) ou buffer (Uint8Array/ArrayBuffer).
    OpenSSL ou GnuTLS é usado para calcular as assinaturas. Se o Zabbix foi compilado sem nenhuma dessas bibliotecas de criptografia, um erro será gerado ('missing OpenSSL or GnuTLS library').