activationByGroupingKey エレメント

<activationByGroupingKey> エレメントには、<groupingKey> エレメントで定義されているルール・インスタンスをアクティブ化および非アクティブ化できるイベントを指定するエレメントが含まれます。<groupingKey> エレメントは、フィルターおよびタイマー・ルールに対しては無効であるため、<activationByGroupingKey> エレメントはこれらのルールに適用されません。

詳細

<activationByGroupingKey> エレメントで提供される関数は、グループ化キーを定義するルールで使用できます。これを使用すると、グループ化キーに基づいてルール・インスタンスのアクティブ化および非アクティブ化を制御できます。<activationByGroupingKey> エレメントをコーディングすると、<activationByGroupingKey> 内の <activateOnEvent> の条件および <deactivateOnEvent> の条件に基づいて、各ルール・インスタンスを別個にアクティブ化または非アクティブ化できるようになります。

以下の例は、計算ルールにおける <activationByGroupingKey> エレメントの使用方法を示しています。

<computationRule name="StockReporter">
	<variable dataType="java.lang.Integer" name="totalSharesTraded">
		<varInitializer expressionLanguage="java">
			return new Integer(0);
		</varInitializer>
	</variable>

	<activationInterval>
		<activationTime>
			<start>
				<inactiveWhenLoaded/>
			</start>
		</activationTime>
		<activationByGroupingKey>
			<activateOnEvent>
				<eventType type="StartReporting"/>
			</activateOnEvent>
		</activationByGroupingKey>
	</activationInterval>

	<eventSelector>
		<eventType type="StockSharesTraded"/>
	</eventSelector>

	<groupingKey>
		<attributeName>stockSymbol</attributeName>
	</groupingKey>

	<computeFunction assignTo="totalSharesTraded" expressionLanguage="java">
		return new Integer(act_lib.getIntVariable("totalSharesTraded")
 											+ act_event.getIntAttribute("sharesTraded"));
	</computeFunction>

	<timeWindow>
		<timeInterval unit="ISO-8601" duration="PT10M"/>
	</timeWindow>

	<onTimeWindowComplete>
		<action expressionLanguage="java">
			StockReport.createReport(act_eventList.get(0).getStringAttribute("stockSymbol"),
 															act_lib.getIntVariable("totalSharesTraded"));
		</action>
	</onTimeWindowComplete>
</computationRule>

属性

<activationByGroupingKey> には属性がありません。

このエレメントを含むエレメント

<activationByGroupingKey> は、以下のエレメントに含まれます。

このエレメントに含まれるエレメント

<activationByGroupingKey> には以下のエレメントが含まれます。

以下のエレメントは、表示されている順序でコーディングする必要があります。エレメントがオプションである場合、コーディングする必要はありませんが、コーディングするエレメントはすべて正しい順序になっている必要があります。

表 1. <activationByGroupingKey> エレメントに含まれるエレメント
エレメント 必須/オプション
<activateOnEvent> オプション。指定できるのは 0 回または 1 回です。
<deactivateOnEvent> オプション。指定できるのは 0 回または 1 回です。

<activationInterval> エレメントおよび <activationByGroupingKey> エレメント間の関係

<activateOnEvent> エレメントおよび <deactivateOnEvent> エレメントは、以下の両方のエレメントに含まれます。
  • <activationInterval>
  • <activationByGroupingKey> (<activationInterval> にも含まれる)

ルールの振る舞いは、現行のルール・アクティビティーと、<activationInterval> エレメントおよび <activationByGroupingKey> エレメントに含まれる <activateOnEvent> と <deactivateOnEvent> の定義間の相互作用に応じて異なる場合があります。以下の例は、これらの定義がどのように相互作用することがあるか示します。

この例では、保守モードのシステムのイベントを抑制し、保守期間の終了時点で、抑制されたイベント数のサマリー・レポートが提供されるよう重複ルールを定義しています。

デフォルトでは、グループ化キーを定義するルールは、すべてのグループ化キー値の処理を許可します。したがって、イベントがルールのイベント選択基準を満たすと、すべてのルール・インスタンスがアクティブになり、グループ化キーの任意の値に従ってこれらのイベントを受け入れられるようになります。ルールのアクティブ化間隔は、ルールにグループ化キーが含まれない場合と同じです。これは、ルールのイベント選択基準を満たすイベントは、基本的にすべて処理されるためです。

以下の例では、グループ化キーは hostname であり、<activationInterval> エレメント内の定義が以下のアクションを指定しています。
  1. StartMaintenanceModeAllHosts タイプのイベントを受信したときは、すべてのルール・インスタンスをアクティブ化します。
  2. 2 時間後、または StopMaintenanceModeAllHosts タイプのイベントを受信した時点で、すべてのルール・インスタンスを非アクティブ化します。
