موږ د جاواسکریپټ په کارولو سره په زیبکس کې عملي ستونزې حل کوو

موږ د جاواسکریپټ په کارولو سره په زیبکس کې عملي ستونزې حل کوو
تیخون اوسکوف، د زیبکس انضمام ټیم انجنیر

زیبکس یو دودیز پلیټ فارم دی چې د هر ډول معلوماتو څارلو لپاره کارول کیږي. د زابیکس د لومړنیو نسخو راهیسې، د څارنې مدیران د دې وړتیا لري چې د مختلفو سکریپټونو له لارې چلوي. کړنې د هدف شبکې نوډونو چیک کولو لپاره. په ورته وخت کې، د سکریپټونو پیل د یو شمیر ستونزو لامل شو، پشمول د سکریپټونو ملاتړ ته اړتیا، د اړیکو نوډونو او پراکسي ته د دوی رسول، او همدارنګه د مختلفو نسخو لپاره مالتړ.

د زیبکس لپاره جاوا سکریپټ

په اپریل 2019 کې، Zabbix 4.2 د جاواسکریپټ پری پروسس کولو سره معرفي شو. ډیری خلک د لیکلو سکریپټونو پریښودو مفکورې په اړه لیواله شوي چې ډاټا چیرته اخلي، هضم یې کړي او په داسې بڼه یې چمتو کړي چې زابیکس پوهیږي، او ساده چکونه ترسره کوي چې هغه معلومات ترلاسه کوي چې د زبیبکس لخوا ذخیره کولو او پروسس کولو لپاره چمتو ندي، او بیا د زبکس او جاواسکریپټ وسیلو په کارولو سره دا ډیټا جریان پروسس کړئ. د ټیټ کچې کشف او انحصاري توکو سره په ګډه چې په زبیبکس 3.4 کې څرګند شوي ، موږ د ترلاسه شوي معلوماتو ترتیب او اداره کولو لپاره خورا انعطاف وړ مفهوم ترلاسه کړ.

په Zabbix 4.4 کې، په جاواسکریپټ کې د پری پروسس کولو منطقي دوام په توګه، د خبرتیا نوې طریقه راښکاره شوه - ویب هک، کوم چې د دریمې ډلې غوښتنلیکونو سره د زیبکس خبرتیاوې په اسانۍ سره یوځای کولو لپاره کارول کیدی شي.

جاواسکریپټ او ډیکټاپس

ولې جاواسکریپټ او ډوکټاپ غوره شوي؟ د ژبو او انجنونو لپاره مختلف انتخابونه په پام کې نیول شوي:

  • لوا - لوا 5.1
  • Lua - LuaJIT
  • جاواسکریپټ - ډیکټاپ
  • جاوا سکریپټ - جیری سکریپټ
  • سرایت شوی Python
  • ایمبیډ شوی پرل

د انتخاب اصلي معیارونه پراخه وه ، په محصول کې د انجن ادغام اسانه کول ، د سرچینو ټیټ مصرف او د انجن عمومي فعالیت ، او په دې ژبه کې د څارنې لپاره د کوډ معرفي کولو خوندیتوب. د شاخصونو د ترکیب پراساس، جاواسکریپټ د Duktape انجن کې وګټل.

موږ د جاواسکریپټ په کارولو سره په زیبکس کې عملي ستونزې حل کوو

د انتخاب معیارونه او د فعالیت ازموینه

د ډیکټاپ ځانګړتیاوې:

- معیاري ECMAScript E5/E5.1
- د ډیکټاپ لپاره د زبیبکس ماډلونه:

  • Zabbix.log() - تاسو ته اجازه درکوي په مستقیم ډول د Zabbix سرور لاګ کې د مختلف کچو توضیحاتو سره پیغامونه ولیکئ ، کوم چې دا ممکنه کوي چې غلطۍ سره اړیکه ونیسي ، د مثال په توګه ، په ویب بوک کې ، د سرور حالت سره.
  • CurlHttpRequest() - تاسو ته اجازه درکوي چې شبکې ته د HTTP غوښتنې وکړئ، په کوم کې چې د ویب هک کارول اساس دی.
  • atob() او btoa() - تاسو ته اجازه درکوي په بیس 64 فارمیټ کې تارونه کوډ او کوډ کړئ.

