Ова секција описује Zabbix додатке JavaScript језику који су имплементирани са Duktape-ом и подржане глобалне JavaScript функције.
Објекат Zabbix обезбеђује интеракцију са интерном функционалношћу.
Method | Description |
---|---|
log(loglevel, message) |
Уписује <message> у Zabbix лог користећи <loglevel> ниво записа (погледајте параметар конфигурационе датотеке DebugLevel). |
Пример:
Можете користити следеће псеудониме:
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)) |
Укупна величина свих евидентираних порука је ограничена на 8 MB по извршавању скрипте.
Method | Description |
---|---|
sleep(delay) |
Одлаже извршавање JavaScript-а за delay милисекунди. |
Пример (одлагање извршавања за 15 секунди):
Овај објекат инкапсулира cURL handle омогућавајући да се праве једноставни HTTP захтеви. Грешке се избацују као изузеци.
Инициализација несколико објеката HttpRequest
је ограничена количичином до 10 по извршавању скрипте.
Method | Description |
---|---|
addHeader(value) |
Додаје поље HTTP заглавља. Ово поље се користи за све следеће захтеве док се не обрише методом clearHeader() .Укупна дужина поља заглавља која се могу додати једном објекту HttpRequest ограничена је на 128 кбајта (специјални карактери и имена заглавља су укључена). |
clearHeader() |
Брише HTTP заглавље. Ако нису постављена поља заглавља, HttpRequest ће поставити Content-Type на application/json ако су подаци који се објављују у JSON формату; text/plain иначе. |
connect(url) |
Шаље HTTP CONNECT захтев на URL и враћа одговор. |
customRequest(method, url, data) |
Омогућава да се наведе било који HTTP метод у првом параметру. Шаље захтев са наведеним методом на URL са опционим подацима и враћа одговор. |
delete(url, data) |
Шаље HTTP DELETE захтев на URL са опционим подацима и враћа одговор. |
getHeaders(<asArray>) |
Враћа објекат примљених HTTP поља заглавља. Параметар asArray може бити подешен на "true" (нпр. getHeaders(true) ), "false" или бити недефинисан. Ако је постављено на "true", примљене вредности поља HTTP заглавља биће враћене као низови; ово би требало да се користи за преузимање вредности поља вишеструких заглавља истог имена.Ако није подешено или подешено на "false", примљене вредности поља HTTP заглавља биће враћене као стрингови. |
get(url, data) |
Шаље HTTP GET захтев на URL са опционим подацима и враћа одговор. |
head(url) |
Шаље HTTP HEAD захтев на URL и враћа одговор. |
options(url) |
Шаље HTTP OPTIONS захтев на URL и враћа одговор. |
patch(url, data) |
Шаље HTTP PATCH захтев на URL са опционим подацима и враћа одговор. |
put(url, data) |
Шаље HTTP PUT захтев на URL са опционим подацима и враћа одговор. |
post(url, data) |
Шаље HTTP POST захтев на URL са опционим подацима и враћа одговор. |
getStatus() |
Враћа статусни код последњег HTTP захтева. |
setProxy(proxy) |
Поставља HTTP прокси на вредност "прокси". Ако је овај параметар празан, онда се прокси не користи. |
setHttpAuth(bitmask, username, password) |
Поставља омогућене методе HTTP аутентификације (HTTPAUTH_BASIC, HTTPAUTH_DIGEST, HTTPAUTH_NEGOTIATE, HTTPAUTH_NTLM, HTTPAUTH_NONE) у параметру 'bitmask'. Ознака HTTPAUTH_NONE омогућава да се онемогући HTTP аутентификација. На пример: request.setHttpAuth(HTTPAUTH_NTLM | HTTPAUTH_BASIC, username, password) request.setHttpAuth(HTTPAUTH_NONE) |
trace(url, data) |
Шаље HTTP TRACE захтев на URL са опционим подацима корисним оптерећењем и враћа одговор. |
Пример:
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 података у предобради ставке и откривању ниског нивоа и вебхуковима.
Да би се користио XML објекат, сервер/прокси морају бити компајлирани са libxml2 подршком.
Method | Description |
---|---|
XML.query(data, expression) |
Добавља садржај чвора помоћу XPath-а. Враћа null ако чвор није пронађен. израз - XPath израз; подаци - XML подаци као стринг. |
XML.toJson(data) |
Конвертује податке из XML формата у JSON. |
XML.fromJson(object) |
Конвертује податке из JSON формата у XML. |
Пример:
Input:
<menu>
<food type = "breakfast">
<name>Chocolate</name>
<price>$5.95</price>
<description></description>
<calories>650</calories>
</food>
</menu>
{
"menu": {
"food": {
"@type": "breakfast",
"name": "Chocolate",
"price": "$5.95",
"description": null,
"calories": "650"
}
}
}
Конверзија XML-а у JSON ће бити обрађена у складу са следећим правилима (за конверзије JSON у XML примењују се обрнута правила):
1. XML атрибути ће бити конвертовани у кључеве чија имена имају префикс '@'.
Пример:
Input:
Output:
2. Елементи који се самозатварају (< foo/>) ће бити конвертовани као да имају вредност 'null'.
Пример:
Input:
Output:
3. Празни атрибути (са вредношћу "") биће конвертовани као да имају вредност празног стринга ('').
Пример:
Input:
Output:
4. Више подређених чворова са истим именом елемента биће конвертовано у један кључ који има низ вредности као вредност.
Пример:
Input:
Output:
5. Ако текстуални елемент нема атрибуте и подређене елементе, биће конвертован као стринг.
Пример:
Input:
Output:
6. Ако текстуални елемент нема подређене елементе, али има атрибуте, текстуални садржај ће бити конвертован у елемент са кључем '#text' и садржајем као вредношћу; атрибути ће бити конвертовани као што је описано у правилу серијализације 1.
Пример:
Input:
Output:
Додатне глобалне JavaScript функције су имплементиране са Duktape-ом:
try {
b64 = btoa("test string");
buffer = atob(b64);
// Имајте на уму да логика декодирања зависи од формата података бафера.
decoded = String.fromCharCode.apply(this, [].slice.call(buffer));
}
catch (error) {
return {'error.name' : error.name, 'error.message' : error.message};
}
md5(data) - израчунава MD5 хеш података
sha256(data) - израчунава SHA256 хеш података
hmac('<hash type>',key,data) - враћа HMAC хеш као хексадецимални стринг; Подржани су MD5 и SHA256 типови хеша; параметри кључа и података подржавају бинарне податке. Примери:
hmac('md5',key,data)
hmac('sha256',key,data)
sign(hash,key,data) - враћа израчунати потпис (RSA потпис са SHA-256) као стринг, где је:
hash - дозвољено је само 'sha256', иначе се јавља грешка;
key - приватни кључ. Требало би да одговара стандарду PKCS#1 или PKCS#8. Кључ се може доставити у различитим облицима:
Кључ се такође може учитати из корисничког макроа/тајног макроа/трезора.
подаци - подаци који ће бити потписани. То може бити стринг (бинарни подаци су такође подржани) или бафер (Uint8Array/ArrayBuffer).
OpenSSL или GnuTLS се користи за израчунавање потписа. Ако је Zabbix направљен без било које од ових библиотека за енкрипцију, појавиће се грешка ('missing OpenSSL or GnuTLS library').