Sixazulula izinkinga ezingokoqobo ku-Zabbix sisebenzisa i-JavaScript

Sixazulula izinkinga ezingokoqobo ku-Zabbix sisebenzisa i-JavaScript
Tikhon Uskov, unjiniyela weqembu lokuhlanganisa i-Zabbix

I-Zabbix iyinkundla yokwenza ngokwezifiso esetshenziselwa ukuqapha noma yiluphi uhlobo lwedatha. Kusukela kuzinguqulo zakuqala ze-Zabbix, abalawuli abaqaphayo babe nekhono lokusebenzisa imibhalo ehlukahlukene Izenzo amasheke kumanodi enethiwekhi okuqondiwe. Ngaso leso sikhathi, ukwethulwa kwemibhalo kuholele ebunzimeni obuningi, okuhlanganisa nesidingo sokusekela imibhalo, ukulethwa kwabo ezindaweni zokuxhumana kanye nama-proxies, kanye nokusekelwa kwezinguqulo ezahlukene.

JavaScript for Zabbix

Ngo-Ephreli 2019, i-Zabbix 4.2 yethulwa ngokucutshungulwa kwangaphambili kwe-JavaScript. Abantu abaningi bawuthakasela umqondo wokushiya imibhalo yokubhala eyisa idatha ndawana thize, bayigaye futhi bayinikeze ngefomethi uZabbix ayiqondayo, futhi enze amasheke alula azothola idatha engakulungele ukugcinwa nokucutshungulwa yi-Zabbix, futhi bese ucubungula lokhu kusakazwa kwedatha usebenzisa amathuluzi e-Zabbix ne-JavaScript. Ngokuhambisana nokutholwa kwezinga eliphansi nezinto ezincikile ezivele ku-Zabbix 3.4, sithole umqondo ovumelana nezimo wokuhlunga nokuphatha idatha etholiwe.

Ku-Zabbix 4.4, njengokuqhubeka okunengqondo kokucubungula ngaphambilini ku-JavaScript, kuvele indlela entsha yokwazisa - i-Webhook, engasetshenziswa ukuhlanganisa kalula izaziso ze-Zabbix nezinhlelo zokusebenza zezinkampani zangaphandle.

I-JavaScript kanye ne-Duktapes

Kungani kukhethwe i-JavaScript ne-Duktape? Kucatshangelwe izinketho ezahlukahlukene zezilimi nezinjini:

  • I-Lua - Lua 5.1
  • Lua - LuaJIT
  • I-Javascript - Duktape
  • Javascript - JerryScript
  • I-Python Eshumekiwe
  • I-Perl eshumekiwe

Imibandela yokukhetha eyinhloko kwakuwukusakazeka, ukunethezeka kokuhlanganiswa kwenjini emkhiqizweni, ukusetshenziswa kwezinsiza eziphansi kanye nokusebenza kwenjini iyonke, kanye nokuphepha kokwethulwa kwekhodi kulolu limi ekuqashweni. Ngokusekelwe ekuhlanganiseni kwezinkomba, iJavaScript iwine ngenjini yeDuktape.

Sixazulula izinkinga ezingokoqobo ku-Zabbix sisebenzisa i-JavaScript

Imibandela yokukhetha nokuhlolwa kokusebenza

Izici ze-Duktape:

- Standard I-ECMAScript E5/E5.1
- Amamojula we-Zabbix we-Duktape:

  • I-Zabbix.log() - ikuvumela ukuthi ubhale imilayezo enamazinga ahlukene emininingwane ngokuqondile kulogi Yeseva ye-Zabbix, okwenza kube nokwenzeka ukuhlobanisa amaphutha, isibonelo, ku-Webhook, nesimo seseva.
  • I-CurlHttpRequest() - ikuvumela ukuthi wenze izicelo ze-HTTP kunethiwekhi, lapho ukusetshenziswa kwe-Webhook kusekelwe khona.
  • i-atob() kanye ne-btoa() - ikuvumela ukuthi ufake ikhodi futhi uhlukanise izintambo ngefomethi ye-Base64.