یادونه. Duktape د ACME معیارونو سره مطابقت لري. زیبکس د سکریپټ 2015 نسخه کاروي. راتلونکی بدلونونه لږ دي، نو له پامه غورځول کیدی شي..

جاواسکریپټ جادو

د جاواسکریپټ ټول جادو په متحرک ټایپ کولو او ټایپ کاسټینګ کې پروت دی: تار، شمیره، او بولین.

دا پدې مانا ده چې دا اړینه نده چې مخکې له مخکې اعلان وکړئ چې کوم ډول متغیر باید ارزښت بیرته راولي.

په ریاضياتي عملیاتو کې، د فعالیت آپریټرانو لخوا بیرته راستانه شوي ارزښتونه په شمیرو بدلیږي. د دې ډول عملیاتو لپاره استثنا اضافه ده، ځکه چې که لږترلږه یو اصطلاح تار وي، د تار تبادله په ټولو شرایطو پلي کیږي.

یادونه. هغه میتودونه چې د دې ډول بدلونونو لپاره مسؤل دي معمولا د اعتراض په اصلي پروټوټایپونو کې پلي کیږي ، ارزښت и سټینګ. ارزښت د عددي تبادلې پرمهال او تل د میتود څخه مخکې ویل کیږي سټینګ. طریقه ارزښت باید لومړني ارزښتونه بیرته راستانه کړي، که نه نو پایله یې له پامه غورځول کیږي.

یو میتود په یوه څیز کې ویل کیږي ارزښت. که دا ونه موندل شي یا لومړنی ارزښت بیرته نه راوړي، میتود ویل کیږي سټینګ. که طریقه سټینګ نه موندل، لټون ارزښت د اعتراض په پروټوټایپ کې، او هر څه تکرار کیږي تر هغه چې د ارزښت پروسس بشپړ شي او په بیان کې ټول ارزښتونه ورته ډول ته واچول شي. که اعتراض یو میتود پلي کړي سټینګ، کوم چې لومړنی ارزښت بیرته راګرځوي، نو دا هغه دی چې د تار تبادلې لپاره کارول کیږي. په هرصورت، د دې میتود پلي کولو پایله اړینه نه ده چې یو تار وي.

د مثال په توګه، که د اعتراض لپاره 'اعتراضمیتود تعریف شوی سټینګ,

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

میتود سټینګ په سمه توګه یو تار راګرځوي، او کله چې د شمیرې سره تار اضافه کړو، موږ یو چپک شوی تار ترلاسه کوو:

`obj + 1 // '2001'` 

`obj + 'a' // ‘200a'`

مګر که تاسو بیا لیکئ سټینګد دې لپاره چې میتود یو شمیر بیرته راولي، کله چې اعتراض اضافه شي، د عددي تبادلې سره ریاضياتي عملیات به ترسره شي او د ریاضياتي اضافه کولو پایله به ترلاسه شي.

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

`obj + 1 // '2001'`

په دې حالت کې، که موږ د تار سره اضافه ترسره کړو، د تار تبادله ترسره کیږي، او موږ یو چپک شوی تار ترلاسه کوو.

`obj + 'a' // ‘200a'`

دا د نوي جاواسکریپټ کاروونکو لخوا د لوی شمیر غلطیو لامل دی.

طریقه سټینګ تاسو کولی شئ یو فنکشن ولیکئ چې د څیز اوسنی ارزښت به د 1 لخوا زیات کړي.

موږ د جاواسکریپټ په کارولو سره په زیبکس کې عملي ستونزې حل کوو
د سکریپټ اجرا کول، په دې شرط چې متغیر د 3 سره مساوي وي، او دا هم د 4 سره مساوي وي.

