Овај одељак пружа детаље о предобради JavaScript-ом.
JavaScript предобрада се врши позивањем JavaScript функције са а један параметар 'вредност' и тело функције које даје корисник. Резултат корака предобрадe је вредност коју враћа ова функција, фор на пример, да бисте извршили конверзију Fahrenheit у Celsius, унесите:
у параметрима за предобраду у JavaScript-у, који ће бити умотани у а JavaScript функција по серверу:
Улазни параметар 'вредност' се увек прослеђује као стринг. Повратак вредност се аутоматски приморава на стринг преко ToString() методе (ако је не успе, онда се грешка враћа као вредност низа), са неколико изузеци:
Грешке се могу вратити бацањем вредности/објеката (обично или стрингови или објекти Error).
на пример:
Свака скрипта има временско ограничење за извршавање од 10 секунди (у зависности од скрипте, може потрајати дуже да се временско ограничење активира); прекорачење тога ће повратна грешка. Примењује се ограничење гомиле од 512 мегабајта.
Бајт-код корака предобрадe JavaScript се кешује и поново користи када се корак се примењује следећи пут. Све промене корака предобрадe ставке ће проузроковати да се кеширана скрипта ресетује и поново компајлира касније.
Узастопни кварови током рада (3 у низу) ће узроковати да мотор буде у раду поново иницијализовано да би се ублажила могућност да један скрипт разбије окружење за извршавање за следеће скрипте (ова радња се евидентира са DebugLevel 4 и више).
JavaScript предобрада је имплементиранa помоћу Duktape JavaScript мотора.
Такође погледајте: Додатни 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"
}
]
Вредност коју враћа функција:
Конвертујте вредност примљену од ставке Zabbix агента web.page.get (нпр. web.page.get[http://127.0.0.1:80/server-status?auto]) у JSON објекат.
// Претвори Apache статус у JSON
// Поделите вредност на поднизове и ставите ове поднизове у низ
var lines = value.split('\n');
// Креирајте празан објекат "излаз"
var output = {};
// Креирајте објекат "радници" са унапред дефинисаним својствима
var workers = {
'_': 0, 'S': 0, 'R': 0, 'W': 0,
'K': 0, 'D': 0, 'C': 0, 'L': 0,
'G': 0, 'I': 0, '.': 0
};
// Додајте подстрингове из низа "линије" у објекат "излаз" као својства (парови кључ-вредност)
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]);
}
}
// Мултиверзија метрика
output.ServerUptimeSeconds = output.ServerUptimeSeconds || output.Uptime;
output.ServerVersion = output.ServerVersion || output.Server;
// Рашчлањује својство "Scoreboard" да бисте добили број радника
if (typeof output.Scoreboard === 'string') {
for (var i = 0; i < output.Scoreboard.length; i++) {
var char = output.Scoreboard[i];
workers[char]++;
}
}
// Додајте податке радника у објекат "излаз".
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['.']
};
// Врати JSON стринг
return JSON.stringify(output);
Вредност коју прихвата функција:
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__..............................................................................................................................................
Вредност коју враћа функција:
{
"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
}
}