QAPHELA. I-Duktape ithobelana namazinga e-ACME. I-Zabbix isebenzisa inguqulo ka-2015 yeskripthi. Izinguquko ezilandelayo zincane, ngakho azinakwa..

Umlingo weJavaScript

Wonke umlingo we-JavaScript usekuthayipheni okuguquguqukayo kanye nohlobo lokusakaza: iyunithi yezinhlamvu, izinombolo, kanye ne-boolean.

Lokhu kusho ukuthi akudingekile ukumemezela kusengaphambili ukuthi hlobo luni oluguquguqukayo okufanele lubuyisele inani.

Emisebenzini yezibalo, amanani abuyiswe ama-opharetha omsebenzi aguqulwa abe izinombolo. Okuhlukile emisebenzini enjalo ukungezwa, ngoba uma okungenani owodwa wemigomo kuwuchungechunge, ukuguqulwa kweyunithi yezinhlamvu kusetshenziswa kuyo yonke imigomo.

QAPHELA. Izindlela ezinesibopho sokuguqulwa okunjalo zivame ukusetshenziswa kuma-prototypes angumzali wento, inaniOf ΠΈ kuString. inaniOf kubizwa ngesikhathi sokuguqulwa kwezinombolo futhi njalo ngaphambi kwendlela kuString. Indlela inaniOf kufanele ibuyisele amanani akudala, ngaphandle kwalokho umphumela wayo uzitshwa.

Indlela ibizwa ngokuthi entweni valueOF. Uma ingatholakali noma ingabuyisi inani lakudala, indlela ibizwa kuString. Uma indlela kuString ayitholakali, iyacinga inaniOf ku-prototype yento, futhi yonke into iyaphindwa kuze kube yilapho ukucutshungulwa kwenani sekuqediwe futhi wonke amanani enkulumo aphonswa ohlotsheni olufanayo.. Uma into isebenzisa indlela kuString, okubuyisela inani lakudala, bese kuba yilo elisetshenziselwa ukuguqulwa kweyunithi yezinhlamvu. Nokho, umphumela wokusebenzisa le ndlela awukona ngempela uchungechunge.

Isibonelo, uma okwento 'into' indlela ichazwa kuString,

`var obj = { toString() { return "200" }}` 

indlela kuString ibuyisela intambo, futhi lapho sengeza intambo enenombolo, sithola intambo enamathiselwe:

`obj + 1 // '2001'` 

`obj + 'a' // β€˜200a'`

Kodwa uma ubhala kabusha kuString, ukuze indlela ibuyisele inombolo, lapho into yengezwa, ukusebenza kwezibalo ngokuguqulwa kwezinombolo kuzokwenziwa futhi umphumela wokwengezwa kwezibalo uzotholakala.

`var obj = { toString() { return 200 }}` 

`obj + 1 // '2001'`

Kulokhu, uma senza ukwengeza ngentambo, ukuguqulwa kwentambo kwenziwa, futhi sithola intambo enamathiselwe.

`obj + 'a' // β€˜200a'`

Lesi yisizathu senani elikhulu lamaphutha abasebenzisi abasaqalayo be-JavaScript.

Indlela kuString ungabhala umsebenzi ozokhuphula inani lamanje lento ngo-1.

Sixazulula izinkinga ezingokoqobo ku-Zabbix sisebenzisa i-JavaScript
Ukwenziwa kombhalo, inqobo nje uma okuguquguqukayo kulingana no-3, futhi kulingana no-4.

Uma kuqhathaniswa nomlingisi (==), indlela isetshenziswa isikhathi ngasinye kuString ngomsebenzi wokunyusa inani. Ngokuvumelana nalokho, ngokuqhathanisa ngakunye okulandelayo, inani liyakhuphuka. Lokhu kungagwenywa ngokusebenzisa ukuqhathanisa okungalingisi (===).

