Solvimus quaestiones practicas in Zabbix usura JavaScript

Solvimus quaestiones practicas in Zabbix usura JavaScript
Tikhon Uskov, Zabbix integration team engineer

Zabbix suggestum customizable est quod monitorem quamlibet notitiarum adhibet. Cum primae versiones Zabbix, vigilantia administratores facultatem variis scriptis per currendum habuerunt Actions ad checks in scopum network lymphaticorum. Eodem tempore immissio scriptorum ad nonnullas difficultates induxit, quibus opus erat ut scriptorum sustentatio, eorum traditio ad nodos communicationis et latorum, necnon ad varias versiones sustentandas.

JavaScript for Zabbix

Mense Aprili MMXIX, Zabbix 2019 introductus est cum JavaScript praeprocessione. Multi homines commoti sunt de notione litterarum litterarum relinquendi quae alicubi notitias capiunt, concoquendum et praebendum in forma quam Zabbix intelligit, et simplices compescit qui notitias recipiet quae non paratae sunt ad reponendum et expediendum per Zabbix, et tunc processus notitia ista amnis Zabbix et JavaScript instrumenta utens. Coniunctim cum humili gradu inventionis et dependens res quae in Zabbix apparuerunt 4.2, notionem satis flexibilem accepimus ad notitias receptas disponendi et administrandi.

In Zabbix 4.4, ut logica continuatio antecedens in JavaScript, nova notificatio methodus apparuit - Webhook, quae adhiberi potest ad notificationes Zabbix facile integrandas cum applicationibus tertiae partis.

JavaScript et Duktapes

Cur JavaScript et Duktape electi? Variae optiones pro linguis et machinamentis habitae sunt;

  • Lua - Lua 5.1
  • Lua - LuaJIT
  • Javascript - Duktape
  • Javascript - JerryScript
  • Python embedded
  • Embedded Perl

Praecipua delectu criteria praevalentia, facilitas integrationis machinae in productum, humilis subsidii consumptio et altioris machinae observantia, et salus codicis in hac lingua in vigilantia introducendi. Ex indicibus compositum, JavaScript in machinam Duktape vicit.

Solvimus quaestiones practicas in Zabbix usura JavaScript

Electio criteriis et perficiendi probatio

Features Duktape:

- Standard ECMAscript E5/E5.1
- Moduli Zabbix pro Duktape:

  • Zabbix.log() - permittit te scribere epistulas cum diversis gradibus speciei directe in Log Servo Zabbix, quod efficit ut errores correlativorum, exempli gratia, in Webhook, cum statu servo.
  • CurlHttpRequest () - permittit ut petitiones HTTP retiaculis petas, quibus usus Webhook innititur.
  • atob() et btoa() - sino te encode et chordas in Base64 formare.

NOTA. Duktape signis ACME obtemperat. Zabbix versionem scriptionem adhibet MMXV. Mutationes posteriores sunt minores, ut negligi possint..

JavaScript Magic

Omnis magica JavaScript est in dynamica typing et specie mittentes: chorda, numerica et boolean.

Hoc significat non esse necessarium ut ante definias cuius generis variabilis valorem reddat.

In mathematicis operationibus valores operariorum redditi ad numeros convertuntur. Exceptio talium operationum additur, quia si saltem unum terminorum chorda est, chorda conversio omnibus terminis applicatur.

NOTA. Modi huiusmodi transformationum responsabiles plerumque efficiuntur in prototypis parentis obiecti; valueOf * ΠΈ toString. valueOf * dicitur in conversione numerali et semper ante modum toString. Methodus valueOf * valores primitivos reddere debent, alioquin effectus eius ignoratur.

Methodus dicitur in obiecto valueOF. Si non invenitur vel non reddit valorem primitivum, modus vocatur toString. Si modum toString non inveni, inquisitione valueOf * in prototypo obiecti, omniaque iterantur donec processus ipsius valoris compleatur et omnes valores in expressione eiusdem speciei eiiciantur.. Si res efficit modum toStringquae redit ad valorem primitivum, tunc est quod ponitur ad conversionem chordarum. Effectus autem applicandi hunc modum filo necessario non est.