کله چې د کاسټ (==) سره پرتله کیږي، میتود هر ځل اجرا کیږي سټینګ د ارزښت زیاتوالي فعالیت سره. په دې اساس، د هرې وروسته پرتله کولو سره، ارزښت زیاتیږي. دا د غیر کاسټ پرتله کولو (===) په کارولو سره مخنیوی کیدی شي.

موږ د جاواسکریپټ په کارولو سره په زیبکس کې عملي ستونزې حل کوو
د ډول کاسټ کولو پرته پرتله کول

یادونه. په غیر ضروري ډول د کاسټ پرتله کول مه کاروئ.

د پیچلو سکریپټونو لپاره، لکه د پیچلي منطق سره Webhooks، چې د ډول کاسټینګ سره پرتله کولو ته اړتیا لري، دا سپارښتنه کیږي چې د هغو ارزښتونو لپاره مخکې له مخکې چکونه ولیکئ کوم چې متغیرات بیرته راولي او متضاد او غلطۍ اداره کوي.

ویب هک میډیا

د 2019 په وروستیو کې او د 2020 په پیل کې، د زیبکس ادغام ټیم په فعاله توګه د ویب بوکس او د بکس څخه بهر ادغامونه رامینځته کوي چې د زیبکس توزیع سره راځي.

موږ د جاواسکریپټ په کارولو سره په زیبکس کې عملي ستونزې حل کوو
ته لینک اسناد

مخکې پروسې

  • په جاواسکریپټ کې د پری پروسس کولو راتګ دا ممکنه کړې چې ډیری بهرني سکریپټونه پریږدي، او دا مهال په زبیکس کې تاسو کولی شئ هر ارزښت ترلاسه کړئ او په بشپړ ډول مختلف ارزښت ته یې بدل کړئ.
  • په زیبکس کې پری پروسس کول د جاواسکریپټ کوډ لخوا پلي کیږي ، کوم چې کله چې په بایټ کوډ کې ترکیب شي ، په فنکشن کې بدلیږي چې یو واحد ارزښت د پیرامیټر په توګه اخلي ارزښت د تار په توګه (یو تار کولی شي دواړه عدد او شمیر ولري).
  • څرنګه چې محصول یو فعالیت دی، د سکریپټ په پای کې اړین دی بېرته.
  • دا ممکنه ده چې په کوډ کې دودیز میکرو وکاروئ.
  • سرچینې نه یوازې د عملیاتي سیسټم په کچه محدود کیدی شي، بلکه په پروګرام کې هم. د پروسس کولو دمخه مرحله د اعظمي حد 10 میګابایټ RAM او د 10 ثانیو د چلولو وخت محدودیت تخصیص شوی.

موږ د جاواسکریپټ په کارولو سره په زیبکس کې عملي ستونزې حل کوو

یادونه. د 10 ثانیو د وخت پای ارزښت خورا ډیر دی، ځکه چې په 1 ثانیه کې د "درانه" دمخه پروسس کولو سناریو سره سم په XNUMX ثانیو کې د زرګونو شرطي معلوماتو راټولول کولی شي زبیکس ورو کړي. له همدې امله، دا سپارښتنه نه کیږي چې د بشپړ جاوا سکریپټ سکریپټ اجرا کولو لپاره د تش په نامه سیوري ډیټا عناصرو (ډمي توکي) له لارې د پری پروسس کولو کار وکاروئ، کوم چې یوازې د پری پروسس کولو لپاره پرمخ وړل کیږي..

