РСшавамС практичСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² Zabbix с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° JavaScript

РСшавамС практичСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² Zabbix с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° JavaScript
Π’ΠΈΡ…ΠΎΠ½ Усков, ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ Π½Π° Π΅ΠΊΠΈΠΏΠ° Π·Π° интСграция Π½Π° Zabbix

Zabbix Π΅ Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, която сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° наблюдСниС Π½Π° всякакъв Π²ΠΈΠ΄ Π΄Π°Π½Π½ΠΈ. ΠžΡ‚ Π½Π°ΠΉ-Ρ€Π°Π½Π½ΠΈΡ‚Π΅ вСрсии Π½Π° Zabbix администраторитС Π·Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ са ΠΈΠΌΠ°Π»ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ скриптовС Ρ‡Ρ€Π΅Π· ДСйствия Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° Ρ†Π΅Π»Π΅Π²ΠΈ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ възли. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ стартиранСто Π½Π° скриптовС Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Ρ€Π΅Π΄ΠΈΡ†Π° трудности, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ нСобходимостта ΠΎΡ‚ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° скриптовС, доставката ΠΈΠΌ Π΄ΠΎ ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈ възли ΠΈ проксита, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ вСрсии.

JavaScript Π·Π° Zabbix

ΠŸΡ€Π΅Π· Π°ΠΏΡ€ΠΈΠ» 2019 Π³. Zabbix 4.2 бСшС прСдставСн с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° JavaScript. Много Ρ…ΠΎΡ€Π° сС Ρ€Π°Π·Π²ΡŠΠ»Π½ΡƒΠ²Π°Ρ…Π° ΠΎΡ‚ идСята Π΄Π° изоставят писанСто Π½Π° скриптовС, ΠΊΠΎΠΈΡ‚ΠΎ Π²Π·Π΅ΠΌΠ°Ρ‚ Π΄Π°Π½Π½ΠΈ някъдС, усвояват Π³ΠΈ ΠΈ Π³ΠΈ прСдоставят във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ Zabbix Ρ€Π°Π·Π±ΠΈΡ€Π°, ΠΈ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ прости ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са Π³ΠΎΡ‚ΠΎΠ²ΠΈ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΡ‚ Zabbix, ΠΈ слСд Ρ‚ΠΎΠ²Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Zabbix ΠΈ JavaScript инструмСнти. Π’ΡŠΠ² Π²Ρ€ΡŠΠ·ΠΊΠ° с ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ниско Π½ΠΈΠ²ΠΎ ΠΈ зависимитС Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС появиха Π² Zabbix 3.4, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ доста гъвкава концСпция Π·Π° сортиранС ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ.

Π’ Zabbix 4.4, ΠΊΠ°Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π² JavaScript, сС появи Π½ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° увСдомяванС - Webhook, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° лСсно ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Zabbix извСстия с прилоТСния Π½Π° Ρ‚Ρ€Π΅Ρ‚ΠΈ страни.

JavaScript ΠΈ Duktapes

Π—Π°Ρ‰ΠΎ бяха ΠΈΠ·Π±Ρ€Π°Π½ΠΈ JavaScript ΠΈ Duktape? Бяха Ρ€Π°Π·Π³Π»Π΅Π΄Π°Π½ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° Π΅Π·ΠΈΡ†ΠΈ ΠΈ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΠΈ:

  • Lua - Lua 5.1
  • Lua - LuaJIT
  • Javascript - Duktape
  • Javascript - JerryScript
  • Π’Π³Ρ€Π°Π΄Π΅Π½ Python
  • Π’Π³Ρ€Π°Π΄Π΅Π½ Perl

ΠžΡΠ½ΠΎΠ²Π½ΠΈΡ‚Π΅ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ Π·Π° ΠΈΠ·Π±ΠΎΡ€ бяха разпространСниС, Π»Π΅ΠΊΠΎΡ‚Π° Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° двигатСля Π² ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, ниска консумация Π½Π° рСсурси ΠΈ цялостна производитСлност Π½Π° двигатСля, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ бСзопасността Π½Π° въвСТданС Π½Π° ΠΊΠΎΠ΄ Π½Π° Ρ‚ΠΎΠ·ΠΈ Π΅Π·ΠΈΠΊ Π² ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°. Π’ΡŠΠ· основа Π½Π° комбинацията ΠΎΡ‚ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ, JavaScript спСчСли Π½Π° двигатСля Duktape.

