ウィジェット・テンプレートの作成

ウィジェットの作成と修正には、ホーム(Home)>ダッシュボード(Dashboard) ページを使用します。Traffic Sentinel は、多くのタイプのデータを設定することが出来る、いくつかの標準ウィジェットを提供します。 ( ダッシュボードのカスタマイズ チュートリアル参照 )

Traffic Sentinelのウィジェット機能では、XML(eXtensible Markup Language)で記述されたテンプレート文書を利用します。 XML文書によりレポートの構造(タイトル、見出し、セクションおよび本文)が定義されます。 ウィジェット テンプレートに含まれているスクリプトにより、クエリの作成、結果の処理、およびテーブルやチャートのレポートへの追加が行われます。

このチュートリアルでは、Traffic Sentinelに新しい機能を追加するウィジェット テンプレートを作成しインストールする方法について説明します。 このチュートリアルの学習に入る前に、Traffic Sentinelのスクリプティング機能について紹介しているクエリのスクリプト化のチュートリアルを学習することをお勧めします。

XML

下の例はテンプレートの基本的要素を示しています。 まず、以下の内容の time.xml という新規テンプレート ファイルを作成します。:

<widget name="Time" type="html" refresh="60">
  <link>//www.inmon.com/tutorials2/widgettemplate.php</link>
  <description>This widget contains tutorial Time example.</description>
  <input name="datefmt" type="string" label="Format" value="yy-mm-dd HH:mm"/>
  <script><![CDATA[
print("<p>");
print(formatdate(new Date(), datefmt));
println("</p>");
  ]]></script>
</widget>

この簡単な例では、ウィジェットテンプレートの基本コンポーネントについて説明しています。 各テンプレート(template)にはカテゴリー(category)が割り当てられ、名前(name)が付けられます。 また、テンプレートについての説明(description)も設定されます。 このウィジェット(widget)には、名前(name)タイプ(type) (あるいは、随時 リフレッシュ(refresh)する時間(秒))が、与えられます。2つにサポートされたウィジェットのタイプがあります。:

  • html このウィジェットは、テキストでフォーマットされたHTMLを表示。.
  • png このウィジェットは、チャートを表示。.
リンク(link)は、ウィジェットに関連する追加情報を参照します。 説明(description)は、ウィジェットに関連する追加情報を提供します。ひとつのインプット(input)は、スクリプト(script)の属性を定義します。

ホーム(Home)>インストール(Install)ページを使用して新しいテンプレートファイルをインストールすることが出来ます。(そのファイルには、.xml の拡張子が必要です)。

スクリプティング

クエリのスクリプト化 では、Traffic Sentinelの基本的なスクリプティング テクニックについて説明しています。 一般に、新規スクリプトを作成する時には、レポート(Report)>スクリプト(Script)インターフェースを用いてスクリプトを実際に試してみるのが最良の方法です。 基本的なクエリが正常に動作するようになったら、それをウィジェットテンプレートに組み込みます。

Traffic Sentinelは、ウィジェットテンプレート用の追加のJavascriptファンクションを提供します。

print() と println()

time.xml の例では、どのようにして、print()println() の機能が、HTML出力を生成するのに使用することができるかを示しています。また、これはウィジェット出力領域に対して適切なフォームで表示されるかを注意する必要があります。適切なフォームでないHTMLは、ウィジェットページ全体の障害につながります。

Widget(ウィジェット)

Widgetクラスは、ウィジェット内での情報の表示を単純化する機能を提供します。以下のセクションは、どのようにしてWidgetクラスがテーブルやチャートを表示しているかを示しています。

Table(テーブル)

Tableクラスは、表形式データを表示します。クエリのスクリプト化のチュートリアルでは、クエリの結果としてテーブルを取得する方法を紹介しています。 下のスクリプトは、クエリの結果をウィジェットに追加する方法を示しています。

<widget name="Top IP Sources Table" type="html" refresh="60" >
  <description>Top sources of bytes.</description>
  <input name="interval" type="interval" value="last5minutes" >
    <option value="last5minutes" >Last 5 Minutes</option>
    <option value="last10minutes" >Last 10 Minutes</option>
  </input>
  <script>
var w = Widget.current();
var q = Query.topN("rttraffic","ipsource,bytes",null,interval,"bytes",5);
var table = q.run();
w.table(table);
  </script>
</widget>
注意: このスクリプトはcategoryおよびintervalという2つのデータを入力します。これらの入力データのデフォルト値は、それぞれ"ipsource"および"today"です。

