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.
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:
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):
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);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"
}
}
}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:
Saída:
2. Elementos autocontidos (<foo/>) serão convertidos como tendo valor 'null'.
Exemplo:
Entrada:
Saída:
3. Atributos vazios (com valor "") serão convertidos como tendo valor de string vazia ('').
Exemplo:
Entrada:
Saída:
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:
Saída:
5. Se um elemento de texto não tiver atributos nem filhos, ele será convertido como uma string.
Exemplo:
Entrada:
Saída:
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:
Saída:
Funções globais adicionais do JavaScript foram implementadas com Duktape:
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:
\n escapado ou não escapado em vez de quebras de linha;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').