Esta seção descreve as adições à linguagem JavaScript implementadas com Duktape e funções JavaScript globais suportadas.
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:
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):
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);
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"
}
}
}
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):
Saída (output):
2. Elementos com auto fechamento (<foo/>) serão convertidos como tendo valor 'null'.
Exemplo:
Entrada (input):
Saída (output):
3. Atributos vazios (com valor "") serão convertidos como tendo um valor string vazia ('').
Exemplo:
Entrada (input):
Saída (output):
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):
Saída (output):
5. Se um elemento texto não tem atributos e filhos, ele será convertido como uma string.
Exemplo:
Entrada (input):
Saída (output):
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):
Saída (output):
Funções JavaScript globais adicionais foram implementadas com Duktape:
try {
b64 = btoa("utf8 string");
utf8 = atob(b64);
}
catch (error) {
return {'error.name' : error.name, 'error.message' : error.message}
}