Tableクラスは、他のタイプの表形式データをレポートに追加するのにも役立ちます。

このウィジェットでは、テーブルを表示するための、html パラメータを type にセットします。60秒間隔で更新するために refresh60 をセットします。interval では、デフォルト値としてlast5minutes を持ち、単一の入力が許される設定を行なっています。

Chart(チャート)

Chartクラスは、ウィジェット内に含めるチャートを組み立てるのに使用します。

以下の例は、どのようにして、表形式のクエリ結果から組み立てられるかを示しています。

<widget name="Top IP Sources Chart" type="png" refresh="60">
  <description>Chart showing top IP sources by number of bytes.</description>
  <input name="interval" type="interval" value="last5minutes" >
    <option value="last5minutes" >Last 5 Minutes</option>
    <option value="last10minutes" >Last 10 Minutes</option>
  </input>
  <script>
var w = Widget.current();
var q = Query.topN("rttraffic","ipsource,bytes",null,interval,"bytes",5);
var table = q.run();
var chart = Chart.singleSeries(
              "bar", "Top IP Sources",
              table, "IP Source", 0, "Bytes", 1);
w.chart(chart);
  </script>
</widget>

Inputs(インプット)

<input /> タグは、ウィジェットテンプレートの重要なパートで、ダッシュボード・ページで値を編集することを可能とします(ダッシュボードのカスタマイズ 参照)。Inputs は、それぞれに異なったセッティングを持つようにインスタンス化するために複数のウィジェットのコピーを可能とします。

input は、以下の属性を持ちます。:

  • name javascript内で生成される変数の名称。.
  • type 変数のタイプ (下を参照).
  • label 入力フィールドのラベルとして形式上使われるユーザ・フレンドリーな名称。
  • value 変数のデフォルト値。
  • required デフォルトでは、全ての inputs は、スクリプトが実行される前に、用意する必要があります。required に、"false"を設定することで、その入力をオプショナル(選択)形式にします。

全ての input には、少なくとも、nametype は必要です。

もし、input で、一覧の形式を示す場合は(例;規定の値のセットのひとつのみを持つ)、<option> 句を使うことができます。(まず、 chartの例 を参照して下さい。).

もし、input がオプショナル(例: request&eq;"false")の場合、スクリプトは、変数が存在すると仮定してはいけません。以下の一節は、どのようにして、オプショナル・インプットの存在をテストするかを示しています。

<input name="height" type="integer" />
<script>
var h = 100;
if(typeof(height) != 'undefined') h = height;

Inputのtypeは、変数のチェックに使用され、それらが正しいかを確認します。input 値がフォーム内に入力された時、それらはチェックされ、もし入力に不正値があればユーザに通知されます。さらに、inputのtypeは、入力フィールドに入力された値が、提供されている共通のオプションとして適切かをユーザに支援するのに使用されます。

以下の types が定義されています。:

  • string ストリング(string)を許可。
  • integer 正の整数(positive integer)あるいは、ゼロを許可。
  • address アドレスを許可。Addressは、さらに、付加されたアドレス・タイプにより制限を受けます(例: address.ip は、IPアドレスのみを許可)。
  • subnet サブネット(CIDR表記で指定) を、許可。
  • protocol プロトコル(例:TCP:80)を許可。もし、特定のプロトコルタイプの入力を制限したいのであれば、付加されたtypeによって、さらに制限することができます(例: protocol.TCP は、TCP プロトコルのみを許可)。
  • agent エージェントアドレス(agent address)を許可。
  • interface スイッチ/ルーター・ポート(switch/router port)を許可。
  • path ネットワークの部分を特定するための、allows site>zone>group>agent 形式のパス(path)を許可。
  • view view input は、database viewから、属性名を取得するのに使用されます。view input は、常に view name (例:view.historytrmx or view.rttraffic)で修飾される必要があります。オプションとして、key や value (例:view.historytrmx.key)で修飾することもできます。
  • filter filter inputは、クエリ内で適用される演算子によるフィルター表現を取得するのに使用されます。filter input は、常に view name (例:filter.historytrmx)で修飾される必要があります。
  • interval クエリ内で期間(interval)として指定できる、経過した時間(例:"today")。
  • group トレンド・クエリ内で使用される時間のグループ(grouping)(例:"hour").

typeの末尾が [] で終了する場合、指定されたタイプの値のコンマ区切りのリストを許可します。(例: view.rttraffic.key[])。