РСшавамС практичСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² Zabbix с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° JavaScript

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ Π·Π° ΠΏΠΎΠ΄Π±ΠΎΡ€ ΠΈ тСстванС Π½Π° СфСктивността

Π₯арактСристики Π½Π° Duktape:

β€” Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎ ECMAScript E5/E5.1
β€” Zabbix ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π·Π° Duktape:

  • Zabbix.log() - позволява Π²ΠΈ Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½ΠΈΠ²Π° Π½Π° дСтайлност Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° Π½Π° Zabbix ΡΡŠΡ€Π²ΡŠΡ€Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ възмоТно ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Webhook, със ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°.
  • CurlHttpRequest() - позволява Π²ΠΈ Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ HTTP заявки към ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ сС Π±Π°Π·ΠΈΡ€Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Webhook.
  • atob() ΠΈ btoa() - позволява Π²ΠΈ Π΄Π° ΠΊΠΎΠ΄ΠΈΡ€Π°Ρ‚Π΅ ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°Ρ‚Π΅ Π½ΠΈΠ·ΠΎΠ²Π΅ във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Base64.

Π—ΠΠ‘Π•Π›Π•Π–ΠšΠ. Duktape отговаря Π½Π° стандартитС ACME. Zabbix ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° вСрсията ΠΎΡ‚ 2015 Π³. Π½Π° скрипта. ΠŸΠΎΡΠ»Π΅Π΄Π²Π°Ρ‰ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ са Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Π³Π½Π°Ρ‚ΠΈ..

JavaScript магия

Цялата магия Π½Π° JavaScript сС ΠΊΡ€ΠΈΠ΅ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎΡ‚ΠΎ въвСТданС ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅: Π½ΠΈΠ·ΠΎΠ²ΠΈ, числови ΠΈ Π±ΡƒΠ»Π΅Π²ΠΈ.

Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ какъв Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° трябва Π΄Π° Π²ΡŠΡ€Π½Π΅ стойност.

ΠŸΡ€ΠΈ матСматичСскитС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ стойноститС, Π²ΡŠΡ€Π½Π°Ρ‚ΠΈ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ, сС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚ Π² числа. Π˜Π·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΠ²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π΅ добавянСто, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π°ΠΊΠΎ ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ‚Π΅ Π΅ Π½ΠΈΠ·, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ сС ΠΏΡ€ΠΈΠ»Π°Π³Π° към всички Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈ.

Π—ΠΠ‘Π•Π›Π•Π–ΠšΠ. ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅, ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π½ΠΈ Π·Π° Ρ‚Π°ΠΊΠΈΠ²Π° трансформации, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π² родитСлскитС ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΈ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π°, стойност Π½Π° ΠΈ toString. стойност Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π° сС ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° числово ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ ΠΏΡ€Π΅Π΄ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° toString. ΠœΠ΅Ρ‚ΠΎΠ΄ стойност Π½Π° трябва Π΄Π° Π²ΡŠΡ€Π½Π΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΈ стойности, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ ΠΌΡƒ сС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°.

Извиква сС ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ стойност Π½Π°. Ако Π½Π΅ бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ ΠΈΠ»ΠΈ Π½Π΅ Π²ΡŠΡ€Π½Π΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Π° стойност, ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° toString. Ако ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ toString Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΎ, Ρ‚ΡŠΡ€ΡΠΈ сС стойност Π½Π° Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π° ΠΈ всичко сС повтаря, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° стойността ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ всички стойности Π² ΠΈΠ·Ρ€Π°Π·Π° сС ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΡ‚ към ΡΡŠΡ‰ΠΈΡ Ρ‚ΠΈΠΏ. Ако ΠΎΠ±Π΅ΠΊΡ‚ΡŠΡ‚ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ toString, ΠΊΠΎΠΉΡ‚ΠΎ Π²Ρ€ΡŠΡ‰Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Π° стойност, Ρ‚ΠΎΠ³Π°Π²Π° тя сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° Π½ΠΈΠ·. Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ ΠΎΡ‚ ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±Π°Ρ‡Π΅ Π½Π΅ Π΅ Π½Π΅ΠΏΡ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½ΠΈΠ·.