Sixazulula izinkinga ezingokoqobo ku-Zabbix sisebenzisa i-JavaScript
Ukuqhathanisa ngaphandle kohlobo lokusakaza

QAPHELA. Ungasebenzisi Ukuqhathanisa Kwabalingisi Ngokungenasidingo.

Ngemibhalo eyinkimbinkimbi, efana ne-Webhooks enengqondo eyinkimbinkimbi, edinga ukuqhathaniswa nohlobo lokusakaza, kunconywa ukuthi ubhale kusengaphambili ukuhlola amanani abuyisela okuhlukile futhi asingathe ukungahambisani namaphutha.

Webhook Media

Ngasekupheleni kuka-2019 nasekuqaleni kuka-2020, ithimba lokuhlanganisa le-Zabbix belimatasa lithuthukisa ama-Webhooks kanye nokuhlanganiswa okuphuma ngaphandle kwebhokisi okuza nokusatshalaliswa kwe-Zabbix.

Sixazulula izinkinga ezingokoqobo ku-Zabbix sisebenzisa i-JavaScript
Xhumanisa ne imibhalo

Ukuqhubekisa phambili

  • Ukufika kokucutshungulwa kwangaphambili ku-JavaScript kwenze kwaba nokwenzeka ukushiya imibhalo yangaphandle eminingi, futhi njengamanje ku-Zabbix ungathola noma yiliphi inani futhi uliguqulele enanini elihluke ngokuphelele.
  • Ukucubungula ngaphambili ku-Zabbix kusetshenziswa ikhodi ye-JavaScript, okuthi, uma ihlanganiswa ibe yi-bytecode, iguqulelwe ibe umsebenzi othatha inani elilodwa njengepharamitha. Inani njengeyunithi yezinhlamvu (uchungechunge lungaqukatha kokubili idijithi nenombolo).
  • Njengoba okukhiphayo kuwumsebenzi, ekugcineni kweskripthi kuyadingeka ukubuya.
  • Kungenzeka ukusebenzisa ama-macros wangokwezifiso kukhodi.
  • Izinsiza zingakhawulelwa hhayi kuphela ezingeni lesistimu yokusebenza, kodwa futhi ngokohlelo. Isinyathelo sokucubungula ngaphambili sabelwe umkhawulo we-RAM engu-10 megabytes kanye nomkhawulo wesikhathi sokusebenza wamasekhondi angu-10.

Sixazulula izinkinga ezingokoqobo ku-Zabbix sisebenzisa i-JavaScript

QAPHELA. Inani lesikhathi sokuvala lamasekhondi angu-10 liningi kakhulu, ngoba ukuqoqa izinkulungwane ezinemibandela zezinto zedatha ngomzuzwana ongu-1 ngokwesimo sokucutshungulwa "esisindayo" kakhulu kunganciphisa i-Zabbix. Ngakho-ke, akunconyiwe ukusebenzisa ukucubungula kwangaphambili ukuze kusetshenziswe izikripthi ze-JavaScript ezigcwele ngokugcwele ngalokho okubizwa ngokuthi ama-elementi edatha yesithunzi (izinto eziyizidumi), ezisebenza kuphela ukuze kwenziwe ukucubungula ngaphambilini..

Ungahlola ikhodi yakho ngohlolo lokucubungula ngaphambilini noma usebenzisa insiza zabhix_js:

`zabbix_js -s *script-file -p *input-param* [-l log-level] [-t timeout]`

`zabbix_js -s script-file -i input-file [-l log-level] [-t timeout]`

`zabbix_js -h`

`zabbix_js -V`

Imisebenzi ewusizo

Inhloso 1

Shintshanisa into ebaliwe ngokucutshungulwa ngaphambilini.

Isimo: Thola izinga lokushisa ngo-Fahrenheit kusuka kusizwa ozosigcina nge-Celsius.

