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> 中定义
事件 A[2] 的持续时间(在 <activationByGroupingKey> <activateOnEvent> <stopAfter> 中定义)结束
  • 活动
  • 允许所有组密钥值
<activationInterval> <activationTime> <stop> 中定义的时间
  1. 所有规则实例均已停用。
  2. <onDeactivation> 操作运行。
  3. 停用规则。
deactivate() 方法
事件 D,在 <activationInterval> <deactivateOnEvent> 中定义
事件 D[1],在 <activationByGroupingKey> <deactivateOnEvent> 中定义
  • 不再允许组密钥值 1。
  • 如果带有组密钥值 1 的规则实例处于活动状态,则将其停用。
事件 A[2] 的持续时间(在 <activationByGroupingKey> <activateOnEvent> <stopAfter> 中定义)结束 已停用带有组密钥值 2 的规则实例。
  • 活动
  • 仅允许根据 <activationByGroupingKey> <activateOnEvent> 定义触发了规则实例的组密钥值
<activationInterval> <activationTime> <stop> 中定义的时间
  1. 所有规则实例均已停用。
  2. <onDeactivation> 操作运行。
  3. 停用规则。
deactivate() 方法
事件 D,在 <activationInterval> <deactivateOnEvent> 中定义
事件 D[1],在 <activationByGroupingKey> <deactivateOnEvent> 中定义
  • 不再允许组密钥值 1。
  • 如果带有组密钥值 1 的规则实例处于活动状态,则将其停用。
事件 A[2] 的持续时间(在 <activationByGroupingKey> <activateOnEvent> <stopAfter> 中定义)结束
  • 不再允许组密钥值 2。
  • 已停用带有组密钥值 2 的规则实例。
  • 活动
  • 除了根据 <activationByGroupingKey> <deactivateOnEvent> 定义而不允许的组密钥值外, 允许所有其他组密钥值
<activationInterval> <activationTime> <stop> 中定义的时间
  1. 所有规则实例均已停用。
  2. <onDeactivation> 操作运行。
  3. 停用规则。
deactivate() 方法
事件 D,在 <activationInterval> <deactivateOnEvent> 中定义
事件 D[1],在 <activationByGroupingKey> <deactivateOnEvent> 中定义
  • 不再允许组密钥值 1。
  • 如果带有组密钥值 1 的规则实例处于活动状态,则将其停用。
事件 A[2] 的持续时间(在 <activationByGroupingKey> <activateOnEvent> <stopAfter> 中定义)结束 已停用带有组密钥值 2 的规则实例。