НапримСр, Π°ΠΊΠΎ Π·Π° Π·Π° ΠΎΠ±Π΅ΠΊΡ‚ 'OBJ' Π΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ toString,

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

ΠΌΠ΅Ρ‚ΠΎΠ΄ toString Π²Ρ€ΡŠΡ‰Π° Ρ‚ΠΎΡ‡Π½ΠΎ Π½ΠΈΠ· ΠΈ ΠΏΡ€ΠΈ добавянС Π½Π° Π½ΠΈΠ· с число ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ слСпСн Π½ΠΈΠ·:

`obj + 1 // '2001'` 

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

Но Π°ΠΊΠΎ ΠΏΡ€Π΅Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ toString, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ Π΄Π° Π²ΡŠΡ€Π½Π΅ число, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΎΠ±Π΅ΠΊΡ‚ΡŠΡ‚ бъдС Π΄ΠΎΠ±Π°Π²Π΅Π½, Ρ‰Π΅ бъдС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Π½Π° матСматичСска опСрация с числово ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ ΠΈ Ρ‰Π΅ бъдС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ ΠΎΡ‚ матСматичСското ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅.

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

`obj + 1 // '2001'`

Π’ Ρ‚ΠΎΠ·ΠΈ случай, Π°ΠΊΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΠΌ добавянС с Π½ΠΈΠ·, сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° Π½ΠΈΠ· ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ слСпСн Π½ΠΈΠ·.

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

Π’ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π·Π° голям Π±Ρ€ΠΎΠΉ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΎΡ‚ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Π½Π° JavaScript.

ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ toString ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ функция, която Ρ‰Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° стойност Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π° с 1.

РСшавамС практичСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² Zabbix с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° JavaScript
ИзпълнСниС Π½Π° скрипта, ΠΏΡ€ΠΈ условиС Ρ‡Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π΅ Ρ€Π°Π²Π½Π° Π½Π° 3 ΠΈ ΡΡŠΡ‰ΠΎ Π΅ Ρ€Π°Π²Π½Π° Π½Π° 4.

ΠšΠΎΠ³Π°Ρ‚ΠΎ сС сравнява с каст (==), ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ сС изпълнява всСки ΠΏΡŠΡ‚ toString с функция Π·Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° стойността. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ с всяко слСдващо сравнСниС стойността сС ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π΅ Ρ‡Ρ€Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° нСсравнСно сравнСниС (===).

РСшавамС практичСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² Zabbix с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° JavaScript
Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Π±Π΅Π· ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° Ρ‚ΠΈΠΏΠ°

Π—ΠΠ‘Π•Π›Π•Π–ΠšΠ. НС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Π½Π΅Π½ΡƒΠΆΠ½ΠΎ сравнСниС Π½Π° Π°ΠΊΡ‚ΡŒΠΎΡ€ΠΈ.

Π—Π° слоТни скриптовС, ΠΊΠ°Ρ‚ΠΎ Webhooks със слоТна Π»ΠΎΠ³ΠΈΠΊΠ°, ΠΊΠΎΠΈΡ‚ΠΎ изискват сравнСниС с ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅, сС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π° стойноститС, ΠΊΠΎΠΈΡ‚ΠΎ Π²Ρ€ΡŠΡ‰Π°Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ Π½Π΅ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΡ ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ.

Webhook Media

Π’ края Π½Π° 2019 Π³. ΠΈ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° 2020 Π³. Π΅ΠΊΠΈΠΏΡŠΡ‚ Π·Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Zabbix Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° Webhooks ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ΄Π²Π°Ρ‚ с дистрибуцията Π½Π° Zabbix.