Ngaphambilini, besidala into eqoqa izinga lokushisa ngamadigri Fahrenheit. Ngemva kwalokho, enye into yedatha (ebaliwe) ezoguqula i-Fahrenheit iye ku-Celsius kusetshenziswa ifomula.

Izinkinga:

  • Kuyadingeka ukuphinda izingxenye zedatha futhi ugcine wonke amanani kusizindalwazi.
  • Kufanele uvumelane ngezikhawu zento yedatha "engumzali" ebalwa futhi isetshenziswe kufomula, kanye nento yedatha ebaliwe. Uma kungenjalo, into ebaliwe ingase iye esimweni esingasekelwe noma ibale inani langaphambilini, elizothinta ukwethembeka kwemiphumela yokuqapha.

Isixazululo esisodwa kwakuwukusuka kuzikhawu zokuhlola ezivumelana nezimo ukuze sivune izikhawu ezimisiwe ukuze kuqinisekiswe ukuthi into ebaliwe ihlolwa ngemva kwento ethola idatha (kithi, izinga lokushisa ngamadigri Fahrenheit).

Kodwa uma, ngokwesibonelo, sisebenzisa isifanekiso ukuhlola inani elikhulu lamadivayisi, futhi isheke lenziwa kanye njalo ngemizuzwana engu-30, i-Zabbix "i-hacks" imizuzwana engu-29, futhi ngomzuzwana wokugcina iqala ukuhlola nokubala. Lokhu kudala ulayini futhi kuthinta ukusebenza. Ngakho-ke, kunconywa ukusebenzisa izikhathi ezimisiwe kuphela uma kudingekile ngempela.

Kule nkinga, isixazululo esilungile siwumugqa owodwa wokucubungula i-JavaScript oguqula amadigri Fahrenheit abe amadigri Celsius:

`return (value - 32) * 5 / 9;`

Kuyashesha futhi kulula, awudingi ukudala izinto zedatha ezingadingekile futhi ugcine umlando kuzo, futhi ungasebenzisa izikhawu ezivumelana nezimo ukuze uhlole.

Sixazulula izinkinga ezingokoqobo ku-Zabbix sisebenzisa i-JavaScript

`return (parseInt(value) + parseInt("{$EXAMPLE.MACRO}"));`

Kodwa, uma esimweni sokucatshangelwa kuyadingeka ukwengeza isici sedatha esitholiwe, isibonelo, nganoma yikuphi okuchazwe njalo ku-macro, kufanele kucatshangelwe ukuthi ipharamitha. Inani inwebeka ibe yiyunithi yezinhlamvu. Emsebenzini wokwengeza izintambo, izintambo ezimbili zivele zihlanganiswe zibe yinto eyodwa.

Sixazulula izinkinga ezingokoqobo ku-Zabbix sisebenzisa i-JavaScript

`return (value + "{$EXAMPLE.MACRO}");`

Ukuthola umphumela wokusebenza kwezibalo, kuyadingeka ukuguqula izinhlobo zamanani atholiwe zibe ifomethi yezinombolo. Ukuze wenze lokhu ungasebenzisa umsebenzi parseInt(), ekhiqiza inombolo ephelele, umsebenzi i-parseFloat(), ekhiqiza idesimali, noma umsebenzi inombolo, ebuyisela inombolo ephelele noma idesimali.

Umsebenzi 2

Thola isikhathi ngemizuzwana kuze kube sekupheleni kwesitifiketi.

Isimo: isevisi ikhipha idethi yokuphelelwa yisikhathi kwesitifiketi ngefomethi ethi "Feb 12 12:33:56 2022 GMT".

Ku-ECMAScript5 date.parse() yamukela idethi ngefomethi ye-ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ). Kuyadingeka ukuphonsa iyunithi yezinhlamvu kuyo ngefomethi MMM DD YYYY HH:mm:ss ZZ

