发明内容
本发明的技术解决问题是:克服技术的不足,提供一种基于Ajax和Web服务技术的卫星应用系统运行监控方法,该方法在降低系统耦合度和网络负载、提高系统灵活性的基础上,实现了状态页面无刷新实时显示。
本发明的技术解决方案是:一种基于Ajax和Web服务技术的卫星应用系统运行监控方法,步骤如下:
(1)在Web服务器端定义状态数据提交接口,并将该接口以Web服务的方式进行发布,对外提供服务描述WSDL文件,用于生成Web服务客户端;
(2)任务运行监控模块负责任务的创建并维护任务执行状态,任务执行过程中当任务执行状态发生变化时,任务运行监控模块将任务执行状态信息通过Web服务客户端提交到状态数据提交模块;系统状态监视模块负责收集系统运行状态信息并上报,当系统运行状态信息发生变化时,系统状态监视模块将系统运行状态信息通过Web服务客户端提交到状态数据提交模块;
(3)状态数据提交模块接收任务执行状态信息和系统运行状态信息,将上述状态信息存储或更新至状态数据本地库中,并向状态数据维护模块发送状态变更通知,通知的内容为更新的状态信息类型,所述状态信息类型包括任务执行状态信息和系统运行状态信息,任务执行状态信息包括常规任务信息、订购未生产产品任务信息和订购已生产产品任务信息,每种任务信息又包括一个或多个子任务信息;系统运行状态信息包括设备状态信息和应用软件状态信息,设备状态信息包括系统中每种类型设备的状态信息,应用软件状态信息包括系统中每个应用软件的状态信息;
(4)状态数据维护模块以树形结构标识状态信息类型,根节点代表所有状态信息类型,子节点代表在该状态信息类型之下的子状态信息类型分支,每个节点的值代表该节点当前的状态点标识;状态数据维护模块负责更新状态信息的状态点标识以及响应客户端页面的状态信息请求;状态数据维护模块接收状态数据提交模块发送的状态变更通知,根据通知中的状态信息类型匹配树中对应的节点,并更新该节点的状态点标识;状态数据维护模块在接收到客户端页面的状态信息请求之后,获取请求中的状态信息类型及其状态点标识,根据状态信息类型匹配树中对应的节点,将请求中的状态点标识与节点值进行比对,若不一致,则调用状态数据获取模块获取状态信息并返回,否则进行等待,直到节点值发生变化或时间超时后再调用状态数据获取模块获取状态信息并返回;
(5)客户端页面负责实时获取状态信息并以图表的形式向用户展现;客户端页面定时发起状态数据获取请求,请求中包括状态信息类型及当前的状态点标识;状态数据维护模块对请求进行响应,并将状态信息通过SOAP协议打包并返回客户端页面,客户端页面接收返回信息并进行解析,根据解析结果实时更新局部页面的状态信息及其状态点标识。
所述步骤(4)状态数据维护模块以树形结构标识状态信息类型,负责更新状态信息的状态点标识具体过程如下:
(1)接收状态变更通知,根据通知中的状态信息类型匹配树中对应的节点m1;
(2)获取根节点的状态点标识,并执行递增操作,若状态点标识没有超过设定的最大值,则更新m1的节点值;否则执行步骤(4);
(3)遍历m1的所有父节点,并更新其节点值,直到更新根节点为止;
(4)若状态点标识超过设定的最大值,将树中所有节点的值清零。
所述步骤(4)状态数据维护模块响应客户端页面的状态信息请求的具体过程如下:
(1)接收客户端页面的状态数据获取请求,根据请求中的状态信息类型匹配树中对应的节点n1;
(2)设置比对次数的初始值为0;
(3)将请求中的状态点标识与n1的节点值进行比对,若不一致,执行步骤(6),否则执行步骤(4);
(4)比对次数加1;
(5)休眠一段时间,若比对次数没有超过设定的最大值,重复执行步骤(3),否则执行步骤(6);
(6)根据请求的状态信息类型调用状态数据获取模块获取状态信息并返回。
所述步骤(3)中状态信息存储或更新基于Berkley DB内存数据库,其高速的读写技术使得在其之上的操作与操作内存相差无几。
所述步骤(5)客户端页面采用SOAP协议进行任务执行状态信息和系统运行状态信息的传输。
本发明与现有技术相比具有如下优点:
(1)本发明的状态数据维护模块维护状态信息的状态点标识,并在接收客户端页面的状态获取请求时,对请求中的状态点标识进行判断,若状态点标识和服务器端一致,说明客户端的状态信息已经是最新状态,此时,不直接将状态信息返回而是等待,直到状态发生变化或超时后才将状态信息返回,这样避免了大量重复信息的发送,从而有效降低了网络通信负载。
(2)传统的JSP页面必须手动刷新客户端页面向服务器发起请求,等待服务器的结果后刷新整个页面的值,若服务器端响应慢,客户端将会是空白页面而无法操作,本发明的客户端页面采用Ajax调用Web服务的方式主动发起异步请求,由于请求为异步方式,客户端页面不必等待服务器端的响应,因此在请求的过程中页面的显示不会发生变化,用户仍然可以和客户端进行交互,服务器端的状态信息返回之后,客户端页面获取状态信息并更新局部页面的值,而不是重新加载整个页面,实现了状态页面无刷新实时显示。
(3)本发明的状态数据提交模块采用Web服务技术对功能进行封装,采用WSDL协议进行服务描述,数据传输采用标准SOAP协议,由于Web服务的松耦合特性,它只需对外提供一个接口,调用方无需关心具体实现,极大地降低了系统的耦合度和复杂度;更为重要的是它不依赖于具体的编程语言和系统平台,其出色的跨平台能力很好地解决了系统内平台异构的问题,极大地提高了系统灵活性;
(4)本发明的状态数据提交模块采用Berkley DB内存数据库实现状态信息的存储或更新,其高速的读写技术使得在其之上的操作与操作内存相差无几,有效降低了数据的存储开销,使任务执行状态信息和系统运行状态信息发生变化时能实时更新到状态数据本地库中,保证监控数据的实时性要求;
(5)本发明已应用于某遥感卫星地面数据处理系统,经过该系统两年的实际业务运行证明了本发明的正确性和可用性。
具体实施方式
下面结合附图对本发明作进一步说明。
如图1所示,本发明基于Ajax和Web服务技术的卫星应用系统,该系统主要包括任务运行监控模块、系统状态监视模块、状态数据提交模块、状态数据维护模块、状态数据获取模块和客户端页面。其中,涉及到的任务类型包括常规生产任务(简称常规任务,指操作员根据卫星接收的原始数据制定的自动生产任务)、订购未生产产品任务(指用户请求的产品还未经过生产环节)和订购已生产产品任务(指用户请求的产品已经生产完毕,待上传),每种任务又包括一个或多个子任务,任务执行过程中产生的状态数据称为任务信息和子任务信息;系统包括多种设备和应用软件,设备类型包括计算机、路由器、交换机、磁盘阵列、磁带库和网闸等,设备的状态值称为设备状态信息,应用软件包括OMS(运行管理分系统软件)、DIMS(数据存储和管理分系统软件)、USS(用户服务分系统软件)和DPS(数据处理分系统软件),应用软件的状态值称为应用软件状态信息。上述设备和应用软件仅属于本发明监视的对象,其具体功能与本发明无关。
本发明的工作过程如下:
1、在Web服务器端定义状态数据提交接口,包括输入参数、操作名称和返回值,其中输入参数是要提交的任务执行状态信息、设备状态信息和应用软件状态信息;操作名称用于区分提交操作针对的对象;返回值为布尔类型,用于标识提交操作是否成功。将该接口发布成Web服务,并生成服务的描述WSDL文件,用于生成Web服务的客户端。
2、任务运行监控模块负责任务的创建并维护任务执行状态,任务执行过程中当任务执行状态发生变化时,任务运行监控模块将任务执行状态信息通过Web服务客户端提交到状态数据提交模块,如图2所示,任务运行监控模块具体执行过程如下:
(1)接收用户提交的卫星数据产品生产订单,调用任务生成模块自动创建一个新任务,任务类型包括常规任务、订购未生产产品任务和订购已生产产品任务;
(2)根据创建的任务类型启动相应的任务监控线程,调度该任务执行,任务执行过程中根据各子任务的执行结果改变任务执行状态信息;
(3)任务执行状态信息发生变化时,将任务执行状态信息通过Web服务客户端提交到状态数据提交模块;
(4)对于失败的任务,用户可在失败列表中进行手动重试,重试操作重新激活任务监控线程,控制其在任务失败点开始继续执行。
3、系统状态监视模块负责收集系统运行状态信息并上报,当系统运行状态信息发生变化时,系统状态监视模块将系统运行状态信息通过Web服务客户端提交到状态数据提交模块,收集方式分为两种:设备方上报或主动查询。在设备上报模式下,受监控的设备或应用软件周期上报其自身的状态信息,在主动查询模式下,系统状态监视模块通过状态获取模块主动查询的方式实时获取设备和应用软件的状态信息,两种模式可以同时使用。如图3所示,系统状态监视收集到系统运行状态信息后,处理过程如下:
(1)在系统运行状态信息中获取设备号idNew;
(2)获取当前的系统运行状态信息列表;
(3)对系统运行状态信息列表进行轮询,获取第一个系统运行状态信息,获取该系统运行状态信息中的设备号id;
(4)id与idNew进行对比,若一致,执行步骤(5),否则执行步骤(7);
(5)将设备号为id的系统运行状态信息与设备号为idNew的系统运行状态信息进行对比,若不同执行步骤(6),否则退出。
(6)将系统运行状态信息通过Web服务客户端提交到状态数据提交模块;
(7)判断是否有下一个系统运行状态信息,若有,获取下一个系统运行状态信息,获取该系统运行状态信息中的设备号id,执行步骤(4),否则退出。
4、状态数据提交模块接收任务执行状态信息和系统运行状态信息,调用Berkley DB提供的持久化方法将上述状态信息存储或更新至状态数据本地库中,并向状态数据维护模块发送状态变更通知,通知的内容为更新的状态信息类型;信息存储或更新操作采用线程同步,以保证数据安全性。
5、状态数据维护模块以树形结构标识状态信息类型,根节点代表所有状态信息类型,子节点代表在该状态信息类型之下的子状态信息类型分支,每个节点的值代表该节点当前的状态点标识。
如图4所示,根结点下有两个子节点代表任务执行状态信息和系统运行状态信息,任务执行状态信息下又有3个子节点代表常规任务信息、订购未生产产品任务信息和订购已生产产品任务信息,每个任务信息节点下又有一个或多个子节点代表该任务的子任务信息;系统运行状态信息下又有两个子节点代表设备状态信息和应用软件状态信息,设备状态信息节点下每个子节点代表一种类型设备的状态信息,应用软件状态信息节点下每个子节点代表系统中一个应用软件的状态信息;树中每层节点均按照从左到右的顺序进行编号(从0开始),从根节点出发到目的节点经过的分支编号即为该节点的编号。
如图5所示,状态数据维护模块负责更新状态信息的状态点标识以及响应客户端的状态信息请求;状态数据维护模块更新状态信息的状态点标识具体过程如下:
(1)接收状态变更通知,根据通知中的状态信息类型匹配树中对应的节点m1;以更新计算机设备状态点标识为例,状态信息类型填写为“100”,从根节点找到1分支,即系统运行状态信息节点,再找到0分支,即设备状态信息节点,再找到0分支即计算机设备信息接点;
(2)获取根节点的状态点标识,并执行递增操作,若递增后状态点标识没有超过设定的最大值,则更新m1的节点值;否则执行步骤(4);
(3)遍历m1的所有父节点,并更新其节点值,直到更新根节点为止;
(4)若状态点标识超过设定的最大值,将树中所有节点的值清零。
状态数据维护模块响应客户端的状态信息请求的具体过程如下:
(1)接收客户端页面的状态数据获取请求,根据请求中的状态信息类型匹配树中对应的节点n1;
(2)设置比对次数的初始值为0;
(3)将请求中的状态点标识与n1的节点值进行比对,若不一致,执行步骤(6),否则执行步骤(4);
(4)比对次数加1;
(5)休眠一段时间,若比对次数没有超过设定的最大值,重复执行步骤(3),否则执行步骤(6);
(6)根据请求的状态信息类型调用状态数据获取模块获取状态信息并返回。
6、客户端页面负责实时获取状态信息并以图表的形式向用户展现。
如图6所示,具体执行过程如下:
(1)客户端页面通过Ajax客户端主动发起状态数据获取请求,请求中包括状态信息类型及当前的状态点标识(初始值为-1);
(2)异步接收状态数据获取请求的结果,结果中包含状态信息和服务器端最新的状态点标识;
(3)初始化Javascript数组,用于暂存请求结果中包含的状态信息;
(4)在请求结果中获取SOAP体内类型为MultiRef的所有节点;
(5)对每个MultiRef节点进行遍历,获取该节点内的状态信息,将状态信息打包后加入状态数组;
(6)根据数组中的状态信息更新局部页面上的状态值;
(7)将状态点标识存入客户端的会话中;
(8)休眠一段时间,重复执行步骤(1)。
实施例1(以任务运行监控为例):
1、定义某遥感卫星常规任务提交接口,该接口输入参数为常规任务对象,其属性为任务的详细参数;操作名称为submitRoutineMission,表示提交的是常规任务;返回值为布尔类型,代表提交的结果为成功或失败;将该接口发布成Web服务,并运用该服务的描述SubmitService.wsdl文件生成常规任务提交客户端。
2、假设操作员通过任务制定界面请求定制一个常规任务,任务运行监控模块自动生成一个新的常规任务,同时启动常规任务监控线程,监控线程调度该任务执行,根据其子任务执行的结果改变任务执行状态信息,任务运行监控模块通过Web服务客户端将任务执行状态信息提交到状态数据提交模块;对于失败的任务,用户可在失败列表中选择该任务并重试,此时会重新激活常规任务监控线程,从失败点处调度任务继续执行。
3、状态数据提交模块接收常规任务执行状态信息,若为首次提交,则调用Berkley DB的持久化方法将常规任务执行状态信息存储到状态数据本地库,否则更新Berkley DB中的任务执行状态值。同时,状态数据提交模块向状态数据维护模块发送状态变更通知,其中状态信息类型为“000”。
4、状态数据维护模块接收状态变更通知并更新状态点标识,具体执行过程如下:
(1)系统启动时对状态树进行初始化,设置各节点的值为0;
(2)接收状态变更通知,记录根结点的状态值;
(3)获取通知中的状态信息类型为“000”,对状态树进行遍历,匹配节点编号为“000”的节点,此处为根结点->任务执行状态信息->常规任务信息->子任务1信息;
(4)将根节点的状态值加1,若加1后没有超过最大值,则更新编号为“000”节点的状态值为最新值,并依次更新其父节点的值(节点“00-常规任务信息”“0-任务执行状态信息”),直到更新根节点,否则执行步骤(5);
(5)若加1后超过了最大值,则重新对状态树进行初始化,设置各节点的值为0。
5、用户打开客户端任务监控页面,并选择刚制定的常规任务,该页面通过Ajax客户端发起状态数据获取请求,请求中包括状态信息类型“000”及其状态点标识(初始值为-1)。
6、状态数据维护模块接收客户端的请求,获取请求中的状态信息类型“000”及其状态点标识-1,按照4中第(3)步的方法匹配对应的节点,将请求中的状态点标识-1与节点值进行比对,若不一致,则调用状态数据获取模块获取状态信息并返回,否则进行等待,直到节点值发生变化或时间超时后再调用状态数据获取模块获取状态信息并返回;
7、客户端接收返回信息并进行解析,根据获取的状态信息更新局部页面的状态值,将返回的状态点标识写入session;
8、客户端重新发起状态数据获取请求,请求中包括状态信息类型“000”及其状态点标识(session中的状态值),执行步骤6。
实施例2(以路由器设备状态监视为例):
1、定义路由器状态提交接口,该接口输入参数为路由器设备信息,其属性为设备编号,设备名称,所属分系统和该路由器的状态值;操作名称为submitRouterState,表示提交的是路由器设备状态;返回值为布尔类型,代表提交的结果为成功或失败;将该接口发布成Web服务,并运用该服务的描述SubmitService.wsdl文件生成设备状态提交客户端。
2、系统状态监视模块通过SNMP协议实时获取路由器设备的状态及其各端口连接状态,将路由器设备的状态信息通过Web服务客户端提交到状态数据提交模块。
3、状态数据提交模块接收路由器的状态信息,根据路由器的设备号判断是否为首次提交,若是则调用Berkley DB的持久化方法将路由器状态信息存储到状态数据本地库,否则更新Berkley DB中的设备状态值,同时,状态数据提交模块向状态数据维护模块发送状态变更通知,其中状态信息类型为“109”(假设状态树中路由器的节点标识为9)。
4、状态数据维护模块接收状态变更通知并更新状态点标识,具体执行过程如下:
(1)系统启动时对状态树进行初始化,设置各节点的值为0;
(2)接收状态变更通知,记录根结点的状态值;
(3)获取通知中的状态信息类型为“109”,根据编号对状态树进行遍历,匹配节点编号为“109”的节点,此处为根结点->系统运行状态信息->设备状态信息->路由器信息;
(4)将根节点的状态值加1,若加1后没有超过最大值,则更新编号为“109”节点的状态值为最新值,并依次更新其父节点的值(节点“10-设备状态信息”“1-系统运行状态信息”),直到更新根节点,否则执行步骤5;
(5)若加1后超过了最大值,则重新对状态树进行初始化,设置各节点的值为0。
5、用户打开客户端路由器设备监视页面,该页面通过Ajax客户端发起状态数据获取请求,请求中包括状态信息类型“109”及其状态点标识(初始值为-1);
6、状态数据维护模块接收客户端的请求,获取请求中的状态信息类型“109”及其状态点标识-1,按照4中第(3)步的方法匹配树中对应的节点,将请求中的状态点标识-1与节点值进行比对,若不一致,则调用状态数据获取模块获取路由器的状态信息并返回,否则进行等待,直到节点值发生变化或时间超时后再调用状态数据获取模块获取状态信息并返回;
7、客户端接收返回信息并进行解析,将返回的状态点标识写入session,并根据获取的状态信息调用画图模块重绘路由器各端口的颜色(绿色表示正常,红色表示故障);
8、客户端重新发起状态数据获取请求,请求中包括状态信息类型“109”及其状态点标识(session中的状态值),执行步骤6。
本发明说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。