动态过滤和路由事件的方法和装置 本发明涉及事件管理系统领域,更具体地讲,涉及事件管理系统内事件的动态过滤和路由。
信息技术(IT)已经从单一的巨型机计算发展到通过网络跨越桌面和部门的复杂的、高度分布式计算机系统。这些分布式计算环境提供的好处包括可以灵活地选择任意数量的平台、域、工具和网络配置。但是,分布式环境可能是复杂的。此外,存在着软件工具和平台之间缺乏兼容性和集成化的问题。例如,常规的末端产品(point product)(例如,Platinum DBVision产品)一般是针对诸如数据库监督和管理、工作调度、或管理数据库重组之类解决方案的专业的特定功能或领域。每个末端产品提供一种特定能力,并且每个末端产品包括一个不同的接口。另一方面,应用框架技术提供了一种综合解决方案,尽管大大地牺牲了工具功能。此外,应用常规的末端产品或框架技术来维护当前企业环境要涉及来自IT组织的大量资源和资金。
因此,需要一种集成系统,用于提供使用兼容界面动态和允许事件过滤和路由而不显著牺牲工具功能的工具。
本发明的一个目的是要提供一种用于通过公用事件管理系统路由发生在末端产品中的事件的集成系统。
本发明的另一个目的是跨越企业节点的事件的动态过滤。
本发明的一个方面提供了一种路由事件过滤器定义地预订请求的方法。该方法将事件过滤器分析成一个具有至少一个子表达式的评价树,定位该至少一个子表达式,并且确定该至少一个子表达式是否包括一个节点专用字段。如果该至少一个子表达式包括一个节点专用字段,那么方法也建立一个节点和事件管理器接触信息的列表,并且把预订请求发送到位于包括在节点列表中的一个节点上的至少一个事件管理器。
图1示出了包括多个节点的本发明的一个企业的示例实施例;
图2示出了本发明的一组集成末端产品的示例实施例;
图3示出了本发明的一个事件管理系统的方框图的示例实施例;
图4示出了在本发明的事件管理系统的多个节点之间通信的事件信息的示例实施例;
图5示出了根据本发明的一个路由处理的流程图的示例实施例;
图6示出了根据本发明的一个路由处理的流程图的示例实施例;和
图7示出了本发明的一个数据交换系统的方框图的示例实施例。
本发明的事件管理系统管理一个企业(例如,局域网(LAN)或广域网(WAN)这样的计算机网),相关发生在企业中的事件信息,并根据预定的响应策略采取校正行动。事件管理系统接收,例如,来自企业内兼容末端产品的事件消息。如图1中所示,企业100可以包括多个可以通过网络(未示出)连接的节点110,120,130。例如,一个节点是一个像个人计算机,服务器这样的运行一种操作系统的物理盒。在本发明的一个示例实施例中,一个节点可以是一个具有安装在其上的兼容末端产品的个人计算机。在本发明的一个示例实施例中,事件管理系统140管理产生事件的节点110,120,130上的事件,使网络上数据移动最小,并且保持诸如数据的评价、报告和自动校正之类的行动靠近数据源。
在图2所示的本发明的一个示例实施例中,事件管理系统270可以包括在一组200综合工具中,包括用于,例如,管理应用程序、数据库、桌面、网络和系统的兼容末端产品。工具230,240,250,260可以使用一组公共服务210以共享有关事件的数据。例如,导控器(director)220是一个在常规服务器计算机中运行的用于兼容末端产品230,240,250,260的共享的公共图形用户界面(GUI)。在本发明的一个示例实施例中,导控器220在Windows NT和Windows 95下运行,并且作为一个使使用者能够观看并且与企业中包括兼容末端产品230,240,250,260的所有资源交互作用的单一的控制台操作。
本发明的事件管理系统使用的信息的基本可管理单元是一个叫作事件的结构化消息。一个事件代表有关由于企业中的资源或针对企业中的资源的某些有效事故的信息。事件管理系统中的兼容末端产品和事件管理器发送和接收事件。例如,事件是用于管理企业的实时信息处理的基本构件。事件定义了可公开的、可共享的信息基本元素,以及维护和发送事件的格式。例如,一个事件的结构包括任何事件记录所需的基本信息的预定义字段。预定字段归于两种范畴:标识字段和非标识字段。标识字段是共同形成事件的唯一关键字的字段,事件的唯一关键字使该事件与其它事件区分开。非标识字段是添加有关一个事件的附加信息,但是不参与该事件的关键字的字段。本发明的事件管理系统允许使用者通过动态地加入关键字值对从而唯一地定义了对应事件结构而扩展事件结构。因此,将关键字值对添加到事件结构中使得末端产品能够公布唯一定义的事件,否则这个事件由于没有被事件的预定字段唯一地定义而不能公布。
例如,根据本发明的一个实施例的一个事件结构的示例实施例用C语言定义如下:
-->PT_CHAR_T *Name; /*事件名称 */PT_CHAR_T *Time; /*事件时间(yyyymmddhh24miss)*/PT_CHAR_T *CondTime; /*条件时间(yyyymmddhh24miss)*/PT_CHAR_T *AgentNode; /*正在运行检测代理的节点*/PT_CHAR_T *EvmgrNode; /*响应事件mgr运行的节点*/PT_EVENT_TYPE Type; /*事件类型(EV_DESCRETE...)*/PT_RESP_TYPE Response; /*响应类型(EVRE_SILENCE...)*/PT_CHAR_T *RespPolicy; /*响应策略 */PT_CHAR_T *Descr; /*描述 */PT_CHAR_T *DescrId; /*MsgPut的消息串关键字 */PT_CHAR_T *DescrFields;/*消息中替换字段列表 */double Value; /*值(用于条件/报警事件)*/int Level; /*报警级(for type= EV_ALARM_SET)*/PT_CHAR_T *IntKeys; /*应用程序专用内部关键字*/ int NumKey; /*跟随的关键字/值对的数量*/PT_CHAR_T **Keys; /*其它关键字(属性)名称的数 组*/PT_CHAR_T **Values; /*其它关键字(属性)值的阵列*/BOOL Archived; /*布尔标志,TRUE if event archived*/PT_CHAR_T *Id; /*唯一事件id */PT_CHAR_T *CondId; /*条件id */int RepeatCount; /*这种类型的用于风暴抑制 的重复事件的计数*/int HopCount; /*Here comes Peter Cotton Tail...*/PT_CHAR_T *GMTOffset /*GMT偏差 */int ActionTaken; /*布尔标志,进程中响应动作*/BOOL Silenced; /*布尔标志,报警抑制 */PT_CHAR_T *ProductName; /*递交产品的产品名称 */PT_CHAR_T *InstanceType;/*实例中的实例类型*/void *LocalParam; /*异常分支以允许与事件相 关的本地数据*/PT_CHAR_T *AuthString; /*授权串的位置标志符,某种 形式的事件内容署名*/PT_CHAR_T *TTId; /*故障单id */PT_CHAR_T *TTStatus; /*故障单状态 */}_PT_EVENT;]]>
示例事件的标识字段是节点,名称,产品,实例,类型,condition_time(条件_时间)(如果类型不是离散的),事件时间(如果类型是离散的),包括关键字字段阵列和值字段阵列的内容的所有关键字值对(字段,例如NumKeys,包括一个指示它们对应字段阵列中关键字值对数量的数字)。所有其它预定义字段都是非标识字段。
可以把事件分类成包括,例如,离散事件,条件和报警等在内的多种类型。离散事件是指示发生在特定时间并且是完全自含的一些事情的事件。离散事件的事故没有状态,并且不被更新。例如,失败的登录尝试可能引起离散事件的产生。条件是指示持续了一段时间并且可能具有更新的属性的某事的状态的事件。由一个产品声明的事件被该产品拥有。一般,只有对应的末端产品才能更新或清除在该末端产品产生的条件事件。离散和条件事件的内容代表有关不改变引起事件的事故就不能改变的企业的真实信息。例如,报警是根据使用者可配置策略的其它事件的解释。因此,使用者可以无需解决造成报警的条件在任何时间清除报警。同样,报警可以在报警根据的事件清除之后持续。
如图3中所示,本发明的事件管理系统300的一个示例实施例包括一个事件管理器310,事件档案320,事件相关器330,报警规则存储器340,和响应机350。在本发明的一个示例实施例中,企业的所有节点上都包括一个事件管理器310,事件档案320,事件相关器330,和一个响应机350,而报警规则存储器340包括在一个允许事件本地存储并管理的中心节点上。
在本发明的一个示例实施例中,一个事件管理系统可以,例如,接收来自,例如,整个企业的末端产品的事件消息。在企业的一个节点上管理事件,在这个节点上事件被位于该节点的一个事件管理器310接收。事件管理器310可以,例如,接收所有的事件,保持以前发送的事件的状态,保持一个预订列表,和把事件路由到适当的用户。在本发明的一个示例实施例中,可以本地存储事件和它们的状态以及预订列表。
如图4中所示,节点a 401的事件管理器402和节点b 410的事件管理器411也接收来自节点b 410的事件相关器413的事件信息。节点b 410的事件管理器411也把事件提供到节点b上的事件相关器413。事件管理器411也接收实际上发生了事件的末端产品415的事件信息。事件管理器402,411保持,例如,事件,以及它们关联的状态和预订列表。每个事件管理器可以具有一个本地存储器数据存储器,即黑板,存储了全状态事件。黑板可以持续地保持在一个基于文件的存储器中,用于跨代信息恢复(事件管理器的过程调用)。预订事件的客户负责跨越事件管理器的新调用重建对应的预订。因此,预订可以在存储器中保持。为事件管理器接收的所有事件保持本地事件档案。本发明的事件管理系统也可以相关来自多个节点的事件。在本发明的一个示例实施例中,事件管理系统提供合并到单一管理站的事件的视图,或跨越节点边界的视图/范畴中的事件视图。
构造本发明的事件管理系统以通过事件预订用不同于节点的标准查询或表达对事件组的未解决的兴趣。事件预订允许有关事件的字段内容的标准的说明。例如,确定特定过程的感兴趣事件可以类比于写入一个请求匹配有关记录的各字段的标准的记录的数据库查询。本发明的请求与正常数据库查询的不同之处在于,它不仅是对已经存在的数据的请求,而且是对迟早必然要发生或存在的事件集的正在进行的请求。
例如,当作出了对于发生在末端产品415的事件这样的一个事件的预订时,把一个预订请求发送到节点b 410上的事件管理器411。事件管理器411接收请求,并把这个请求添加到可能存储在,例如,存储器中的未解决请求的列表中。事件管理器411检查以前存储在,例如,黑板中的未解决事件,以确定它是否匹配请求标准。将每个匹配事件发送给,例如,公布给请求者,例如,事件的预订者。也发送接收到的并且匹配预订标准的任何新事件。这可以继续到预订取消。
在本发明的一个示例实施例中,当预订形成时,给它分配一个唯一的ID。唯一的ID和请求来自的数据组唯一地定义了这个预订。例如,通过用一个从原始预订返回的请求句柄调用一个API可以取消预订。这导致用对应请求ID向事件管理器发送一个取消消息。然后,事件管理器可以把取消请求与原始预订匹配,并把它从事件管理器的处理队列中去掉。
公布在一个节点上所有事件被该节点上的事件管理器接收。该事件管理器也接收和保持由过程从它的节点和其它节点发送的所有请求。一旦接收到一个事件,事件管理器也分配一个事件ID。事件管理器确定该事件是否是一个条件,如果是,那么事件管理器检查,例如,一个黑板,以确定该事件是否匹配一个现存条件。如果是,那么给条件事件分配一个现存条件的条件ID,并且用作对现存条件的更新。此外,如果允许归档,那么把事件归档。在本发明的一个示例实施例中,例如,归档可以包括把事件存储在一个平面文件档案这样的数据库中。可以为每个日历日使用一个独立的文件。可以按照它们的接收顺序把事件写入到事件中的该时戳日的档案中,作为新行定界记录。事件管理器也检查所有未解决预订请求。对于任何不是条件更新的事件,如果接收的事件匹配该请求,那么事件管理器把事件发送给请求者。在对一个条件更新的情况下,是更新事件匹配于该请求。因此,事件管理器发送给请求者的正是该更新的事件。
事件过滤器描述可兴趣事件的标识标准,并且允许可以规定用于包括扩展事件结构的关键字值对的一个事件的每个字段的各种比较形式的说明。例如,一个事件过滤器是一个由将事件的一个字段与一个使用者规定值比较的子表达式构成的布尔(Boolean)表达式。例如,事件过滤器与结构化询问语言(SQL)中的“WHERE”子句类似。例如,一个事件过滤器的基本子表达式是一个将事件的一个字段与一个值比较的短语,例如,node=ptisun20。子表达式node=ptisun20的意思是事件的节点字段必须严格地与串“ptisun20”匹配。除了需要一种专用语法的关键字字段阵列和值字段阵列之外,事件结构的任何字段可以用作示例中使用的节点字段。例如,如果添加的关键字值对之一是:
关键字 值
FileSystem /usr,
用于这个关键字值对的严格匹配过滤器将是keyfield.FileSystem=“/usr”。此外,可以通过测试它不匹配于一个空值,例如,keyfield.FileSystem!=“□”,而测试一个带有任何值的关键字的存在。可以把事件过滤器作为C源代码(例如,程序中硬编码的)存储在任何可以存储文本串的位置,例如,存储在诸如平面正文文件之类的配置文件中,数据库中,存储器中。
对于事件的关键字值对的值也可以使用过滤。如在前面的示例中,可以有一个带有一个是一个专用文件系统名的相关值的关键字“FileSystem”。希望的事件可以仅仅是那些用于某个文件系统的,例如/usr。用于一个关键字的对应值的过滤机构规定该关键字,并且测试相关值。使用一种专用语法将关键字与事件的其它字段区别,允许关键字的名称空间与事件的预定义字段不同。这个语法是“keyfield.[name]”。例如,一个用于关键值对的value/usr的示例测试是keyfield.FileSystem=/usr。在本发明的一个示例实施例中,事件过滤器可以包括诸如=之类的比较操作符,和用操作符“like”规定的全正则表达式匹配。例如,一个过滤器可以是node=ptisun05。一个匹配所有遵循ptisun[#]模式的节点值的过滤器将是node like“ptisun[0-9]+”。以下是事件过滤器比较操作符的示例列表:>=(大于或等于),<=(小于或等于),>(大于),<(小于),=(等于),like(匹配一个正则表达式),likeci(不区分大小写串匹配),和!=(不等于)。
在本发明的一个示例实施例中,可以使用以下标记,产生规则,和利用另一种编译程序的编译程序(yacc)实现的事件过滤器定义。
-->%type<evalp>filter %type<evalp>statement %% statement: FILTER filter NO_MORE_TOKENS filter: NAME COMPOP MANE | FUNC_PART SEPARATOR MANE COMPOP NAME | NAME COMPOP FUNC_PART SEPARATOR NAME | filter BOOLEAN filter | LEFTPAREN filter RIGHTPAREN]]>
在本发明的一个示例实施例中,可以把事件管理器411实现为一个数据自适应鉴定监视器(daemon)(例如,一种连续运行在UNIX服务器上并且向网络上客户系统提供资源的代理程序)。一旦接收到事件,事件管理器411确定事件的配置,包括是否它已经接收到事件和时间状态是否已经改变。事件管理器411也把事件写入一个本地事件档案412,并且把事件路由到预订事件内容的所有客户。例如,事件管理器411可以把事件信息提供到节点402上的事件相关器413和事件管理器。事件档案412可以包括一个事件档案服务处理器。事件档案412服务处理器从事件档案读出事件。用户可以包括任何具有预订事件的报警规则和,例如,一个包含一个资源对象的导控器,或一个预订有关中心存储器中的内容的更新事件(例如数据交换业务(DEX))的产品的相关器413实例。
例如,事件相关器413可以包括一个事件相关器服务处理器。如1998年12月31日递交的,标题为“事件的动态相关系统和方法”的,委托文件号为22074661/25548的,全文结合于此作为参考的共同未决专利申请中所述,事件相关器413执行一种相关规则中规定的用户策略。一个报警是一种向一个有效条件或事故的预订者提供通知的事件类型。报警的确定可以包括一个单一事件的存在,当另一个事件发生时某种现有状态的存在,或在一固定时间窗口内一个特定事件的再现。此外,一个报警可以是当某种状态或某些状态存在时,在一固定时间窗口内一个特定事件再现的组合。
决定报警是否发生的事件可能是由于在事件相关器413的相同节点上的事件,或可以来自一个或多个其它节点401,410。一个报警也可以与有关允许响应机414处理报警的任何自动通知或校正的声明的自动响应策略相关联。例如,事件相关器413可以建立一个报警,一个接收事件的修改版本,或一个可以由另一种报警规则相关的全新的事件。
可以通过一种报警规则相关事件。报警规则的基础是应当分析的事件的确定。可以建立报警规则以定义哪一个单一事件或事件集代表要对其作出响应的有效事故。报警规则可以包括描述代表事故的事件的说明和逻辑和事件管理系统对事故的响应的定义。相关的结果是建立了一个或多个事件。例如,可以通过导控器404定义一个报警规则。
响应机414执行一种响应策略。响应机414包括多个过程。例如,响应策略是一个包含一个由事件相关器413产生的触发报警所调用的逻辑语句所连接的行动列表的逻辑表达式。可以在响应策略中定义和执行多个行动。在本发明的一个示例实施例中,多个行动可以在一个列表序列中,或加上逻辑以使每个行动在接收到另一个行动的返回码或报警中发送的一个指定字段时是可能发生的。可以通过定义一个行动集和构成一个在一个逻辑序列中引用这些行动中的一个或多个的表达式而建立响应策略。行动可以是全局的,并且可以被多个响应策略调用。在本发明的一个示例实施例中,响应机414也在每一步骤的完成时把有关每个行动的成功的信息加入到触发报警。例如,这可以通过发送一个用刚完成的步骤的顺序号、步骤的类型(例如,电子邮件/页面)、和在事件档案中的行动步骤的名称更新事件的更新报警事件而完成。这个信息可以通过一个导控器存取。
在本发明的一个示例实施例中,响应机414可以包括,例如,一个第一过程,一个第二过程,和一个第三过程。第一过程预订在与响应机414的相同节点410上运行的事件相关器413发送的事件。一旦接收到具有关联响应策略的报警,第一过程调用第二过程执行该策略。第一过程可以根据与对应的过程关联的配置文件中的设置调用第二过程的多个实例。第二过程执行需要事件发送的行动,并且调用第三过程执行任何其它行动。响应机414的第三过程也可以执行一个需要调用操作系统的响应策略行动,例如,发送电子邮件消息,调用脚本,发送页面,把消息写入文件,或把事件作为一个简单网络管理协议(SNMP)陷阱发送。
在本发明的一个示例实施例中,本发明的事件管理系统可以包括一个路由算法。路由算法可以存储在,例如,IBM个人计算机这样的常规计算机系统内的随机存取存储器或磁盘驱动器中。路由算法分析事件过滤器以确定应当接收预订请求的事件管理器。对应的事件管理器将是具有可以建立能够满足正在分析的事件过滤器的事件的末端产品的企业的节点上的事件管理器。
在本发明的一个事件结构一个示例实施例中,事件结构包括,例如,三个节点专用字段:代理节点,节点,和事件管理器节点。在本发明的一个示例实施例中,路由算法确定一个节点专用字段是否包括在事件过滤器中,如果是,那么应当把事件过滤器路由到节点专用字段指示的对应节点上的事件管理器。例如,如果事件过滤器是“node=nodeA or node=nodeB”,那么路由算法将确定,例如,可以把事件过滤器路由到子表达式“node=nodeA”指示的节点A上的事件管理器,和子表达式“node=nodeB”指示的节点B上的事件管理器。子表达式是包括一个字段名,比较器和一个值的事件过滤器中的一个表达式。在事件过滤器中使用合取以组合子表达式。
在图5所示的本发明的一个示例实施例中,路由算法,例如,如510中所示,把事件过滤器分析成一个包括一个或多个子表达式的评价树。在502,路由算法定位评价树的每个子表达式,并且在530中确定子表达式是否包括节点专用字段(例如,代理节点,节点,和事件管理器节点)。在540,路由算法建立评价树的节点专用字段中提及的节点和接触对应节点上一个特定过程,事件管理器,所需的信息(例如,事件管理器接触信息)中至少一个的列表,例如,一个全表。
在本发明的一个示例实施例中,路由算法可以通过,例如,遵循预定的算法模型或访问存储在可以根据需要查找的中心数据存储器中的接触信息获得事件管理器接触信息。例如,可以用一个函数提供每个对应匹配节点的事件管理器接触信息。在550,路由算法把事件过滤器定义的预订请求发送到,例如,全表上标识的对应事件管理器。例如,可以以函数
int SvcLookupSubNode(PT_CHAR_T*pzFilter,PT_CHAR_T***subArray,int*count)具体表达从一给定过滤器确定全节点列表的算法。例如,可以通过过滤器SvcLookupSubNode给函数,例如,SvcEventSubRegister(array[I],filter,myCallbackFunction,myCallbackData,&handleForThisSubscription)提供对应的事件管理器接触信息,并把预订请求发送到对应的节点。
如以下的示例中所示,可以迭代函数
SvcLookupSubNode(PT_CHAR_T*pzFilter,PT_CHAR_T***subArray,int*count)提供的全表,以通过对函数SvcEventSubRegister的调用进行对从事件过滤器确定的每个对应事件管理器的预订。
SvcLookupSubNode(filter,&array,&arraySize);for(I=0;I++;I<arraySize)
SvcEventSubRegister(array[I],filter,myCallbackFunction,myCallbackData,
&handleForThisSubscription)
在本发明的一个示例实施例中,路由算法可以根据节点专用字段中的“like”操作符确定路由一个预订请求的对应节点。当一个节点参考字段包括“like”操作符而不是一个固定节点串时,不可以把该节点专用字段的值直接用作节点参考。而是,路由算法确定所有活动的事件管理器。接下来,确定每个活动事件管理器的节点。在本发明的一个示例实施例中,一个通信层机构可以确定,例如,具有某种唯一特征的事件管理器,例如,正在寄存到一个节点的已知的TCP/IP端口以接收事件消息之类的所有过程,和确定过程的对应节点。检查每个对应的节点以确定是否有任何节点匹配事件过滤器提供的like表达式。例如,表达式可以是node like“ptisun.*”。这个表达式必然匹配于命名为ptisun01,ptisun02,ptisun03,ptisun33,等等的节点。但是,它必然不匹配于节点ptiHP01。例如,活动事件管理器的列表可以包括ptisun01和ptiHP01。在活动事件管理器中,表达式必定匹配ptisun01,但是不匹配ptiHP01。因此,得到的列表将仅包括ptisun01的接触信息,而不包括ptiHP01的接触信息,因为它不匹配过滤器标准。
在如图6中所示的本发明的一个示例实施例中,路由算法,例如,如610所示,把事件过滤器分析为一个包括事件过滤器的一个或多个子表达式的评价树。在620,路由算法确定一个子表达式是否可以定位在评价树中。例如,路由算法第一次确定一个子表达式是否存在于评价树中时,它将定位第一子表达式的位置。一旦定位了一个子表达式,在630,路由算法确定该子表达式是否包括一个节点专用字段(例如,代理节点,节点,和事件管理器节点)。如果包括,那么在640把一个节点和事件管理器接触信息中的至少一个提供到一个列表。如果列表已经存在,那么把这个信息添加到列表,否则将建立列表并且提供这个信息给列表。
但是,在步骤630,如果确定子表达式不包括一个节点专用字段,那么在660路由算法要确定是否可以把子表达式转换成对于一个数据表或数据存储器中的至少一个的查询,例如,对数据表或数据存储器的查询会导致能够具有一个匹配子表达式的事件的节点的列表。
如果在660确定子表达式可以转换成一个对于数据表或数据存储器中至少一个的查询,那么在670建立查询并且执行对对应的数据表和/或数据存储器的查询。在640,把查询的结果(例如,节点和事件管理器接触信息中的至少一个)提供到列表。如果列表已经存在,那么把结果添加到列表,否则建立列表并把结果提供给列表。
路由算法在640把信息(例如,节点和事件管理器接触信息中的至少一个)提供到列表,或是在660确定可以把子表达式转换成对于数据存储器的查询之后,路由算法将返回到定位步骤620,直到没有子表达式可以在评价树中定位。如果在620定位了另一个子表达式,路由算法将再前进到步骤630,等等。但是,在步骤620,如果不再有子表达式被定位,那么路由算法在650把事件过滤器定义的预订请求发送到,例如,全表中标识的对应事件管理器。
在本发明的一个示例实施例中,路由算法的实现可以包括,例如,一个分析一个事件过滤器并且提供一种能够被存取以确定代表对事件管理器的单个请求的预订句柄的列表,以完成路由算法确定的预订请求的单一不透明数据结构的单一函数,例如:
-->void(*SubscriptionCallbackHandler)(PT_STATUS status,void*SubCbArg, PT_EVENT_SUBSCRIPTION evSubscription,void*SubCbArg).]]>
在本发明的一个示例实施例中,路由算法包括用于把单个预订请求封装到一个单一元预订事项中的多个数据结构。这可以通过使一个函数的基本返回是一个不透明数据结构来完成,例如,如下所示的一种示例数据结构PT_EVENT_SUBSCRIPTION。例如,PT_EVENT_SUBSCRIPTION包括未解决的单个预订请求和提供一种acsesson函数以把它暴露给一个客户(例如,导控器)。数据结构允许其它方法,例如,作用在数据结构上以展现数据结构内容而不用使用者直接访问数据结构的字段的函数。因此,内存储(例如,单个表项的数量和数据结构的字段的内容)可以改变而不影响数据结构的外部使用者。
在本发明的一个示例实施例中,路由算法包括,例如,一个第一数据结构(Subscription_List)
-->PT_CHAR_T*filter; struct SUBSCRIPTION_LIST fullList; struct SUBSCRIPTION_LISTworkingList;}_PT_EVENT_SUBSCRIPTION typedef_PT_EVENT_SUBSCRIPTION*PT_EVENT_SUBSCRIPTION;]]>
PT_Event_Subscription提供了一个事件过滤器,和对应事件过滤器的所有未解决预订请求的列表,例如全列表。PT_Event_Subscription也提供了一个提供正在被改变的预订请求的工作列表。例如,Subscription_List是全表的一个基本元素,并且提供了一个完成预订所需的独立定义元素的列表。Subscription_List包括有关每个请求的信息,例如唯一地标识了对一个事件管理器的一个单个请求(例如,内部处理通信(IPC)请求)的一个单个请求句柄,例如,ipcRequest;对应事件管理器接触信息,例如,dataGroup和对应事件过滤器中定义的事件可能发生的节点,例如,nodeName。全表的单个表项是由结构Subscription_List定义的。在本发明的一个示例实施例中,全表是,例如,实现为一个利用nextSubscription的链接列表。例如,列表的每个元素指向列表的下一个元素,并且列表的最后一个元素无所指向。因此,不必预先确定全表的长度。
在本发明的一个示例实施例中,事件管理系统提供了一种机构,例如,一个用于通知,例如,客户预订请求已经改变的客户寄存预订回叫函数SubscriptionCallbackFunction(PT_STATUS status,viod*
SubscriptionCallbackArgument,PT_EVENT_SUBSCRIPTIONevSubscription)。因此,预订回叫函数允许诸如导控器之类的客户看到PT_Event_Subscription结构的状态和作出的改变,例如,请求的添加和删除。寄存预订回叫函数也可以提供一个包括由于,例如,客户寄存预订回叫函数的调用而正在改变的请求的工作列表。
此外,客户寄存预订回叫函数也可以提供未解决预订请求,例如,全表。寄存预订回叫函数也可以用作初始预订和任何后续添加或删除。例如,一个有关删除的调用将使工作列表充填包括将要删除的IPC请求在内的预订列表(subscription_list)表项。例如,可以通过状态结构中传递到客户寄存预订回叫函数的一个子状态的值,PT_STATUS,完成工作列表是否包括添加或删除的确定。在对事件过滤器的完全改变(例如,删除了所有旧的请求并且添加了新的请求)时,可以两次调用回叫函数,一次是删除,另一次是添加。在本发明的一个示例实施例中,事件管理系统也包括一个用于删除一组预订的函数,int PtEventSubscribeCancel(PT_EVENT_SUBSCRIPTIONevSubscription)。
在本发明的一个示例实施例中,路由算法执行一个对一个或多个从分析一个对应事件过滤器的评价树的子表达式确定的数据表或数据存储的查询。如图7中所示,数据表和数据存储可以包括,例如,一个事件目录720,一个软件清单730,一个产品表760,一个节点表740,一个过滤器数据存储750,和一个远程监督数据存储770。事件目录720可以包括一个事件的不是专用于报告事件的产品的安装位置的或不是专用于有关该事件的特定实例的字段,例如,产品名称,事件名称,事件类型,描述,描述ID,实例类型,和这个事件使用的所有附加扩展关键字。在本发明的一个示例实施例中,这种信息可以具备诸如DEX710之类的对应数据库的安装,或一个末端产品的安装,其可以包括用末端产品产生的事件更新事件目录720。在本发明的一个示例实施例中,例如导控器的GUI引导使用者通过一个包括填写告诉使用者企业中可用事件的各种事件字段的选项的选择列表的事件过滤器建立过程,如Platinum Provision Common Serveces Reference Guide,version1.08(October 1998 Platinum technology,inc.)中所述,将其全部内容结合于此作为参考。列表是通过,例如,查询可能定位于,例如,图7中所示的DEX 710中的事件目录720填写的。
在本发明的一个示例实施例中,本发明的事件管理系统可以包括一个软件清单730。软件清单730可以包括安装在一个节点上的一个产品的每个拷贝的记录,例如,指示每个末端产品安装的对应节点的信息,和被监督的实例的列表。软件清单730可以使用一个产品标识符(产品ID),和一个节点标识符(节点ID),以形成对应关系。此外,可以把一个给定产品安装在多个节点上,并且一个节点可以有不止一个产品安装在其上。例如,软件清单730可以包括在DEX 710中。指示给定产品安装位置的信息可以用于确定可能有一个特殊类型事件发生在其上的节点。
在本发明的一个示例实施例中,可以把事件目录720和软件清单730定位在,例如,一个单一关系数据存储中。因此,可以有效地把一个事件过滤器解释成一个数据库查询,以确定可能什么节点可以使这样一种事件发生在其上。例如,一个查询可以用作一个参考一个产品名称的过滤器,例如,“productName=PlatPerfMgmtOra”。因此,路由算法将,例如,执行一个对于事件目录720的查询,以从事件目录720中的产品名称参考得到一个关联的产品ID。例如,产品ID是一个在提及该产品时跨越所有数据库表使用的产生的关键字。在本发明的一个示例实施例中,产品ID可以是,例如,名称或一个整数。然后,可以把这个ID用于从把一个物理节点与一个产品联系起来的软件清单730引用信息(例如,一个记录)。
路由算法可以利用事件名称字段查询事件目录720,寻找可以产生对应事件的产品。例如,在过滤器“name=DatabaseDown”中,事件名称是DatabaseDown。可以对事件目录720进行查询,以确定什么产品可以产生具有该名称的事件。从产品列表,可以对软件清单730进行查询,以确定在什么节点上安装了这种产品。根据查询的动态构造中的集成化性能和简易性,例如,查询可以包括多重查询,嵌套查询,或带有适当合取的单一查询。如对事件名称所为,利用事件目录720确定事件目录720中的有关对应字段的产品,然后确定这些产品安装在什么位置,可以为事件目录720中的其它字段构造类似的查询。在本发明的一个示例实施例中,事件目录720中的其它字段可以包括事件的类型,描述,描述ID,实例类型和事件使用的所有附加扩展关键字。在1998年12月31日提交的、题目为“使用者可扩展的事件结构的方法和装置”的、代理文档号为22074661/25529的共同未决专利申请中描述了向事件结构添加关键字值对,这个专利申请的全文结合在此作为参考。可以把这种方法用于过滤器的每个单个子表达式,其中全表是从每个子表达式返回的节点的并集。
产品表760可以包括一个产品的描述(例如,版本),产品使用的文件,产生使用文件的描述,和一个唯一产品ID的原本。
节点表740可以包括,例如,包括诸如运行的操作系统,操作系统的版本,硬件类型,处理器速度,和专用于节点表740的一个唯一节点ID的原本之类的节点特征的管理环境中所有感兴趣的节点。在本发明的一个示例实施例中,例如,可以通过一个包括进行OS专用调用以检索系统的各种关键字属性,和把该信息放置到一个能够发送到中心DEX数据存储并且能够分析和插入到节点表的消息的发现过程获得一些这种信息。如图7中所示,例如,节点表740可以包括在DEX 710中。路由算法可以查询涉及要在路由决定中使用的不包括在事件目录720中的事件的字段的其它数据表和数据存储。因此,在一个规定了实例类型和实例的过滤器中,例如,可以利用过滤器中规定的实例字段,通过路由算法执行对一个对应的数据表或数据存储的查询。查询的结果可以用于确定对应的节点,以接收预订请求。
在本发明的一个示例实施例中,一个远程监督产品在配置上寄存正在,例如,一个远程监督数据存储770中提交有关它的事件的对应节点。远程监督是一个提交有关一个位于不是产品所在的节点上的实例的事件的产品。在本发明的一个示例实施例中,事件管理系统也可以向一个远程监督数据存储770提供实例,节点和事件管理器。由于多个远程监督器可以在监督一个单一节点上的实例的不同节点上,因而一个包括实例、节点、和事件管理器节点的可搜索数据存储允许一个特定节点的信息的确定。这可以用于把对应节点添加到对其预订接收有关感兴趣节点的所有事件(例如,那些有关由于远程监督将要报告给其它节点上的事件管理器的对应节点上的实例的事件)的列表。此外,多个远程监督器可以在监督一个单一实例的不同节点上。因此,通过使远程监督数据存储770中具有实例和时间管理程序节点,能够确定需要接触以获得有关实例的这些事件的附加事件管理器。
例如,过滤器数据存储750可以包括过滤器和对应的符号过滤器名称。可以把符号过滤器名称用于预订,而不是需要充分说明的过滤器。符号名称将唯一地引用,例如,在过滤器数据存储750中定义的一个过滤器。由于过滤器可以动态地改变并且预订正在进行,因而对过滤器的定义的改变应当,例如,由事件API自动处理。例如,事件API将封装用于在预订请求中使用的符号过滤器的更新通知的寄存。事件API可以检索新的定义,删除所有旧的IPC请求,用新的过滤器定义重新运行路由算法,和利用使用新过滤器定义的对应事件管理器重新建立新的IPC请求。因此,路由算法可以,例如,查询过滤器数据存储750,以动态地获得对应的更新过滤器750。
在本发明的一个示例实施例中,事件管理系统包括寄存对于主题改变的兴趣。可以建立一种有关对一个事件管理器的任何主题改变的监视。例如,这种监视可以是一种方法,当新过程正运行在匹配某种标准的机器上时,一个通信层将通过这种方法通知客户,即,通知客户在该节点上正运行着一个事件管理器。例如,监视可以作为一个函数实现。可以分析监视的结果,以确定它们是否匹配原始过滤器的标准。如果匹配,那么可以形成对该节点的预订。此外,可以调用使用者寄存预订回叫,以通知使用者预订已经添加到该节点。
在本发明的一个示例实施例中,如果满足一个过滤器所需的节点列表改变而预订尚未解决时,事件管理系统提供通知。例如,如果使用了“like”操作符并且在一个原始调用之后另一个事件管理器开始运行或在网络上可见;将一个末端产品安装在一个新节点上;或一个改变了它的定义的过滤器内的外部参考(例如,用于引用一个对应事件过滤器的符号名称)有效地改变了过滤器,节点可能改变。当把过滤器映射到一个数据存储查询以确定它的路由时,对于对其运行查询的对应的数据存储的改变可能潜在地改变查询结果。
因此,本发明的事件管理系统包括通知何时查询结果可能改变。例如,可以通过一个对应服务处理器控制对对应数据存储的更新。例如,服务处理器可以通过一个进程间通信消息提供更新的通知。此外,可以在对应的数据存储,例如,DEX 710内的一个主题区基础上公布事件。例如,主题区是节点表740。例如,它可以是数据库内的一个表的分组。在本发明的一个示例实施例中,公布的事件指示更新了什么主题区。
事件管理系统包括一个用于查询改变的跟踪机构。可以存储初始查询的结果,例如,运行查询中使用的数据行和主题区。应当建立对于使用的主题区的更新事件的预订。一旦接收到用于主题区之一的一个更新事件,可以重新运行查询。将重新运行的结果与以前查询的结果比较,并且可以进行单个事件管理器预订请求的适当添加或删除。
在本发明的一个示例实施例中,路由算法,例如,可以使用组合事件过滤器的评价树的每个子表达式的合取信息,以限制潜在可能发生事件的节点的列表。例如,事件过滤器“name=DatabaseDown andname=ServerDown”包括由合取“and”组合的一个第一子表达式“name=DatabaseDown”和一个第二子表达式“name=ServerDown”。例如,路由算法可以通过单个地分析每个子表达式确定其上可能具有事件发生的节点的列表。结果,合取被作为“或”处理。因此,节点的列表包括所有具有可以建立一个DatabaseDown的产品的节点,以及所有具有可以建立一个ServerDown的产品的节点。例如,一个字段不能有两个不同的值,因此匹配这个过滤器的事件不能发生。因此,在子表达式之间使用合取“and”的路由算法将确定不可能存在用于过滤器定义事件的节点。因此,路由算法将不把这个预订请求提供到任何节点。
这是一个检测不良形成的使用者预订的例子。可以立即给使用者通知,在系统中绝没有这种事件存在,使用者将意识到这种错误,并可以改正预订。对于其它样本过滤器,目标是要优化需要把预订路由到何处。例如,如果不使用在过滤器name=ServerDown and node=nodeA中的合取信息,节点子表达式的评价将导致一个单一节点,节点A,而名称子表达式的评价将导致节点A,节点B,和节点C。因此,每个子表达式的评价的结果的并集(例如,全表)将是节点A,节点B,和节点C。但是,由于在本示例过滤器中的合取是and,全表应当仅是节点A。因此,如果把过滤器路由到所有三个节点,将没有附加事件被接收。此外,预订节点B和节点C的系统中效率进一步降低,因为将要进行对应的请求,并且位于节点B和节点C上的事件管理器将评价对应的请求,即使它们绝不会发现该过滤器的匹配。
本发明的过滤系统被设计为操作在客户和服务器可能使用不同的代码页运行的客户/服务器环境中。此外,本发明的事件过滤器,例如,可以这样配置,使得能够自动地至少解释事件结构的预定义字段和存储在事件目录中的事件结构的字段的内容,以提供事件过滤器的本地版本。在本发明的一个示例实施例中,从一个过程传递到另一个过程的消息(例如,诸如对包含一个事件过滤器的事件管理器的预订请求之类的任何进程间通信)在跨越节点边界(例如,过程正在运行并且正在不同的节点上通信)时,是可映射的。本发明的事件管理系统的通信层跟踪消息的代码页,并且提供一个通信层的接收代码可以调用的转换映射。
在本发明的一个示例实施例中,将诸如产品名称,名称,类型,条件事件,和关键字名称之类的事件的字段和关键字限制到一个可以具有跨越所有代码页的唯一代表的字符集,例如,可移植字符集。因此,这种限制保证了无遗漏映射。因此,存在从一个代码页中的一个字符到其它代码页中的一个适当字符的一对一映射。在本发明的一个示例实施例中,可移植字符集包括,例如,字符<space>,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9,\,_,′,!,″,#,$,%,&,′,(,),*,+,,,-,.,/,:,;,<,=,>,?,@,{,|,},和~。
在本发明的一个示例实施例中,事件管理系统包括语言的关键字的一对一字翻译。因此,除了扩展关键字名称之外的事件中的所有字段名称以及比较操作符可以具有用于当前语言中替代的目录查找。这使得能够用当地语言构造过滤器。但是,在预订中使用过滤器之前,可以把它翻译成普通格式,从而使在过滤器的翻译中任何远程接收机可以使用一种单一格式。事件中所有字段名称(除了扩展关键字名称之外)和比较操作符可以具有用于以当前语言替代的目录查找。可以使用双向翻译,从而使用者可以以当地语言观看事件过滤器,但是使系统以标准语言使用和存储事件过滤器。由于过程将以相同的语言通信,因而过程之间的通信不需要转换。因此,标准语言提供了所有过程都可以依赖的单一语言,并且只有在对使用者展现事件过滤器时才有必要提供翻译。
上述实施例是本发明的说明示例,并且不应认为本发明仅限于这些特殊实施例。熟悉本领域的人员可以进行各种改变和修改,而不脱离附属权利要求中定义的本发明的精神和范围。