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> 元素期間發生的事件:
  • 在 <activationByGroupingKey> 元素中編碼 <activateOnEvent> 元素時,只能處理共用符合 <activationByGroupingKey> <activateOnEvent> 條件之事件分組鍵值的事件。
  • 在 <activationByGroupingKey> 元素中編碼 <deactivateOnEvent> 元素時, 容許處理共用符合 <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() 方法
事件 A,在 <activationInterval> <activateOnEvent> 內定義
事件 A[1],在 <activationByGroupingKey> <activateOnEvent> 內定義 ( <stopAfter>)
  1. 已啟用規則。
  2. 執行 <onActivation> 動作。
  3. 只接受值為 1 的分組鍵值。當規則型樣符合此規則實例時,不再接受值為 1 的分組鍵值。
事件 A[2],在 <activateOnEvent> 內定義 (具有 <stopAfter>)
  1. 已啟用規則。
  2. 執行 <onActivation> 動作。
  3. 只接受值為 2 的分組鍵值,而且它只能用於 <stopAfter> 元素所指定的期間。此規則實例的規則型樣可在此期間內多次符合。
  • 作用中
  • 接受所有分組鍵值
<activationInterval> <activationTime> <start> 內定義的時間 規則狀態未發生任何變更。與起始規則狀態相同。
activate() 方法
事件 A,在 <activationInterval> <activateOnEvent> 內定義
事件 A[1],在 <activationByGroupingKey> <activateOnEvent> 內定義 ( <stopAfter>)
事件 A[2],在 <activateOnEvent> 內定義 (具有 <stopAfter>)
  • 作用中
  • 只接受依據 <activationByGroupingKey> <activateOnEvent> 定義觸發規則實例的分組鍵值
<activationInterval> <activationTime> <start> 內定義的時間 規則狀態未發生任何變更。與起始規則狀態相同。
activate() 方法
事件 A,在 <activationInterval> <activateOnEvent> 內定義 接受所有分組鍵值。
事件 A[1],在 <activationByGroupingKey> <activateOnEvent> 內定義 ( <stopAfter>)
  • 除了先前接受的分組鍵值,現在也接受值為 1 的分組鍵值。
  • 當規則型樣符合此規則實例時,不再接受值為 1 的分組鍵值。
事件 A[2],在 <activateOnEvent> 內定義 (具有 <stopAfter>)
  • 除了先前接受的分組鍵值,現在也接受值為 2 的分組鍵值。
  • 此值只能用於 <stopAfter> 元素所指定的期間。
  • 此規則實例的規則型樣可在此期間內多次符合。
  • 作用中
  • 接受所有的分組鍵值 (除了基於 <activationByGroupingKey> <deactivateOnEvent> 定義而不接受的值之外)
<activationInterval> <activationTime> <start> 內定義的時間 規則狀態未發生任何變更。與起始規則狀態相同。
activate() 方法
事件 A,在 <activationInterval> <activateOnEvent> 內定義 接受所有分組鍵值。
事件 A[1],在 <activationByGroupingKey> <activateOnEvent> 內定義 ( <stopAfter>) 除了先前接受的分組鍵值,現在也接受值為 1 的分組鍵值。
事件 A[2],在 <activateOnEvent> 內定義 (具有 <stopAfter>) 除了先前接受的分組鍵值,現在也接受值為 2 的分組鍵值。
表 3. 規則狀態會根據不同的停用定義而變更
起始規則狀態 規則狀態會受下列潛在因素影響 結束規則狀態
不作用 <activationInterval> <activationTime> <stop> 內定義的時間 規則狀態未發生任何變更。與起始規則狀態相同。
deactivate() 方法
事件 D,在 <activationInterval> <deactivateOnEvent> 內定義
事件 D[1],在 <activationByGroupingKey> <deactivateOnEvent> 內定義
在 <activationByGroupingKey> <activateOnEvent> <stopAfter> 內定義的期間遇到事件 A[2] 時結束
  • 作用中
  • 接受所有分組鍵值
<activationInterval> <activationTime> <stop> 內定義的時間
  1. 已停用所有規則實例。
  2. 執行 <onDeactivation> 動作。
  3. 已停用規則。
deactivate() 方法
事件 D,在 <activationInterval> <deactivateOnEvent> 內定義
事件 D[1],在 <activationByGroupingKey> <deactivateOnEvent> 內定義
  • 不再接受值為 1 的分組鍵值。
  • 如果分組鍵值為 1 的規則實例處於作用中狀態,則會停用它。
在 <activationByGroupingKey> <activateOnEvent> <stopAfter> 內定義的期間遇到事件 A[2] 時結束 已停用分組鍵值為 2 的規則實例。
  • 作用中
  • 只接受依據 <activationByGroupingKey> <activateOnEvent> 定義觸發規則實例的分組鍵值
<activationInterval> <activationTime> <stop> 內定義的時間
  1. 已停用所有規則實例。
  2. 執行 <onDeactivation> 動作。
  3. 已停用規則。
deactivate() 方法
事件 D,在 <activationInterval> <deactivateOnEvent> 內定義
事件 D[1],在 <activationByGroupingKey> <deactivateOnEvent> 內定義
  • 不再接受值為 1 的分組鍵值。
  • 如果分組鍵值為 1 的規則實例處於作用中狀態,則會停用它。
在 <activationByGroupingKey> <activateOnEvent> <stopAfter> 內定義的期間遇到事件 A[2] 時結束
  • 不再接受值為 2 的分組鍵值。
  • 已停用分組鍵值為 2 的規則實例。
  • 作用中
  • 接受所有的分組鍵值 (除了基於 <activationByGroupingKey> <deactivateOnEvent> 定義而不接受的值之外)
<activationInterval> <activationTime> <stop> 內定義的時間
  1. 已停用所有規則實例。
  2. 執行 <onDeactivation> 動作。
  3. 已停用規則。
deactivate() 方法
事件 D,在 <activationInterval> <deactivateOnEvent> 內定義
事件 D[1],在 <activationByGroupingKey> <deactivateOnEvent> 內定義
  • 不再接受值為 1 的分組鍵值。
  • 如果分組鍵值為 1 的規則實例處於作用中狀態,則會停用它。
在 <activationByGroupingKey> <activateOnEvent> <stopAfter> 內定義的期間遇到事件 A[2] 時結束 已停用分組鍵值為 2 的規則實例。