Aquesta secció descriu les addicions de Zabbix al llenguatge JavaScript implementats amb Duktape i les funcions globals de JavaScript admeses.
L'objecte Zabbix proporciona interacció amb la funcionalitat interna de Zabbix.
Mètode | Descripció |
---|---|
log(loglevel, message) |
Escriu <missatge> al registre de Zabbix emprant el nivell de registre <loglevel> (veieu la configuració de DebugLevel al fitxer de configuració). |
Exemple:
Podeu emprar els àlies següents:
Àlies | Àlies a |
---|---|
console.log(objecte) | Zabbix.log(4, JSON.stringify(objecte)) |
console.warn(objecte) | Zabbix.log(3, JSON.stringify(objecte)) |
console.error(objecte) | Zabbix.log(2, JSON.stringify(objecte)) |
La mida total de tots els missatges registrats és limitada a 8 Mo per execució de l'script.
Mètode | Descripció |
---|---|
sleep(delay) |
Endarrereix l'execució de JavaScript delay mil·lisegons. |
Exemple (execució endarrerida durant 15 segons):
Aquest objecte encapsula el maneig cURL que permet fer peticions HTTP senzilles. Els errors es llancen com a excepcions.
::: nota important La inicialització de diversos objectes HttpRequest
és limitada a 10 per execució de l'script. :::
Mètode | Descripció |
---|---|
addHeader(name, value) |
Afegeix un camp de capçalera HTTP. Aquest camp s'empra per a totes les peticions següents fins que s'esborri amb el mètode clearHeader() .La longitud total dels camps de capçalera que es poden afegir a un sol objecte HttpRequest és limitada a 128 Koctets (caràcters especials i noms de capçalera inclosos). |
clearHeader() |
Esborra la capçalera HTTP. Si no s'estableix cap camp de capçalera, HttpRequest establirà Content-Type a application/json si les dades que es publiquen tenen format JSON; text/llaç en cas contrari. |
connect(url) |
Envia la petició HTTP CONNECT a l'URL i retorna la resposta. |
customRequest(method, url, data) |
Permet especificar qualsevol mètode HTTP al primer paràmetre. Envia la petició de mètode a l'URL amb la càrrega útil opcional data i retorna la resposta. |
delete(url, data) |
Envia la petició HTTP DELETE a l'URL amb una càrrega útil opcional data i retorna la resposta. |
getHeaders(<asArray>) |
Retorna l'objecte dels camps de capçalera HTTP rebuts. El paràmetre asArray es pot establir com a "cert" (per exemple, getHeaders(true) ), "fals" o no estar definit. Si es defineix com a "cert", els valors dels camps de capçalera HTTP rebuts es retornaran com a matrius; així s'ha d'emprar per recuperar els valors de camp de diverses capçaleres del mateix nom.Si no s'estableix o s'estableix com a "fals", els valors dels camps de la capçalera HTTP rebuts es retornaran com a cadenes. |
get(url, data) |
Envia la petició HTTP GET a l'URL amb una càrrega útil opcional data i retorna la resposta. |
head(url) |
Envia la petició HTTP HEAD a l'URL i retorna la resposta. |
options(url) |
Envia la petició HTTP OPTIONS a l'URL i retorna la resposta. |
patch(url, data) |
Envia la petició HTTP PATCH a l'URL amb una càrrega útil opcional data i retorna la resposta. |
put(url, dades) |
Envia la petició HTTP PUT a l'URL amb una càrrega útil opcional data i retorna la resposta. |
post(url, data) |
Envia la petició HTTP POST a l'URL amb una càrrega útil opcional data i retorna la resposta. |
getStatus() |
Retorna el codi d'estat de la darrera petició HTTP. |
setProxy(proxy) |
Defineix el proxy HTTP al valor "proxy". Si aquest paràmetre és buit, no s'empra cap proxy. |
setHttpAuth(bitmask, username, password) |
Defineix els mètodes d'autenticació HTTP activats (HTTPAUTH_BASIC, HTTPAUTH_DIGEST, HTTPAUTH_NEGOTIATE, HTTPAUTH_NTLM, HTTPAUTH_NONE) al paràmetre 'bitmask'. L'HTTPAUTH. _NONE permet desactivar l'autenticació HTTP. Exemples: request.setHttpAuth(HTTPAUTH_NTLM \| HTTPAUTH_BASIC, nom d'usuari, mot de pas) request.setHttpAuth(HTTPAUTH_NONE) |
trace(url, data) |
Envia la petició HTTP TRACE a l'URL amb una càrrega útil opcional data i retorna la resposta. |
Exemple:
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);
L'objecte XML permet el processament de dades XML en preprocessament de descoberta d'elements de baix nivell i webhooks.
Per emprar l'objecte XML, el servidor/proxy s'ha de compilar amb suport libxml2.
Mètode | Descripció |
---|---|
XML.query(data, expression) |
Recuperar el contingut del node mitjançant XPath. Retorna null si no es troba el node. expressió - una expressió XPath; dades - dades XML com a cadena. |
XML.toJson(data) |
Converteix les dades en format XML a JSON. |
XML.fromJson(object) |
Converteix les dades en format JSON a XML. |
Exemple :
Entrada:
<menu>
<food type = "breakfast">
<name>Chocolate</name>
<price>$5.95</price>
<description></description>
<calories>650</calories>
</food>
</menu>
Sortida:
{
"menu": {
"food": {
"@type": "breakfast",
"name": "Chocolate",
"price": "$5.95",
"description": null,
"calories": "650"
}
}
}
La conversió de XML a JSON es processarà d'acord amb les regles següents (per a les conversions de JSON a XML, s'apliquen regles inverses):
1. Els atributs XML es convertiran en claus els noms de les quals aniran precedits per '@'.
Exemple:
Entrada:
Sortida:
2. Els elements de tancament automàtic (<foo/>) es convertiran com a valor "nul".
Exemple:
Entrada:
Sortida:
3. Els atributs buits (amb el valor "") es convertiran com a valor de cadena buida ('').
Exemple:
Entrada:
Sortida:
4. Diversos nodes secundaris amb el mateix nom d'element es convertiran en una única clau que tingui una matriu de valors com a valor.
Exemple:
Entrada:
Sortida:
5. Si un element de text no té ni atribut ni elements fills, es convertirà a cadena.
Exemple:
Entrada:
Sortida:
6. Si un element de text no té fills, però té atributs: el contingut del text es convertirà a un element amb la clau '#text' i el contingut com a valor; els atributs es convertiran tal com es descriu a la regla de serialització 1.
Exemple:
Entrada:
Sortida:
S'han afegit funcions JavaScript globals addicionals amb Duktape:
try {
b64 = btoa("test string");
buffer = atob(b64);
// Fixeu-vos que la lògica de descodificació depen del format de les dades del buffer.
decoded = String.fromCharCode.apply(this, [].slice.call(buffer));
}
catch (error) {
return {'error.name' : error.name, 'error.message' : error.message};
}
md5(dades) - calcula el hash MD5 d'una cadena
sha256(dades) - calcula el hash SHA256 d'una cadena
mac('<tipus hash>',clau,dades) - retorna el hash HMAC com una cadena en format hexadecimal; S'admeten els tipus hash MD5 i SHA256; Els paràmetres clau i de dades admeten dades binàries. Exemples:
hmac('md5',clau,dades)
hmac('sha256',clau,dades)
sign(hash,clau,dades) - retorna la signatura calculada (signatura RSA amb SHA-256) com a cadena, on:
hash - només es permet 'sha256', en cas contrari es genera un error;
clau - la clau privada. Ha de correspondre a l'estàndard PKCS#1 o PKCS#8. La clau es pot proporcionar de diferents formes:
La clau també es pot carregar des d'una macro d'usuari/macro/macro secreta.
dades - les dades que es signaran. Pot ser una cadena (també s'admeten dades binàries) o una memòria intermèdia (Uint8Array/ArrayBuffer).
OpenSSL o GnuTLS s'empren per calcular signatures. Si Zabbix s'ha compilat sense cap d'aquestes biblioteques de xifrat, es generarà un error ('Manca la biblioteca OpenSSL o GnuTLS').
Aquesta funció és compatible des de Zabbix 6.4.1.