Inkinga: Inani lenyanga livezwa njengombhalo, hhayi njengenombolo. Idatha ekule fomethi ayamukelwa yi-Duktape.

Isibonelo sesixazululo:

  • Okokuqala nje, okuguquguqukayo kumenyezelwa ukuthi kuthatha inani (sonke iskripthi siyisimemezelo sezinto eziguquguqukayo ezifakwe kuhlu zihlukaniswe ngokhefana).

  • Emgqeni wokuqala sithola usuku kupharamitha Inani futhi uyihlukanise nezikhala usebenzisa indlela Hlukanisa. Ngakho, sithola uhlu, lapho ingxenye ngayinye yamalungu afanayo, eqala kunkomba engu-0, ihambisana nento eyodwa yedethi ngaphambi nangemuva kwesikhala. ukuhlukana(0) - inyanga, ukuhlukana(1) - inombolo, ukuhlukana(2) - iyunithi yezinhlamvu enesikhathi, njll. Ngemva kwalokho, ingxenye ngayinye yedethi ingafinyelelwa ngenkomba ohlwini.

`var split = value.split(' '),`

  • Inyanga ngayinye (ngokulandelana kwezikhathi) ihambisana nenkomba yendawo yayo ohlwini (kusuka ku-0 kuye ku-11). Ukuze uguqule inani lombhalo libe inani lezinombolo, eyodwa yengezwa enkombeni yenyanga (ngoba izinyanga zibalwa kusukela ku-1). Kulokhu, inkulumo enokwengezwa kokukodwa ithathwa kubakaki, ngoba ngaphandle kwalokho kuzotholakala intambo, hhayi inombolo. Ekugcineni senza ucezu() - sika uhlu ukusuka ekugcineni ukuze ushiye izinhlamvu ezimbili kuphela (okubalulekile izinyanga ezinezinombolo ezimbili).

`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),`

  • Sakha iyunithi yezinhlamvu ngefomethi ye-ISO kusuka kumanani atholiwe ngokungezwa okujwayelekile kweyunithi yezinhlamvu ngokulandelana okufanele.

`ISOdate = split[3] + '-' + month_index + '-' + split[1] + 'T' + split[2],`

Idatha ngefomethi ewumphumela iyinani lamasekhondi ukusuka ku-1970 ukuya endaweni ethile esikhathini esizayo. Cishe akunakwenzeka ukusebenzisa idatha ngefomethi etholiwe kuma-trigger, ngoba i-Zabbix ikuvumela ukuthi usebenze ngama-macros kuphela. {Usuku} ΠΈ {Isikhathi}, ebuyisela idethi nesikhathi ngefomethi esebenziseka kalula.

  • Singakwazi ke ukuthola idethi yamanje ku-JavaScript ngefomethi ye-Unix Timestamp bese siyikhipha osukwini lokuphelelwa yisikhathi kwesitifiketi ukuze sithole inombolo yama-millisecond kusukela manje kuze kube yilapho isitifiketi siphelelwa yisikhathi.

`now = Date.now();`

  • Sihlukanisa inani elitholiwe ngenkulungwane ukuze sithole amasekhondi ku-Zabbix.

`return parseInt((Date.parse(ISOdate) - now) / 1000);`

Ku-trigger, ungacacisa isisho 'okokugcina' kulandelwa isethi yamadijithi ehambisana nenani lamasekhondi enkathini ofuna ukuphendula ngayo, isibonelo, emavikini. Ngakho, i-trigger izokwazisa ukuthi isitifiketi siphelelwa yisikhathi ngeviki.

QAPHELA. Naka ukusetshenziswa parseInt() emsebenzini ukubuyaukuguqula inombolo eyingxenye ewumphumela wokuhlukaniswa kwama-millisecond ibe inamba. Ungasebenzisa futhi i-parseFloat() futhi ugcine idatha eyingxenye.

Buka umbiko

Source: www.habr.com

Engeza amazwana