РСшавамС практичСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² Zabbix с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° JavaScript
Π’Ρ€ΡŠΠ·ΠΊΠ° към докумСнтация

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

  • ΠŸΠΎΡΠ²Π°Ρ‚Π° Π½Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π² JavaScript Π½Π°ΠΏΡ€Π°Π²ΠΈ възмоТно изоставянСто Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ външни скриптовС ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π² Zabbix ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ всяка стойност ΠΈ Π΄Π° я ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π°Ρ‚Π΅ Π² напълно Ρ€Π°Π·Π»ΠΈΡ‡Π½Π° стойност.
  • ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π² Zabbix сС изпълнява ΠΎΡ‚ JavaScript ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Π² Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄, сС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° във функция, която ΠΏΡ€ΠΈΠ΅ΠΌΠ° Π΅Π΄Π½Π° стойност ΠΊΠ°Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ стойност ΠΊΠ°Ρ‚ΠΎ Π½ΠΈΠ· (Π½ΠΈΠ·ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΊΠ°ΠΊΡ‚ΠΎ Ρ†ΠΈΡ„Ρ€Π°, Ρ‚Π°ΠΊΠ° ΠΈ число).
  • Въй ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ…ΠΎΠ΄ΡŠΡ‚ Π΅ функция, Π² края Π½Π° скрипта сС изисква Π²Ρ€ΡŠΡ‰Π°Π½Π΅.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ пСрсонализирани макроси Π² ΠΊΠΎΠ΄Π°.
  • РСсурситС ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈ Π½Π΅ само Π½Π° Π½ΠΈΠ²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π° систСма, Π½ΠΎ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΎ. На ΡΡ‚ΡŠΠΏΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сС разпрСдСлят максимум 10 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Π° RAM ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС ΠΎΡ‚ 10 сСкунди.

РСшавамС практичСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² Zabbix с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° JavaScript

Π—ΠΠ‘Π•Π›Π•Π–ΠšΠ. Бтойността Π½Π° ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅ ΠΎΡ‚ 10 сСкунди Π΅ доста голяма, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° условни хиляди Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ Π·Π° 1 сСкунда спорСд доста β€žΡ‚Π΅ΠΆΡŠΠΊβ€œ сцСнарий Π½Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π±Π°Π²ΠΈ Zabbix. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π½Π΅ сС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π·Π° изпълнСниС Π½Π° ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΈ JavaScript скриптовС Ρ‡Ρ€Π΅Π· Ρ‚Π°ΠΊΠ° Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΈΡ‚Π΅ сСнчСсти Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ (Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ), ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ само Π·Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠ΄Π° си Ρ‡Ρ€Π΅Π· тСста Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΏΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° 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 сСкунди, Zabbix "Ρ…Π°ΠΊΠ²Π°" Π·Π° 29 сСкунди ΠΈ Π² послСдната сСкунда Π·Π°ΠΏΠΎΡ‡Π²Π° Π΄Π° провСрява ΠΈ изчислява. Π’ΠΎΠ²Π° създава опашка ΠΈ засяга производитСлността. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π° сС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° фиксирани ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ само Π°ΠΊΠΎ наистина Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

Π’ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½ΠΎΡ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° JavaScript Π² Π΅Π΄ΠΈΠ½ Ρ€Π΅Π΄, която ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° градуси ΠΏΠΎ Π€Π°Ρ€Π΅Π½Ρ…Π°ΠΉΡ‚ Π² градуси ΠΏΠΎ Π¦Π΅Π»Π·ΠΈΠΉ:

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

Π‘ΡŠΡ€Π·ΠΎ ΠΈ лСсно Π΅, Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ Π½Π΅Π½ΡƒΠΆΠ½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ ΠΈ Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚Π΅ история Π·Π° тях, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ гъвкави ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.

РСшавамС практичСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² Zabbix с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° JavaScript

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

Но Π°ΠΊΠΎ Π² Ρ…ΠΈΠΏΠΎΡ‚Π΅Ρ‚ΠΈΡ‡Π½Π° ситуация Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ получСния Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с която ΠΈ Π΄Π° Π΅ константа, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π° Π² макроса, трябва Π΄Π° сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ΡŠΡ‚ стойност Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π° сС Π² Π½ΠΈΠ·. ΠŸΡ€ΠΈ опСрация Π·Π° добавянС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ Π΄Π²Π° Π½ΠΈΠ·Π° просто сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚ Π² Π΅Π΄ΠΈΠ½.

РСшавамС практичСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² Zabbix с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° JavaScript

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