Ut si for quodsecundum quid'Ratio definitur toString,

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

modum toString prorsus chorda redit, et cum chorda addito numero, chorda fibulatur;

`obj + 1 // '2001'` 

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

Sin autem RESCRIBO toStringita ut modus numeri, addito objecto, redeat, operatio mathematica cum conversione numerorum fietur, et ex mathematicis additio obtinebitur.

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

`obj + 1 // '2001'`

In hoc casu, si filo additionem agimus, fit chorda conversio et chorda fibulata.

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

Haec est causa quia numerus errorum a JavaScript utentibus novitiis.

Modus toString scribere potes munus quod praesens valorem augebit obiecto 1 .

Solvimus quaestiones practicas in Zabbix usura JavaScript
Supplicium scriptionis, dummodo variabilis sit aequalis 3, et sit etiam = 4 .

Comparatus cum cast (==), modus singulis diebus efficitur toString munus cum incremento pretii. Quocirca cum unaquaque subsequenti comparatione crescit valor. Hoc vitari potest per comparationem non iactatam (===).

Solvimus quaestiones practicas in Zabbix usura JavaScript
Comparatio sine generis mittentes

NOTA. Nolite comparare superflue.

Scripta enim complexa, sicut Webhooks cum logica multiplici, quae comparationem cum generis emissionis requirunt, commendatur ut prae-scribatur sistens valores qui variabiles reddunt et repugnantia et errores tractant.

Webhook Media

In nuper MMXIX et primo 2019, turma integrationis Zabbix active explicans Webhooks et extra-thecam integrationum quae cum Zabbix distributione veniunt.

Solvimus quaestiones practicas in Zabbix usura JavaScript
link to Litterarum

preprocessing

  • Adventus praeprocessionis in JavaScript effecit ut pleraque externa scripta relinqueret, et nunc in Zabbix aliquem valorem habere potes et ad valorem omnino diversum convertere.
  • Praecedens Zabbix in codice JavaScript impletur, qui in bytecode compilatus convertitur in functionem quae unicum valorem accipit pro modulo. pretium sicut filum (filum potest continere et digitum et numerum).
  • Cum munus sit output, in fine scriptoris requiritur reditum.
  • Potest uti in codice macros consuetudine.
  • Facultates non solum in gradu operante, sed etiam programmatice finiri possunt. Gradus praeprocessus maximum sortita est 10 megabytarum RAM et procursu terminum 10 secundis.

Solvimus quaestiones practicas in Zabbix usura JavaScript

NOTA. The timeout valor of 10 seconds is quite multus, quia colligens conditionalem milia datarum rerum in 1 secundo secundum magis "gravis" praeprocessus missionis Zabbix retardare potest. Ideo non commendatur uti praeprocessibus ad scripta JavaScript plena flexa exequenda, per sic dicta elementa umbram data (dummy items), quae currunt solum ad praeprocessionem faciendam..

