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)

Requisição HTTP HttpRequest

Este objeto encapsula um gerenciamento cURL permitindo a execução de requisições HTTP simples. Erros são lançados como exceção.

HttpRequest é um novo nome para este objeto desde o Zabbix 5.4. Previamente ele custumava se chamar CurlHttpRequest. Os nomes de método também foram alteradas no Zabbix 5.4. Os objetos/nomes de método antigos são agora obsoletos e seu suporte será descontinuado após o Zabbix 6.0.

Método Descrição
addHeader(name, value) Adicione o campo de cabeçalho HTTP. Este campo é usado para todas as seguintes requisições até que limpas com o método clearHeader().
clearHeader() Limpa cabeçalho HTTP. Se nenhum campo cabeçalho é definido, HttpRequest definirá Content-Type como application/json se o dado sendo postado está em formato JSON (JSON-formatted); caso contrário text/plain.
connect(url) Envia 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 a carga de dados opcionais e retorna a resposta.
delete(url, data) Envia requisição HTTP DELETE para a URL com a carga de dados opcionais e retorna a resposta.
getHeaders() Retorna objeto dos campos de cabeçalho HTTP recebidos.
get(url, data) Envia requisição HTTP GET para a URL com a carga de dados opcionais e retorna a resposta.
head(url) Envia requisição HTTP HEAD para a URL e retorna a resposta.
options(url) Envia requisição HTTP OPTIONS para a URL e retorna a resposta.
patch(url, data) Envia requisição HTTP PATCH para a URL com a carga de dados opcionais e retorna a resposta.
put(url, data) Envia requisição HTTP PUT para a URL com a carga de dados opcionais e retorna a resposta.
post(url, data) Envia requisição HTTP POST para a URL com a carga de dados opcionais e retorna a resposta.
getStatus() Retorna o código de estado da última requisição HTTP.
setProxy(proxy) Define HTTP proxy para valor "proxy". Se este parâmetro estiver vazio então nenhum proxy é usado.
setHttpAuth(bitmask, username, password) Define métodos de autenticação HTTP habilitados (HTTPAUTH_BASIC, HTTPAUTH_DIGEST, HTTPAUTH_NEGOTIATE, HTTPAUTH_NTLM, HTTPAUTH_NONE) no parâmetro 'bitmask'.
A marcação 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 requisição HTTP TRACE para a URL com a carga de dados opcionais 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://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