1 Papildu JavaScript objekti
Pārskats
Šajā sadaļā ir aprakstīti Zabbix papildinājumi JavaScript valodai, kas ieviesti ar Duktape, un atbalstītās globālās JavaScript funkcijas.
Neizmantojiet nedeklarētus piešķīrumus priekšapstrādes JavaScript kodā.
Izmantojiet var, lai deklarētu lokālos mainīgos.
Iebūvētie objekti
Zabbix
Zabbix objekts nodrošina mijiedarbību ar Zabbix iekšējo funkcionalitāti.
| Method | Description |
|---|---|
log(loglevel, message) |
Ieraksta <message> Zabbix žurnālā, izmantojot <loglevel> žurnāla līmeni (skatiet konfigurācijas faila parametru DebugLevel). |
Piemērs:
Zabbix.log(3, "this is a log entry written with 'Warning' log level")
Varat izmantot šādus aizstājvārdus:
| Alias | Alias to |
|---|---|
| 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)) |
Visu reģistrēto ziņojumu kopējais lielums ir ierobežots līdz 8 MB vienai skripta izpildei.
| Method | Description |
|---|---|
sleep(delay) |
Aizkavē JavaScript izpildi par delay milisekundēm. |
Piemērs (aizkavē izpildi par 15 sekundēm):
Zabbix.sleep(15000)
HttpRequest
Šis objekts ietver cURL apdarinātāju, ļaujot veikt vienkāršus HTTP pieprasījumus. Kļūdas tiek izmestas kā izņēmumi.
Vairāku HttpRequest objektu inicializēšana vienas skripta izpildes laikā ir ierobežota līdz 10.
| Method | Description |
|---|---|
addHeader(value) |
Pievieno HTTP galvenes lauku. Šis lauks tiek izmantots visiem turpmākajiem pieprasījumiem, līdz tas tiek notīrīts ar metodi clearHeader().Galvenes lauku kopējais garums, ko var pievienot vienam HttpRequest objektam, ir ierobežots līdz 128 Kbaitiem (ieskaitot speciālās rakstzīmes un galveņu nosaukumus). |
clearHeader() |
Notīra HTTP galveni. Ja nav iestatīts neviens galvenes lauks, HttpRequest iestatīs Content-Type uz application/json, ja nosūtāmie dati ir JSON formātā; pretējā gadījumā uz text/plain. |
connect(url) |
Nosūta HTTP CONNECT pieprasījumu uz URL un atgriež atbildi. |
customRequest(method, url, data) |
Ļauj pirmajā parametrā norādīt jebkuru HTTP metodi. Nosūta metodes pieprasījumu uz URL ar neobligātu data datu slodzi un atgriež atbildi. |
delete(url, data) |
Nosūta HTTP DELETE pieprasījumu uz URL ar neobligātu data datu slodzi un atgriež atbildi. |
getHeaders(<asArray>) |
Atgriež saņemto HTTP galveņu lauku objektu. Parametram asArray var iestatīt vērtību "true" (piemēram, getHeaders(true)), "false", vai arī to var nenorādīt. Ja iestatīta vērtība "true", saņemto HTTP galveņu lauku vērtības tiek atgrieztas kā masīvi; tas jāizmanto, lai izgūtu vairāku galveņu ar vienādu nosaukumu lauku vērtības.Ja parametrs nav norādīts vai tam iestatīta vērtība "false", saņemto HTTP galveņu lauku vērtības tiek atgrieztas kā virknes. |
get(url, data) |
Nosūta HTTP GET pieprasījumu uz URL ar neobligātu data datu slodzi un atgriež atbildi. |
head(url) |
Nosūta HTTP HEAD pieprasījumu uz URL un atgriež atbildi. |
options(url) |
Nosūta HTTP OPTIONS pieprasījumu uz URL un atgriež atbildi. |
patch(url, data) |
Nosūta HTTP PATCH pieprasījumu uz URL ar neobligātu data datu slodzi un atgriež atbildi. |
put(url, data) |
Nosūta HTTP PUT pieprasījumu uz URL ar neobligātu data datu slodzi un atgriež atbildi. |
post(url, data) |
Nosūta HTTP POST pieprasījumu uz URL ar neobligātu data datu slodzi un atgriež atbildi. |
getStatus() |
Atgriež pēdējā HTTP pieprasījuma statusa kodu. |
setProxy(proxy) |
Iestata HTTP starpniekserveri uz vērtību "proxy". Ja šis parametrs ir tukšs, starpniekserveris netiek izmantots. |
setHttpAuth(bitmask, username, password) |
Parametrā 'bitmask' iestata iespējotās HTTP autentifikācijas metodes (HTTPAUTH_BASIC, HTTPAUTH_DIGEST, HTTPAUTH_NEGOTIATE, HTTPAUTH_NTLM, HTTPAUTH_NONE). Karodziņš HTTPAUTH_NONE ļauj atspējot HTTP autentifikāciju. Piemēri: request.setHttpAuth(HTTPAUTH_NTLM | HTTPAUTH_BASIC, username, password)request.setHttpAuth(HTTPAUTH_NONE) |
trace(url, data) |
Nosūta HTTP TRACE pieprasījumu uz URL ar neobligātu data datu slodzi un atgriež atbildi. |
Piemērs:
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
XML objekts ļauj apstrādāt XML datus vienuma un zema līmeņa atklāšanas priekšapstrādē, kā arī webhook.
Lai izmantotu XML objektu, serverim/starpniekserverim jābūt kompilētam ar libxml2 atbalstu.
| Method | Description |
|---|---|
XML.query(data, expression) |
Iegūst mezgla saturu, izmantojot XPath. Atgriež null, ja mezgls netiek atrasts. expression - XPath izteiksme; data - XML dati virknes formā. |
XML.toJson(data) |
Pārveido datus XML formātā uz JSON. |
XML.fromJson(object) |
Pārveido datus JSON formātā uz XML. |
Piemērs:
Ievade:
<menu>
<food type = "breakfast">
<name>Chocolate</name>
<price>$5.95</price>
<description></description>
<calories>650</calories>
</food>
</menu>
Izvade:
{
"menu": {
"food": {
"@type": "breakfast",
"name": "Chocolate",
"price": "$5.95",
"description": null,
"calories": "650"
}
}
}
Serializācijas noteikumi
XML pārveidošana uz JSON tiks apstrādāta saskaņā ar šādiem noteikumiem (JSON pārveidošanai uz XML tiek piemēroti apgriezti noteikumi):
1. XML atribūti tiks pārveidoti par atslēgām, kuru nosaukumiem priekšā ir pievienots '@'.
Piemērs:
Ievade:
<xml foo="FOO">
<bar>
<baz>BAZ</baz>
</bar>
</xml>
Izvade:
{
"xml": {
"@foo": "FOO",
"bar": {
"baz": "BAZ"
}
}
}
2. Pašaizverošie elementi (<foo/>) tiks pārveidoti kā tādi, kuriem ir 'null' vērtība.
Piemērs:
Ievade:
<xml>
<foo/>
</xml>
Izvade:
{
"xml": {
"foo": null
}
}
3. Tukši atribūti (ar "" vērtību) tiks pārveidoti kā tādi, kuriem ir tukšas virknes ('') vērtība.
Piemērs:
Ievade:
<xml>
<foo bar="" />
</xml>
Izvade:
{
"xml": {
"foo": {
"@bar": ""
}
}
}
4. Vairāki bērnelementi ar vienādu elementa nosaukumu tiks pārveidoti par vienu atslēgu, kuras vērtība ir vērtību masīvs.
Piemērs:
Ievade:
<xml>
<foo>BAR</foo>
<foo>BAZ</foo>
<foo>QUX</foo>
</xml>
Izvade:
{
"xml": {
"foo": ["BAR", "BAZ", "QUX"]
}
}
5. Ja teksta elementam nav atribūtu un nav bērnelementu, tas tiks pārveidots par virkni.
Piemērs:
Ievade:
<xml>
<foo>BAZ</foo>
</xml>
Izvade:
{
"xml": {
"foo": "BAZ"
}
}
6. Ja teksta elementam nav bērnelementu, bet tam ir atribūti, teksta saturs tiks pārveidots par elementu ar atslēgu '#text' un saturu kā vērtību; atribūti tiks pārveidoti, kā aprakstīts 1. serializācijas noteikumā.
Piemērs:
Ievade:
<xml>
<foo bar="BAR">
BAZ
</foo>
</xml>
Izvade:
{
"xml": {
"foo": {
"@bar": "BAR",
"#text": "BAZ"
}
}
}
Globālās JavaScript funkcijas
Ar Duktape ir ieviestas papildu globālās JavaScript funkcijas:
btoa(data)— kodē datus base64 virknē.atob(base64_string)— dekodē base64 virkni kā Uint8Array buferi.
try {
b64 = btoa("test string");
buffer = atob(b64);
// Ņemiet vērā, ka dekodēšanas loģika ir atkarīga no bufera datu formāta.
decoded = String.fromCharCode.apply(this, [].slice.call(buffer));
}
catch (error) {
return {'error.name' : error.name, 'error.message' : error.message};
}
md5(data)— aprēķina datu MD5 jaucējvērtību.sha256(data)— aprēķina datu SHA256 jaucējvērtību.-
hmac('<hash type>',key,data)— atgriež HMAC jaucējvērtību kā heksadecimāli formatētu virkni; kāhash typetiek atbalstītimd5unsha256; parametrikeyundataatbalsta bināros datus.Piemēri:
hmac('md5',key,data)hmac('sha256',key,data)
-
sign(hash,key,data)— atgriež aprēķināto parakstu (RSA paraksts ar SHA-256) kā virkni, kur:
hash — ir atļauts tikaisha256, pretējā gadījumā tiks izraisīta kļūda.
key — privātā atslēga. Tai jāatbilst PKCS#1 vai PKCS#8 standartam. Atslēgu var norādīt dažādās formās:- ar atstarpēm jaunu rindu vietā
- ar ekrānētu vai neekrānētu
\njaunu rindu vietā - bez jebkādām jaunām rindām kā vienas rindas virkni
- kā JSON formatētu virkni
Atslēgu var arī ielādēt no lietotāja makrosa/secret macro/vault.
data — dati, kas tiks parakstīti. Tā var būt virkne (tiek atbalstīti arī binārie dati) vai buferis (Uint8Array/ArrayBuffer).
Piemērs:
sign('sha256',key,data)
Parakstu aprēķināšanai tiek izmantots OpenSSL vai GnuTLS. Ja Zabbix ir būvēts bez kādas no šīm šifrēšanas bibliotēkām, tiks izraisīta kļūda ('missing OpenSSL or GnuTLS library').