Sidebar

Become a monitoring expert!
Sign up for Zabbix training

4 JavaScript のプリプロセッシング

概要

ここでは、JavaScriptによるプリプロセッシングについて詳しく説明します。

JavaScriptのプリプロセッシング

JavaScriptのプリプロセッシングは、JavaScriptの関数を1つのパラメータ'value'と ユーザー提供の関数本体で呼び出すことで行われます。 プリプロセッシングの結果は、この関数から返される値です。 例えば、華氏から摂氏への変換を行う場合、ユーザーは次のように入力する必要があります。

return (value - 32)  * 5 / 9

JavaScript のプリプロセスパラメータは、server でJavaScript関数にラップされます。

function (value)
       {
          return (value - 32) * 5 / 9
       }

入力パラメータ'value'は常に文字列として渡されます。戻り値はいくつかの例外とともに
自動的に ToString() メソッドで文字列に変換されます (失敗した場合は、エラーが文字列として返されます)

  • 未定義の値を返すとエラーになります。
  • null値を返すと、入力値が破棄されます。
    Custom on fail' アクションの 'Discard value' プリプロセスのようなものです。

エラーは、値/オブジェクト(通常、文字列またはErrorオブジェクト)を投げることで返されます。

例:

if (value == 0)
           throw "Zero input value"
       return 1/value

各スクリプトには10秒間の実行タイムアウトが設定されており、超過するとエラーを返します。
(タイムアウトが発生するまでには、もっと時間がかかる場合があります)
64メガバイトのヒープ制限があります。

JavaScriptのプリプロセスステップのバイトコードはキャッシュされ、次回のステップ適用時に再利用されます。
アイテムのプリプロセスステップを変更すると、キャッシュされたスクリプトはリセットされ、後で再コンパイルされます。

連続したランタイムエラー(3回連続)は、あるスクリプトが次のスクリプトの実行環境を破壊する可能性を
軽減するために、エンジンが再初期化されます。この動作はDebugLevel4以上でログに記録されます。

JavaScriptの前処理は、Duktape(https://duktape.org/) JavaScript エンジンで実装されています。

こちらもご覧ください:
Additional JavaScript objects and globalfunctions

スクリプトでマクロを使用する

JavaScriptのコードの中で、ユーザーマクロを使用することができます。
スクリプトにユーザーマクロが含まれている場合、これらのマクロは、特定のプリプロセスを実行する前に、
server / proxy によって解決されます。注意点としてはフロントエンドで前処理ステップをテストする場合、
マクロの値は引き出されないので、手動で入力する必要があります。

マクロがその値で置き換えられるとき、コンテキストは無視されます。
マクロの値はそのままコードに挿入されるため、マクロの値を挿入する前にエスケープを追加することはできません。
このため,場合によってはJavaScriptのエラーを引き起こす可能性があることをご承知おきください。

以下の例では、受信した値が{$THRESHOLD}マクロの値を超えた場合、代わりに閾値(存在する場合)が返されます。

var threshold = '{$THRESHOLD}';
       return (!isNaN(threshold) && value > threshold) ? threshold : value;