Овај одељак пружа детаље о предобради JavaScript-ом.
Претходна обрада ЈаваСкрипта се врши позивањем ЈаваСкрипт функције са једним параметром 'вредност' и телом функције које је обезбедио корисник. Резултат корака претходне обраде је вредност коју враћа ова функција, на пример, да бисте извршили конверзију Фаренхајта у Целзијусе, унесите:
return (value - 32) * 5 / 9
у параметре претходне обраде ЈаваСкрипта, који ће бити упаковани у ЈаваСкрипт функцију од стране сервера:
Улазни параметар 'вредност' се увек прослеђује као стринг. Враћена вредност се аутоматски претвара у стринг путем методе toString() (ако не успе, онда се грешка враћа као вредност стринга), уз неколико изузетака:
Грешке се могу вратити избацивањем вредности/објеката (обично или стрингова или објеката грешака).
На пример:
Свака скрипта има време чекања за извршавање од 10 секунди (у зависности од скрипте, може потрајати дуже да се активира време чекања); његово прекорачење ће вратити грешку. Примењује се ограничење хипа од 512 мегабајта.
Бајткод корака претходне обраде JavaScript-а се кешира и поново користи када се корак примени следећи пут. Било какве промене у корацима претходне обраде ставке узроковаће ресетовање кеширане скрипте и њено касније поновно компајлирање.
Узастопни кварови током извршавања (3 заредом) ће узроковати да се механизам поновно иницијализује како би се ублажила могућност да једна скрипта поквари окружење за извршавање следећих скрипти (ова радња се бележи са DebugLevel 4 и вишим).
Претходна обрада JavaScript је имплементирана помоћу JavaScript мотора Duktape.
Погледајте такође: Додатни JavaScript објекти и глобалне функције
Могуће је користити корисничке макрое у JavaScript коду. Ако сценарио садржи корисничке макрое, те макрое пре решава сервер/прокси извршавање одређених корака предобраде. Имајте на уму да приликом тестирања кораке предобраде у kориснички интерфејс, вредности макроа неће бити повучене и потребно је ручно унети.
Контекст се занемарује када се макро замени његовом вредношћу. Вредност макроа је уметнута у код какав јесте, није могуће додати додатно избегавање пре постављања вредности у JavaScript код. Имајте на уму да то у неким случајевима може изазвати грешке у JavaScript-у.
У примеру испод, ако примљена вредност премашује {$THRESHOLD} макро вредност, уместо тога ће бити враћена гранична вредност (ако је присутна):
var threshold = '{$THRESHOLD}';
return (!isNaN(threshold) && value > threshold) ? threshold : value;
Следећи примери илуструју како можете да користите JavaScript предобраду.
Сваки пример садржи кратак опис, тело функције за параметре предобраде JavaScript-а и резултат корака пре обраде – вредност коју враћа функција.
Претворите број "2.62128e+07" из научне нотације у цео број.
Вредност коју враћа функција: 26212800.
Претворите бинарни број "11010010" у децимални број.
Вредност коју враћа функција: 210.
Заокружите број "18.2345" на 2 цифре.
Вредност коју враћа функција: 18.23.
Пребројите број слова у низу "Zabbix".
Вредност коју враћа функција: 6.
Добијте преостало време (у секундама) до датума истека сертификата (Feb 12 12:33:56 2022 GMT).
var split = value.split(' '),
MONTHS_LIST = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
month_index = ('0' + (MONTHS_LIST.indexOf(split[0]) + 1)).slice(-2),
ISOdate = split[3] + '-' + month_index + '-' + split[1] + 'T' + split[2],
now = Date.now();
return parseInt((Date.parse(ISOdate) - now) / 1000);
Вредност коју враћа функција: 44380233.
Измените JSON структуру података уклањањем свих својстава са кључем "data_size"
или "index_size"
.
var obj=JSON.parse(value);
for (i = 0; i < Object.keys(obj).length; i++) {
delete obj[i]["data_size"];
delete obj[i]["index_size"];
}
return JSON.stringify(obj)
Вредност коју прихвата функција:
[
{
"table_name":"history",
"data_size":"326.05",
"index_size":"174.34"
},
{
"table_name":"history_log",
"data_size":"6.02",
"index_size":"3.45"
}
]
Вредност коју враћа функција:
Convert the value received from a web.page.get Zabbix agent item (e.g., web.page.get[http://127.0.0.1:80/server-status?auto]) to a JSON object.
// Convert Apache status to JSON
// Split the value into substrings and put these substrings into an array
var lines = value.split('\n');
// Create an empty object "output"
var output = {};
// Create an object "workers" with predefined properties
var workers = {
'_': 0, 'S': 0, 'R': 0, 'W': 0,
'K': 0, 'D': 0, 'C': 0, 'L': 0,
'G': 0, 'I': 0, '.': 0
};
// Add the substrings from the "lines" array to the "output" object as properties (key-value pairs)
for (var i = 0; i < lines.length; i++) {
var line = lines[i].match(/([A-z0-9 ]+): (.*)/);
if (line !== null) {
output[line[1]] = isNaN(line[2]) ? line[2] : Number(line[2]);
}
}
// Multiversion metrics
output.ServerUptimeSeconds = output.ServerUptimeSeconds || output.Uptime;
output.ServerVersion = output.ServerVersion || output.Server;
// Parse "Scoreboard" property to get the worker count
if (typeof output.Scoreboard === 'string') {
for (var i = 0; i < output.Scoreboard.length; i++) {
var char = output.Scoreboard[i];
workers[char]++;
}
}
// Add worker data to the "output" object
output.Workers = {
waiting: workers['_'], starting: workers['S'], reading: workers['R'],
sending: workers['W'], keepalive: workers['K'], dnslookup: workers['D'],
closing: workers['C'], logging: workers['L'], finishing: workers['G'],
cleanup: workers['I'], slot: workers['.']
};
// Return JSON string
return JSON.stringify(output);
Value accepted by the function:
HTTP/1.1 200 OK
Date: Mon, 27 Mar 2023 11:08:39 GMT
Server: Apache/2.4.52 (Ubuntu)
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 405
Content-Type: text/plain; charset=ISO-8859-1
127.0.0.1
ServerVersion: Apache/2.4.52 (Ubuntu)
ServerMPM: prefork
Server Built: 2023-03-08T17:32:01
CurrentTime: Monday, 27-Mar-2023 14:08:39 EEST
RestartTime: Monday, 27-Mar-2023 12:19:59 EEST
ParentServerConfigGeneration: 1
ParentServerMPMGeneration: 0
ServerUptimeSeconds: 6520
ServerUptime: 1 hour 48 minutes 40 seconds
Load1: 0.56
Load5: 0.33
Load15: 0.28
Total Accesses: 2476
Total kBytes: 8370
Total Duration: 52718
CPUUser: 8.16
CPUSystem: 3.44
CPUChildrenUser: 0
CPUChildrenSystem: 0
CPULoad: .177914
Uptime: 6520
ReqPerSec: .379755
BytesPerSec: 3461.58
BytesPerReq: 3461.58
DurationPerReq: 21.2916
BusyWorkers: 2
IdleWorkers: 6
Scoreboard: ____KW__..............................................................................................................................................
Value returned by the function:
{
"Date": "Mon, 27 Mar 2023 11:08:39 GMT",
"Server": "Apache/2.4.52 (Ubuntu)",
"Vary": "Accept-Encoding",
"Encoding": "gzip",
"Length": 405,
"Type": "text/plain; charset=ISO-8859-1",
"ServerVersion": "Apache/2.4.52 (Ubuntu)",
"ServerMPM": "prefork",
"Server Built": "2023-03-08T17:32:01",
"CurrentTime": "Monday, 27-Mar-2023 14:08:39 EEST",
"RestartTime": "Monday, 27-Mar-2023 12:19:59 EEST",
"ParentServerConfigGeneration": 1,
"ParentServerMPMGeneration": 0,
"ServerUptimeSeconds": 6520,
"ServerUptime": "1 hour 48 minutes 40 seconds",
"Load1": 0.56,
"Load5": 0.33,
"Load15": 0.28,
"Total Accesses": 2476,
"Total kBytes": 8370,
"Total Duration": 52718,
"CPUUser": 8.16,
"CPUSystem": 3.44,
"CPUChildrenUser": 0,
"CPUChildrenSystem": 0,
"CPULoad": 0.177914,
"Uptime": 6520,
"ReqPerSec": 0.379755,
"BytesPerSec": 1314.55,
"BytesPerReq": 3461.58,
"DurationPerReq": 21.2916,
"BusyWorkers": 2,
"IdleWorkers": 6,
"Scoreboard": "____KW__..............................................................................................................................................",
"Workers": {
"waiting": 6,
"starting": 0,
"reading": 0,
"sending": 1,
"keepalive": 1,
"dnslookup": 0,
"closing": 0,
"logging": 0,
"finishing": 0,
"cleanup": 0,
"slot": 142
}
}