第三十二章 开发Productions - ObjectScript Productions - 定义警报处理器 - 使用路由警报处理器
使用路由警报处理器
如果需要通过多种输出机制联系用户,警报处理器应该是一个业务流程,用于确定如何在消息中路由 Ens.AlertReques
。在这种情况下,Productions
必须为每个输出机制包含一个额外的业务操作,并且警报处理器将消息转发到这些业务操作。
将警报处理器定义为路由进程
要将警报处理器定义为路由流程,请创建一个可以在消息中接收 Ens.AlertRequest
的业务流程类。
业务流程将检查消息并将它们转发给不同的业务操作,具体取决于警报内容和包含的任何逻辑。
逻辑可能需要考虑以下因素:
- 不同用户的不同要求
- 根据一天中的时间不同的要求
- 组织的问题解决政策和程序
可以在使用 EnsLib.MsgRouter.RoutingEngine
类作为 Ens.Alert
路由进程。此类提供设置业务规则名称。如果将此设置指定为路由规则集的名称,则此业务主机会使用该规则集中的逻辑来转发它收到的所有消息。
定义业务操作
可以定义每个所需的业务操作,如使用简单电子邮件警报处理器或使用简单出站适配器警报处理器中所述。
将自定义代码添加到警报管理
警报管理允许将警报分配给用户、跟踪警报的状态以及管理解决警报的进度。有关警报管理的概述,请参阅配置警报管理,其中描述了如何配置警报管理组件以及定义警报管理的规则和数据转换。本节介绍如何将自定义代码添加到警报管理组件。
警报管理框架具有以下架构:
- 托管警报在其整个生命周期中的单个持久对象。
-
Alert Manager
、Notification Manager
和Alert Monitor
具有相同的整体内部结构。当这些组件之一被调用时,它会分三个阶段执行其功能:
- 首先,如果组件由子类实现,则组件执行
OnProcess
方法。通过实施此方法,可以在组件中包含自定义代码。如果OnProcess
方法设置了一个标志,指示处理已完成,则组件退出。 - 接下来,组件评估其规则或为通知管理器评估其数据转换,它设置控制组件操作的参数。
- 最后,组件根据规则设置的参数或组件配置设置的默认值执行其操作。
-
Alert Notification
操作是一个更简单的组件,它可以格式化消息并将消息转发到它的目的地。
警报管理器
警报管理器具有 Ens.Alerting.AlertManager
类,并且必须命名为 Ens.Alert
。警报管理器接收来自所有生产组件的警报。警报管理器可以根据规则中指定的条件将警报提升为托管警报。警报管理器将托管警报发送到通知管理器。
警报管理器分三个阶段执行:
- 如果组件的类覆盖了
OnCreateManagedAlert()
方法,则执行覆盖。可以提供自定义代码来处理警报请求并在此方法中创建托管警报。如果不希望基本警报管理器代码评估规则、创建托管警报并将其发送到通知管理器,应该将tProcessingComplete
参数设置为 1。在这种情况下,警报管理器不会采取进一步的操作。 - 评估
CreateManagedAlertRule
规则。此规则可以访问tAlertContext
。如果它返回真值(1)
,则警报管理器创建托管警报。如果它返回false
,则警报管理器不会创建托管警报,警报只会写入日志。警报上下文提供对以下内容的访问:
- 传入警报
- 为发出警报的组件配置的警报组
- 为发出警报的组件配置的业务伙伴
- 警报所有者
该规则可以通过返回 0
来禁止将警报提升为托管警报,或者可以通过返回 1
将警报提升为托管警报。
3
. 如果规则将 tCreateAlert
设置为 1
,则警报管理器会创建一个托管警报,或者,如果没有定义 CreateManagedAlertRule
规则,警报管理器将采取默认操作并创建一个托管警报。警报管理器通过调用 OnCreateManagedAlert()
方法创建托管警报,该方法可以被扩展 Ens.Alerting.AlertManager
类覆盖。 OnCreateManagedAlert()
的默认实现在托管警报中设置生产名称,并将当前所有者设置为未分配,值为空字符串。如果警报管理器创建了托管警报,它会将其发送到通知管理器。
通知管理器
通知管理器具有 Ens.Alerting.NotificationManager
类,负责确定要通知的组以及要使用的通知操作。
通知管理器分三个阶段执行:
- 如果组件的类覆盖了
OnProcessNotificationRequest()
方法,则执行覆盖。如果覆盖将pProcessingComplete
参数设置为 1,则通知管理器不会评估转换或应用默认操作。 - 如果已配置,则执行数据转换。有关数据转换的信息,请参阅添加通知管理器并定义其数据转换。
- 如果转换将
target.Notify
属性设置为1
或者没有数据转换,则通知管理器将警报通知发送到每个目标中列出的组件并将地址列表传递到目标。
通知管理器不接收或发送托管警报对象,而是使用通知请求对象,该对象包含对持久托管警报对象的引用。
警报监视器
警报监视器查询当前时间超过 NextActionTime
值的所有打开的托管警报。它进行以下 SQL 查询:
"SELECT ID FROM Ens_Alerting.ManagedAlert WHERE IsOpen = 1 AND NextActionTime <= ?"
其中 $$$timeUTC
返回的当前时间被指定为参数。
警报监视器分别处理每个返回的托管警报消息。对于每个托管警报,它分三个阶段进行处理:
- 如果组件的类覆盖了
OnProcessOverdueAlert()
方法,则执行覆盖。可以提供自定义代码来处理警报。如果不希望基本警报监视器代码评估规则、更新托管警报并将其发送到通知管理器,您应该将tProcessingComplete
参数设置为 1。在这种情况下,警报监视器不会采取进一步的操作。 - 评估
OverdueAlertRule
规则。此规则可以访问tOverdueContext
。逾期上下文提供对以下内容的访问:
- 传入警报
- 当前时间
NewNextActionTime
NewEscalationLevel
该规则可以通过返回 0
来禁止发送提醒,可以通过设置 NewNextActionTime
来设置警报监视器下次找到托管警报的时间,或者可以通过设置 NewEscalationLevel
来升级或降级托管警报。
可以覆盖警报规则的上下文以及警报监视器如何处理结果:
- 可以通过覆盖
GetOnOverdueAlertContext()
方法向警报规则上下文添加其他信息。 - 可以通过覆盖
OnProcessOverdueRuleResult()
方法来覆盖警报监视器处理规则结果的方式。否则,在基类中执行此方法。OnProcessOverdueRuleResult()
方法负责升级托管警报。覆盖可以访问托管警报、tOverdueContext
、tSendNotification
和tNotificationType
。请注意,您应该复制基类实现的功能或通过调用##super()
来调用它。
- 如果规则返回
1
,Alert Monitor
将托管警报发送到Notification Manager
。
通知操作
通知操作向用户组发送通知。如果使用多种机制发送通知,可以为每种传输方法设置单独的通知操作。
网友评论