<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> 包含以下元素。
必须将这些元素按所显示的顺序进行编码。如果某个元素为可选元素,则可以不对其进行编码,但所有已编码的元素都必须按照正确的顺序。
元素 | 必需或可选? |
---|---|
<activateOnEvent> | 可选。允许出现 0 或 1 次。 |
<deactivateOnEvent> | 可选。允许出现 0 或 1 次。 |
根据当前规则活动,以及根据 <activationInterval> 和 <activationByGroupingKey> 元素中的 <activateOnEvent> 和 <deactivateOnEvent> 定义之间的相互作用,规则行为会有所不同。以下示例将说明这些定义如何相互作用。
在本示例中, 将定义重复规则,以便在处于维护方式的系统上禁止事件,并在维护周期结束时提供关于被禁止事 件数的摘要报告。
缺省情况下,定义了组密钥的规则允许处理所有的组密钥 值。因此,当事件符合规则的事件选择条件时,所有的规则实例均处于活动状态,并已准备好 根据组密钥的任一值来接受这些事件。该规则的激活时间间隔将与规则没有组密钥时相同,因为实际上,符合该规则的事件选择条件的所有事件都将得到处理。
<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> <activateOnEvent> <eventType type="StartMaintenanceMode"/> <stopAfter duration="PT2H" unit="ISO-8601"/> </activateOnEvent> <deactivateOnEvent> <eventType type="StopMaintenanceMode"/> </deactivateOnEvent> </activationByGroupingKey>
开始规则状态 | 可能影响规则状态的因素 | 结束规则状态 |
---|---|---|
不活动 | <activationInterval> <activationTime> <start> 中定义的时间 |
|
activate() 方法 | ||
事件 A,在 <activationInterval> <activateOnEvent> 中定义 | ||
事件 A[1],在 <activationByGroupingKey> <activateOnEvent> (不带有 <stopAfter>)中定义 |
|
|
事件 A[2],在 <activateOnEvent> (带有 <stopAfter>)中定义 |
|
|
|
<activationInterval> <activationTime> <start> 中定义的时间 | 规则状态中尚未发生变化。 与开始规则状态相同。 |
activate() 方法 | ||
事件 A,在 <activationInterval> <activateOnEvent> 中定义 | ||
事件 A[1],在 <activationByGroupingKey> <activateOnEvent> (不带有 <stopAfter>)中定义 | ||
事件 A[2],在 <activateOnEvent> (带有 <stopAfter>)中定义 | ||
|
<activationInterval> <activationTime> <start> 中定义的时间 | 规则状态中尚未发生变化。 与开始规则状态相同。 |
activate() 方法 | ||
事件 A,在 <activationInterval> <activateOnEvent> 中定义 | 允许所有组密钥值。 | |
事件 A[1],在 <activationByGroupingKey> <activateOnEvent> (不带有 <stopAfter>)中定义 |
|
|
事件 A[2],在 <activateOnEvent> (带有 <stopAfter>)中定义 |
|
|
|
<activationInterval> <activationTime> <start> 中定义的时间 | 规则状态中尚未发生变化。 与开始规则状态相同。 |
activate() 方法 | ||
事件 A,在 <activationInterval> <activateOnEvent> 中定义 | 允许所有组密钥值。 | |
事件 A[1],在 <activationByGroupingKey> <activateOnEvent> (不带有 <stopAfter>)中定义 | 除先前允许的组密钥值外,目前还允许组密钥值 1。 | |
事件 A[2],在 <activateOnEvent> (带有 <stopAfter>)中定义 | 除先前允许的组密钥值外,目前还允许组密钥值 2。 |
开始规则状态 | 可能影响规则状态的因素 | 结束规则状态 |
---|---|---|
不活动 | <activationInterval> <activationTime> <stop> 中定义的时间 | 规则状态中尚未发生变化。 与开始规则状态相同。 |
deactivate() 方法 | ||
事件 D,在 <activationInterval> <deactivateOnEvent> 中定义 | ||
事件 D[1],在 <activationByGroupingKey> <deactivateOnEvent> 中定义 | ||
事件 A[2] 的持续时间(在 <activationByGroupingKey> <activateOnEvent> <stopAfter> 中定义)结束 | ||
|
<activationInterval> <activationTime> <stop> 中定义的时间 |
|
deactivate() 方法 | ||
事件 D,在 <activationInterval> <deactivateOnEvent> 中定义 | ||
事件 D[1],在 <activationByGroupingKey> <deactivateOnEvent> 中定义 |
|
|
事件 A[2] 的持续时间(在 <activationByGroupingKey> <activateOnEvent> <stopAfter> 中定义)结束 | 已停用带有组密钥值 2 的规则实例。 | |
|
<activationInterval> <activationTime> <stop> 中定义的时间 |
|
deactivate() 方法 | ||
事件 D,在 <activationInterval> <deactivateOnEvent> 中定义 | ||
事件 D[1],在 <activationByGroupingKey> <deactivateOnEvent> 中定义 |
|
|
事件 A[2] 的持续时间(在 <activationByGroupingKey> <activateOnEvent> <stopAfter> 中定义)结束 |
|
|
|
<activationInterval> <activationTime> <stop> 中定义的时间 |
|
deactivate() 方法 | ||
事件 D,在 <activationInterval> <deactivateOnEvent> 中定义 | ||
事件 D[1],在 <activationByGroupingKey> <deactivateOnEvent> 中定义 |
|
|
事件 A[2] 的持续时间(在 <activationByGroupingKey> <activateOnEvent> <stopAfter> 中定义)结束 | 已停用带有组密钥值 2 的规则实例。 |