<duplicateRule name="Maintenance_Supression">
  <activationInterval>
    <activationTime>
      <start>
        <inactiveWhenLoaded/>
      </start>
      <stop>
        <after duration="PT2H" unit="ISO-8601"/>
      </stop>
    </activationTime>
    <activateOnEvent>
      <eventType type="StartMaintenanceModeAllHosts"/>
    </activateOnEvent>
    <deactivateOnEvent>
      <eventType type="StopMaintenanceModeAllHosts"/>
    </deactivateOnEvent>
  </activationInterval>
  <groupingKey missingAttributeHandling="ignoreEvent">
    <attributeName>hostname</attributeName>
  </groupingKey>
  <timeWindow>
    <runUntilDeactivated/>
  </timeWindow>
  <onDetection>
    <action expressionLanguage="java" name="DropEvent">
      <![CDATA[act_lib.exitRuleSet();]]>
    </action>
  </onDetection>
  <onTimeWindowComplete>
    <action expressionLanguage="java" name="CreateSummaryOfSupressedEvents">
      <![CDATA[Helper.createSummaryEvent("MaintenanceSummary", act_eventList, act_lib);]]>
    </action>
  </onTimeWindowComplete>
</duplicateRule>

場合により、どのルール・インスタンスをいつアクティブにするか、制御する必要があるかもしれません。そのような場合は、<activationByGroupingKey> エレメントをコーディングします。

上記の例を拡張した以下の例では、グループ化キー値を使用して、処理可能なルール・インスタンスを選択する方法を示します。<activationByGroupingKey> エレメント内の定義は、以下のアクションを指定します。
  1. 特定のホスト名について StartMaintenanceMode タイプのイベントが受信された場合、そのホスト名のルール・インスタンスの処理を許可します。
  2. これらのルール・インスタンスを、アクティブ化の 2 時間後、またはそれぞれのホスト名について StopMaintenanceMode タイプのイベントが受信されたときに非アクティブ化します。
    <activationByGroupingKey>
      <activateOnEvent>
        <eventType type="StartMaintenanceMode"/>
        <stopAfter duration="PT2H" unit="ISO-8601"/>
      </activateOnEvent>
      <deactivateOnEvent>
        <eventType type="StopMaintenanceMode"/>
      </deactivateOnEvent>
    		</activationByGroupingKey>
以下の文は、<activationByGroupingKey> エレメントをコーディングした場合に発生する状況を要約したものです。
  • <activateOnEvent> エレメントが <activationByGroupingKey> エレメント内でコーディングされると、<activationByGroupingKey> <activateOnEvent> 条件と一致するイベントのグループ化キー値を共有するイベントのみが処理を許可されます。
  • <deactivateOnEvent> エレメントが <activationByGroupingKey> エレメント内でコーディングされると、<activationByGroupingKey> <deactivateOnEvent> 条件と一致するイベントのグループ化キー値を共有するイベントの処理が許可されません

さまざまなアクティブ化および非アクティブ化定義のルール状態に対する影響

表 2 および 表 3 では、さまざまなアクティブ化および非アクティブ化定義がルールの状態にどのように影響するかを示しています。この表では、以下の規則が使用されます。
  • A はアクティブ化イベントです。
  • "A[x]" という表記では、x がグループ化キー値を示します。例えば、A[1] はグループ化キー値 1 を持つアクティブ化イベントです。
  • D は非アクティブ化イベントです。
  • "D[x]" という表記では、x がグループ化キー値を示します。例えば、D[1] はグループ化キー値 1 を持つ非アクティブ化イベントです。
表 2. アクティブ化定義の差異に基づくルール状態の変化
開始時のルール状態 場合によりルール状態が影響を受ける対象 終了時のルール状態
非アクティブ <activationInterval> <activationTime> <start> で定義された時間
  1. ルールはアクティブ化されます。
  2. <onActivation> アクションが実行されます。
  3. すべてのグループ化キー値が許可されます。
activate() メソッド
<activationInterval> <activateOnEvent> で定義されたイベント A
<activationByGroupingKey> <activateOnEvent> で <stopAfter> を使用せずに 定義されたイベント A[1]
  1. ルールはアクティブ化されます。
  2. <onActivation> アクションが実行されます。
  3. グループ化キー値 1 のみが許可されます。このルール・インスタンスについてルール・パターンが一致した場合、グループ化キー値 1 は許可されなくなります。
<activateOnEvent> で <stopAfter> を使用して 定義されたイベント A[2]
  1. ルールはアクティブ化されます。
  2. <onActivation> アクションが実行されます。
  3. グループ化キー値 2 のみが、<stopAfter> エレメントで指定された継続時間のみ許可されます。このルール・インスタンスのルール・パターンは、この継続時間中複数回一致することがあります。
  • アクティブ
  • すべてのグループ化キー値の許可
<activationInterval> <activationTime> <start> で定義された時間 ルールの状態は変化しません。開始時のルール状態と同じです。
activate() メソッド
<activationInterval> <activateOnEvent> で定義されたイベント A
<activationByGroupingKey> <activateOnEvent> で <stopAfter> を使用せずに 定義されたイベント A[1]
<activateOnEvent> で <stopAfter> を使用して 定義されたイベント A[2]
  • アクティブ
  • <activationByGroupingKey> <activateOnEvent> 定義に基づいてルール・インスタンスをトリガーしたグループ化キー値のみ許可