Π—Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ матСматичСска опСрация, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚Π΅ Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ стойности Π² Ρ†ΠΈΡ„Ρ€ΠΎΠ² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. Π—Π° Ρ†Π΅Π»Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ функцията parseInt(), ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π° цяло число, функция parseFloat(), ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π° дСсСтичСн Π·Π½Π°ΠΊ ΠΈΠ»ΠΈ функция Π±Ρ€ΠΎΠΉ, ΠΊΠΎΠΉΡ‚ΠΎ Π²Ρ€ΡŠΡ‰Π° цяло число ΠΈΠ»ΠΈ дСсСтичСн Π·Π½Π°ΠΊ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ 2

ΠŸΠΎΠ»ΡƒΡ‡Π΅Ρ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π² сСкунди Π΄ΠΎ края Π½Π° сСртификата.

Π‘ΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅: услуга ΠΈΠ·Π΄Π°Π²Π° Π΄Π°Ρ‚Π° Π½Π° валидност Π½Π° сСртификата във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ β€ž12 Ρ„Π΅Π²Ρ€ΡƒΠ°Ρ€ΠΈ 12:33:56 2022 GMTβ€œ.

Π’ ECMAScript5 date.parse() ΠΏΡ€ΠΈΠ΅ΠΌΠ° Π΄Π°Ρ‚Π° във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ISO 8601 (Π“Π“Π“Π“-ММ-Π”Π”Π’Π§Π§:ΠΌΠΌ:сс.ссссZ). НСобходимо Π΅ Π΄Π° Π³ΠΎ кастнСтС Π½ΠΈΠ· във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ 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 Π³. Π΄ΠΎ някакъв ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅Ρ‚ΠΎ. ΠŸΠΎΡ‡Ρ‚ΠΈ нСвъзмоТно Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ Π² получСния Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π² Ρ‚Ρ€ΠΈΠ³Π΅Ρ€ΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Zabbix Π²ΠΈ позволява Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ само с макроси {Π”Π°Ρ‚Π°} ΠΈ {Time}, ΠΊΠΎΠΈΡ‚ΠΎ Π²Ρ€ΡŠΡ‰Π°Ρ‚ Π΄Π°Ρ‚Π°Ρ‚Π° ΠΈ часа Π² ΡƒΠ΄ΠΎΠ±Π΅Π½ Π·Π° потрСбитСля Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.

  • Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° Π΄Π°Ρ‚Π° Π² JavaScript във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Unix Timestamp ΠΈ Π΄Π° я ΠΈΠ·Π²Π°Π΄ΠΈΠΌ ΠΎΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π°Ρ‚Π° Π΄Π°Ρ‚Π° Π½Π° ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π½Π° сСртификата, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ броя милисСкунди ΠΎΡ‚ сСга Π΄ΠΎ ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅Ρ‚ΠΎ Π½Π° сСртификата.

`now = Date.now();`

  • РаздСлямС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π°Ρ‚Π° стойност Π½Π° хиляда, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ сСкунди Π² Zabbix.

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

Π’ Ρ‚Ρ€ΠΈΠ³Π΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° посочитС ΠΈΠ·Ρ€Π°Π·Π° 'послСдно', послСдвано ΠΎΡ‚ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Ρ†ΠΈΡ„Ρ€ΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° броя сСкунди Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π°, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ искатС Π΄Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² сСдмици. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Ρ‚Ρ€ΠΈΠ³Π΅Ρ€ΡŠΡ‚ Ρ‰Π΅ ΡƒΠ²Π΅Π΄ΠΎΠΌΠΈ, Ρ‡Π΅ ΡΠ΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΡŠΡ‚ ΠΈΠ·Ρ‚ΠΈΡ‡Π° слСд сСдмица.

Π—ΠΠ‘Π•Π›Π•Π–ΠšΠ. ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° parseInt() във функция Π²Ρ€ΡŠΡ‰Π°Π½Π΅Π·Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° Π΄Ρ€ΠΎΠ±Π½ΠΎΡ‚ΠΎ число, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ ΠΎΡ‚ Π΄Π΅Π»Π΅Π½Π΅Ρ‚ΠΎ Π½Π° милисСкунди, Π² цяло число. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ parseFloat() ΠΈ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΉΡ‚Π΅ частични Π΄Π°Π½Π½ΠΈ.

Π“Π»Π΅Π΄Π°ΠΉΡ‚Π΅ Ρ€Π΅ΠΏΠΎΡ€Ρ‚Π°ΠΆ

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€