Potes codicem tuum per praeprocessing test vel utilitate utens zabbix_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`

Officia practica

negotium 1

Reponere rationem item cum preprocessing.

Conditio: temperies Fahrenheit a sensore reponenda in Celsio.

Antea volumus creare item quod temperatus in gradibus Fahrenheit colligit. Deinde, alia notitia item quae Fahrenheit ad Celsium utendi formula converteret.

problems:

  • Necesse est ut elementa duplicare et omnia bona in datorum copia reponere.
  • Intervalla ad "parentem" data adsentiare debes item computata et adhibita in formula, item pro calculata notitia. Alioquin item computatum in statum destitutum ire potest vel valorem priorem computare, qui fidem vigilantiae eventus afficiet.

Una solutio erat ex intervallis flexibilibus persoluendis migrare pro certis intervallis, ut computata item aestimanda post datam receptaculum (in nostro casu, temperatura in gradibus Fahrenheit).

Sin, exempli gratia, Formulae utimur ad ingentem numerum machinorum reprimendam, et perscriptio semel in 30 secundis singulis peragitur, Zabbix "hacks" pro 29 secundis, et in secundo secundo incipit cohibere et computare. Facit queue et afficit effectum. Ideo certa intervalla solum commendatur si necesse est.

In hoc problemate, optimalis solutio est unus JavaScript praeprocessus qui gradus Fahrenheit ad gradus Celsius convertitur;

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

Celerum ac facile est, non necesse est ut res necessarias notas creare et historiam in iis servare, et intervallis flexibilibus uti potes ad compescendos.

Solvimus quaestiones practicas in Zabbix usura JavaScript

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

Quod si in hypothetica positione datam receptam adjicere necesse est, exempli gratia, omni constanti in macro definito, ratio habenda est modulo. pretium dilatatur in filo. In chorda addita operatione, duae chordae simpliciter in unum iunguntur.

Solvimus quaestiones practicas in Zabbix usura JavaScript

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

Ad quod consequendum exitum mathematicae operationis, oportet rationes valorum habitorum in formam numericam converti. Hoc enim munere uti potes parseInt ()quae integra efficit functionem parseFloat ()quae efficit decimalem vel functionem numerusque reddit integrum vel decimalem.

Problema 2

Accipe tempus in secundis usque ad finem certificatorium.

Conditio: ministerium emissum libellum exit in forma "Feb 12 12:33:56 2022 GMT".

in ECMAscript5 date.parse() accipit diem in ISO 8601 forma (YYYY-MM-DDTHH:mm:ss.sssZ). In forma MMM DD YYYY HH:mm:ss ZZ eiicere necesse est.

quaestio: Mensis valor ut textus exprimitur, non numerus. Data in hac forma a Duktape non accipitur.

Solutio Exemplum:

  • Imprimis declaratur variabilis quae valorem obtinet (tota scriptura est declaratio variabilium quae a commatibus separantur).

  • In prima linea diem obtinemus in parametro pretium et divide spatia per modum split. Ita aciem instruimus, ubi singula elementa ordinata, ab indice 0 incipientes, uni tempori elemento ante et post spatium respondet. split (0) β€” mensis; split (1) β€” numerum; split (2) - filo cum tempore etc. Post hoc, singula elementa diei accessi possunt per indicem in ordine.

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

  • Singulis mensibus (in ordine chronologico) respondet index locorum in ordine (ab 0 ad 11). Ad valorem textus ad valorem numericum convertendum, additur index mensi (quia menses ab initio numerantur). In hoc casu ly addito uno accipitur uncis, quia alias chorda, non numerus. In fine faciemus scalpere () - aciem a fine secare ut duas tantum personas relinquas (quod est momenti per menses cum numero duorum digitorum).

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

  • Filum in forma ISO formamus ex valoribus habitis iuxta chordarum solito additionem in ordine convenienti.

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

Notitia in forma resultante est numerus secundorum ab anno 1970 ad aliquid in futurum. Fere impossibile est notitias in forma recepta in triggers uti, quia Zabbix te solum cum macros operari sinit } {Date ΠΈ {Tempus}quae reddunt diem et tempus in forma usoris amicabili.

  • Praesens ergo tempus in JavaScript in Unix Timestamp consequi possumus et eam demere ab exspiratione certificamenti inde, ut numerus millisecondorum ex nunc usque ad libellum exspirat.

`now = Date.now();`

  • Receptam valorem mille dividimus ad secundas in Zabbix acquirendas.

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

In felis, expressionem denotare potes.novissime' Sequitur copia digitorum quae numero secundorum respondet in periodo cui respondere voles, verbi gratia in hebdomadibus. Ita felis certiorem faciet libellum exspirat in hebdomada.

NOTA. Attende ad usum parseInt () in munus reditumnumerum fractorum ex divisione milliseconds ad integrum convertere. Etiam uti potes parseFloat () et copia fractionum notitia.

Watch fama

Source: www.habr.com