<activationInterval> <activationTime> <start> で定義された時間 ルールの状態は変化しません。開始時のルール状態と同じです。
activate() メソッド
<activationInterval> <activateOnEvent> で定義されたイベント A すべてのグループ化キー値が許可されます。
<activationByGroupingKey> <activateOnEvent> で <stopAfter> を使用せずに 定義されたイベント A[1]
  • 前に許可されていたグループ化キー値に加え、グループ化キー値 1 が許可されるようになります。
  • このルール・インスタンスについてルール・パターンが一致した場合、グループ化キー値 1 は許可されなくなります。
<activateOnEvent> で <stopAfter> を使用して 定義されたイベント A[2]
  • 前に許可されていたグループ化キー値に加え、グループ化キー値 2 が許可されるようになります。
  • この値は、<stopAfter> エレメントによって指定された継続時間のみ許可されます。
  • このルール・インスタンスのルール・パターンは、この継続時間中複数回一致することがあります。
  • アクティブ
  • <activationByGroupingKey> <deactivateOnEvent> 定義に基づいて許可されていない値を除きすべてのグループ化キー値を許可
<activationInterval> <activationTime> <start> で定義された時間 ルールの状態は変化しません。開始時のルール状態と同じです。
activate() メソッド
<activationInterval> <activateOnEvent> で定義されたイベント A すべてのグループ化キー値が許可されます。
<activationByGroupingKey> <activateOnEvent> で <stopAfter> を使用せずに 定義されたイベント A[1] 前に許可されていたグループ化キー値に加え、グループ化キー値 1 が許可されるようになります。
<activateOnEvent> で <stopAfter> を使用して 定義されたイベント A[2] 前に許可されていたグループ化キー値に加え、グループ化キー値 2 が許可されるようになります。
表 3. 非アクティブ化定義の差異に基づくルール状態の変化
開始時のルール状態 場合によりルール状態が影響を受ける対象 終了時のルール状態
非アクティブ <activationInterval> <activationTime> <stop> で定義された時間 ルールの状態は変化しません。開始時のルール状態と同じです。
deactivate() メソッド
<activationInterval> <deactivateOnEvent> で定義されたイベント D
<activationByGroupingKey> <deactivateOnEvent> で定義されたイベント D[1]
イベント A[2] について、<activationByGroupingKey> <activateOnEvent> <stopAfter> で定義された継続時間が終了します。
  • アクティブ
  • すべてのグループ化キー値の許可
<activationInterval> <activationTime> <stop> で定義された時間
  1. すべてのルール・インスタンスが非アクティブ化されます。
  2. <onDeactivation> アクションが実行されます。
  3. ルールは非アクティブ化されます。
deactivate() メソッド
<activationInterval> <deactivateOnEvent> で定義されたイベント D
<activationByGroupingKey> <deactivateOnEvent> で定義されたイベント D[1]
  • グループ化キー値 1 は許可されなくなります。
  • グループ化キー値 1 を持つルール・インスタンスがアクティブである場合、非アクティブ化されます。
イベント A[2] について、<activationByGroupingKey> <activateOnEvent> <stopAfter> で定義された継続時間が終了します。 グループ化キー値 2 を持つルール・インスタンスが非アクティブ化されます。
  • アクティブ
  • <activationByGroupingKey> <activateOnEvent> 定義に基づいてルール・インスタンスをトリガーしたグループ化キー値のみ許可
<activationInterval> <activationTime> <stop> で定義された時間
  1. すべてのルール・インスタンスが非アクティブ化されます。
  2. <onDeactivation> アクションが実行されます。
  3. ルールは非アクティブ化されます。
deactivate() メソッド
<activationInterval> <deactivateOnEvent> で定義されたイベント D
<activationByGroupingKey> <deactivateOnEvent> で定義されたイベント D[1]
  • グループ化キー値 1 は許可されなくなります。
  • グループ化キー値 1 を持つルール・インスタンスがアクティブである場合、非アクティブ化されます。
イベント A[2] について、<activationByGroupingKey> <activateOnEvent> <stopAfter> で定義された継続時間が終了します。
  • グループ化キー値 2 は許可されなくなります。
  • グループ化キー値 2 を持つルール・インスタンスが非アクティブ化されます。
  • アクティブ
  • <activationByGroupingKey> <deactivateOnEvent> 定義に基づいて許可されていない値を除きすべてのグループ化キー値を許可
<activationInterval> <activationTime> <stop> で定義された時間
  1. すべてのルール・インスタンスが非アクティブ化されます。
  2. <onDeactivation> アクションが実行されます。
  3. ルールは非アクティブ化されます。
deactivate() メソッド
<activationInterval> <deactivateOnEvent> で定義されたイベント D
<activationByGroupingKey> <deactivateOnEvent> で定義されたイベント D[1]
  • グループ化キー値 1 は許可されなくなります。
  • グループ化キー値 1 を持つルール・インスタンスがアクティブである場合、非アクティブ化されます。
イベント A[2] について、<activationByGroupingKey> <activateOnEvent> <stopAfter> で定義された継続時間が終了します。 グループ化キー値 2 を持つルール・インスタンスが非アクティブ化されます。