تاسو کولی شئ خپل کوډ د پری پروسس کولو ازموینې یا د افادیت په کارولو سره چیک کړئ 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`

عملي کارونه

موخه 1

حساب شوي توکي د پری پروسس کولو سره بدل کړئ.

حالت: د حرارت درجه په فارنهایټ کې د سینسر څخه په سیلسیس کې ذخیره کړئ.

مخکې، موږ به یو توکي جوړ کړو چې د تودوخې درجې فارنهایټ کې راټول کړي. له هغې وروسته، یو بل ډاټا توکي (حساب شوی) چې د فارمول په کارولو سره فارنهایټ سیلسیس ته بدلوي.

ستونزې:

  • دا اړینه ده چې د ډیټا عناصر نقل کړئ او ټول ارزښتونه په ډیټابیس کې ذخیره کړئ.
  • تاسو باید د "والدین" ډیټا توکي لپاره وقفې سره موافق اوسئ چې په فورمول کې محاسبه شوي او کارول شوي ، او د محاسب شوي ډیټا توکي لپاره. که نه نو، محاسبه شوي توکي ممکن یو غیر ملاتړ شوي حالت ته لاړ شي یا پخوانی ارزښت محاسبه کړي، کوم چې به د څارنې پایلو اعتبار اغیزه وکړي.

یو حل دا و چې د ثابت وقفو په ګټه د انعطاف وړ چیک وقفو څخه لرې شي ترڅو ډاډ ترلاسه شي چې محاسبه شوي توکي د هغه توکي وروسته ارزول کیږي چې معلومات ترلاسه کوي (زموږ په قضیه کې د تودوخې درجې فارن هایټ).

مګر که ، د مثال په توګه ، موږ د ډیری وسیلو چیک کولو لپاره ټیمپلیټ وکاروو ، او چیک په هر 30 ثانیو کې یو ځل ترسره کیږي ، زبیکس د 29 ثانیو لپاره "هیک" کوي ، او په وروستي ثانیه کې دا چیک کول او محاسبه پیل کوي. دا یو قطار جوړوي او فعالیت اغیزه کوي. له همدې امله، دا سپارښتنه کیږي چې ثابت وقفې وکاروئ یوازې که چیرې دا واقعیا اړین وي.

په دې ستونزه کې، غوره حل د یو لاین جاواسکریپټ پری پروسس کول دي چې درجې فارنهایټ درجې سیلسیس ته بدلوي:

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

دا ګړندی او اسانه دی ، تاسو اړتیا نلرئ غیر ضروري ډیټا توکي رامینځته کړئ او په دوی باندې تاریخ وساتئ ، او تاسو کولی شئ د چیکونو لپاره انعطاف وړ وقفې هم وکاروئ.

موږ د جاواسکریپټ په کارولو سره په زیبکس کې عملي ستونزې حل کوو

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

مګر، که چیرې په فرضي حالت کې دا اړینه وي چې د ترلاسه شوي ډاټا عنصر اضافه کړئ، د بیلګې په توګه، په میکرو کې د کوم ثابت تعریف سره، دا باید په پام کې ونیول شي چې پیرامیټر ارزښت په تار کې پراخیږي. د تار اضافه کولو عملیاتو کې، دوه تارونه په ساده ډول په یو کې یوځای کیږي.

موږ د جاواسکریپټ په کارولو سره په زیبکس کې عملي ستونزې حل کوو

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

د ریاضياتي عملیاتو پایلې ترلاسه کولو لپاره، دا اړینه ده چې د ترلاسه شوي ارزښتونو ډولونه په عددي بڼه بدل کړئ. د دې لپاره تاسو کولی شئ فنکشن وکاروئ parseInt(), کوم چې یو بشپړ، یو فعالیت تولیدوي parseFloat(), کوم چې د اعشاریه یا فنکشن تولیدوي شمیر، کوم چې یو عدد یا لسیزه بیرته راګرځوي.

دنده 2

د سند پای ته رسیدو پورې په ثانیو کې وخت ترلاسه کړئ.

حالت: یو خدمت د "فبروري 12 12:33:56 2022 GMT" په بڼه کې د سند د ختمیدو نیټه وړاندې کوي.

په ECMAScript5 کې date.parse() د ISO 8601 بڼه کې نیټه مني (YYYY-MM-DDTHH:mm:ss.sssZ). دا اړینه ده چې د MMM DD YYYY HH:mm:ss ZZ په شکل کې دې ته تار واچوئ

ستونزه: د میاشتې ارزښت د متن په توګه څرګند شوی، نه د شمیرې په توګه. په دې بڼه کې ډاټا د Duktape لخوا نه منل کیږي.

د حل مثال:

  • تر ټولو لومړی، یو متغیر اعلان شوی چې ارزښت اخلي (ټول سکریپټ د متغیرونو اعلامیه ده چې د کوما لخوا جلا شوي لیست شوي).

  • په لومړۍ کرښه کې موږ په پیرامیټر کې نیټه ترلاسه کوو ارزښت او د میتود په کارولو سره یې د ځایونو سره جلا کړئ بیلتون. په دې توګه، موږ یو سري ترلاسه کوو، چیرې چې د سرې هر عنصر، په 0 شاخص کې پیل کیږي، د یو ځای څخه مخکې او وروسته د نیټې عنصر سره مطابقت لري. تقسیم (0) - میاشت، تقسیم (1) - شمیره، تقسیم (2) - د وخت سره تار، او داسې نور. له هغې وروسته، د نیټې هر عنصر په صف کې د شاخص په واسطه لاسرسی کیدی شي.

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

  • هره میاشت (په تاریخي ترتیب کې) په صف کې د خپل موقعیت شاخص سره مطابقت لري (له 0 څخه تر 11 پورې). د متن ارزښت عددي ارزښت ته د بدلولو لپاره، یو د میاشتې شاخص کې اضافه کیږي (ځکه چې میاشتې شمیرل کیږي له 1 څخه پیل کیږي). په دې حالت کې، بیان د یو اضافه کولو سره په قوسونو کې اخیستل کیږي، ځکه چې که نه نو یو تار به ترلاسه شي، نه شمیره. په پای کې موږ کوو ټوټه() - صف له پای څخه قطع کړئ ترڅو یوازې دوه حروف پریږدئ (کوم چې د دوه عددي شمیرې سره د میاشتو لپاره مهم دی).

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

  • موږ په مناسب ترتیب کې د تارونو معمول اضافه کولو سره د ترلاسه شوي ارزښتونو څخه د ISO په شکل کې تار جوړوو.

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

د پایلې په بڼه کې ډاټا د 1970 څخه تر راتلونکي وخت پورې د ثانیو شمیره ده. په محرکاتو کې ترلاسه شوي ب formatه کې د معلوماتو کارول نږدې ناممکن دي ، ځکه چې زبیکس تاسو ته اجازه درکوي یوازې د میکرو سره کار وکړئ {نیټه} и {وخت}، کوم چې نیټه او وخت د کاروونکي دوستانه بڼه کې بیرته راولي.

  • بیا موږ کولی شو اوسنۍ نیټه په جاواسکریپټ کې د یونیکس ټایم سټیمپ ب formatه کې ترلاسه کړو او د سند پای ته رسیدو نیټې څخه یې راټیټ کړو ترڅو د سند پای ته رسیدو پورې د ملی ثانیو شمیر ترلاسه کړو.

`now = Date.now();`

  • موږ ترلاسه شوي ارزښت په زربکس کې د ثانیو ترلاسه کولو لپاره په زره ویشو.

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

په محرک کې، تاسو کولی شئ بیان مشخص کړئ 'وروستید عددونو یوه مجموعه تعقیبوي چې په هغه موده کې د ثانیو شمیر سره مطابقت لري چې تاسو یې ځواب غواړئ، د بیلګې په توګه، په اونیو کې. په دې توګه، محرک به خبر ورکړي چې سند په یوه اونۍ کې پای ته رسیږي.

یادونه. استعمال ته پام وکړئ parseInt() په فعالیت کې بېرتهد ملی ثانوي د ویش په پایله کې د جزیي شمیرې په عدد کې بدلولو لپاره. تاسو هم کارولی شئ parseFloat() او جزئي معلومات ذخیره کړئ.

راپور وګورئ

سرچینه: www.habr.com

Add a comment