软件研发与应用SOFTWARE DEVELOPMENT&APPLICATION
基于C/S架构的系统监控软件计与实现
刘震伟
(江西省烟草公司南昌市公司,南昌330009)
摘要:软件维护占据了软件生命周期的绝大部分时间,其中软件维护的一项基础性工作是对软件系统运行状态进行监控。设计并实现了基于C/S架构的系统监控软件,服务端程序采用WPF界面开发框架提升用户界面的友好性,客户端程序采用QT开发框架实现跨平台部署,服务端与客户端通过UDP 报文进行消息交互。
关键词:软件维护;运行状态监控;C/S架构;跨平台
1概述
软件产品交付使用后即进入到软件维护的阶段,这个阶段将占据软件生命周期的绝大部分时间,软件维护的一项基础性工作是对系统运行状态进行监测,因此设计并实现一款系统监控软件显示尤为重要。C/S架构是一种经典的软件架构,分为客户端(Client)和服务端(Server)o客户端和服务端可以采用不同的编程语言或异构的软件架构,并通过消息传递实现功能交互。
2需求分析
2.1功能性需求
信息化管理员需要及时掌握所维护的终端设备、应用系统的运行情况。系统运行状态监控软件主要用于监测目标计算机的运行状态,以及对目标系统和应用程序进行启停控制。目标计算机的监测内容主要包括:系统工作状态(在线/离线)、系统资源使用情况(CPU使用率、内存使用率)、应用程序的运行状态(启动/未启动)等。
2.2非功能性需求
被监控的计算机运行状态信息需要以友好的界面展示给用户,被监测计算机有Windows、Linux操作系统,监控软件需要支持跨平台部署。
3系统设计
3.1系统总体架构
系统运行状态监测软件分为主控程序和被控程序,主控程序作为服务端用于展示被监测系统、应用程序的运行状态,以及提供对被控程序的相关操作。被控程序作为客户端用于采集被监测系统、应用程
序的运行状态。主控程序与被控程序通过UDP报文进行消息通信。主控程序向被控程序发送命令,询问被控程序系统运行 状态,被控程序在接收到主控程序的消息命令后,通过系统调用的方式,获取系统、应用程序的运行状态,并将采集到的状态信息以消息方式返回给主控程序。系统的C/S架构如图1所示。
MoniLor(Server)
图1系统C/S架构图
3.2服务端程序
服务端即监控软件的主控程序,为用户提供友好的操作界面,帮助用户及时掌握所维护的终端设备、应用系统的运行情况。为提升界面的友好性,主控程序采用WPF的界面开发框架,WPF提供了基础的UI组件,如按钮、下拉框、列表框等,但这些基础的UI组件要实现复杂的UI界面,仍然非常困难。在综合比较各种第三方基于WPF的组件库后,选取较为成熟的Telerik组件库,设计主控程序的UI界面。主控程序与被控程序属于一对多的关系,主控程序需要查看每一个被控程序的状态,因此将每一个被监控系统的状态信息作为独立的窗口单独展示。主控程序的系统运行逻辑为:(1)加载配置文件,显示界面的初始化信息。(2)启动定时器任务,定期向被控程序发送询问命令。(3)解析
作者简介:刘震伟(1992-),男,硕士,研究方向:分布式计算、信息系统管理。
2021.643
、~臨脑壊程技巧与维
声乂二/
®
®
实用第一f智慧密集3回®回®®同回回19同&1回回S1361®
被控程序返回的运行状态信息,将相关信息展示在对应控件中。
主控程序采用MVVM的设计思想,界面展示的数据结构定义在Model层袁用户操作的逻辑处理在View-Model层实现,用户界面的设计在View层实现。Model 层与ViewModel层之间通过通知、更新的方式保证数据的一致性袁ViewModel层与View层之间通过绑定的方式袁保持数据一致。主控程序的MVVM架构如图2所示。
图2MVVM的程序架构图
3.3客户端程序
客户端即监控软件的被控程序,以服务的形式部署在被监控系统的计算机上,随被控计算机系统的启
动而自启。被控程序启动后,持续监听指定端口的UDP数据报文,当接收到主控程序发来的数据报文时,将报文转换为命令消息。根据命令消息的具体内容,采集目标计算机的系统运行状态、资源使用情况。被控程序的处理逻辑为:(1)加载配置文件,读取待监测应用程序的路径;(2)接收服务端指令,通过系统命令获取计算机的运行状态;(3)将监测到的状态信息回传给服务端程序。
4系统实现
4.1主控程序
4.1.1Model数据结构的定义
界面展示数据结构的定义通过ClientStatus类实现,ClientStatus类定义了需要展示的内存、CPU、以及进程状态等信息。进程状态信息为字典类型,字典的Key为进程名,Value为进程的状态信息。ClientStatus类的类图如图3所示。
ClientStatus
-memory:string
-cpu:string
-processStatus:Dictionary<string,string>
图3ClientStatus类的类图
4.1.2界面View
主控程序的窗口分栏展示使用RadTileView控件实现,ItemContainerStyle用于定义每一个子窗口的样式,ItemsSource为子窗口的数据源,HeaderStyle为窗体标题的显示样式。具体实现代码如下:
<telerik:RadTileView HeaderStyle="{StaticResource TileViewItemHeaderStyle}"ItemContainerStyle="{Static Resource TileViewItemCustomStyle}"ItemsSource=" {Bin di ng Items}"Mini mizedRowHeight="180"Min i-mizedColumnWidth="300"MinimizedColumnsCount=" 1"/>
每一个子窗体需展示被监测计算机进程的状态,进程状态展示使用RadGridView控件,<telerik:GridView-DataColumn>标签用于定义一列数据兀素,<telerik:Grid-ViewColumn.CellTemplate〉标签用于定义具体展示单兀的样式。具体实现代码如下:
<tele rik:RadG ridView>
<tele rik:RadG ridView.Colum ns>
<tele rik:G ridViewDataColum n>
<tele r ik:G ridViewColum n.CellTemplate>
//定义一个客户端的展示界面
gridview不显示</tele r ik:G ridViewColum n.CellTemplate> </tele rik:RadG ridView.Colum ns>
</tele rik:RadG ridView>
4.1.3系统监测ViewModel类
以被控系统CPU资源使用信息为例,变量值与文本显示控件绑定,当变量值改变时通知控件更新显示值。远程监控ViewModel类部分实现代码如下:public st r ing CPU
{
get{
return model.cpu;
}
set{
if(model.cpu!=value){
model.cpu=value;
this.OnPr o pe rtyCha nged("CPU");
}
}
}
4.2被控程序
4.2.1跨平台监控
被控程序采用QT软件开发框架实现,QT是由C++编程语言实现的,用它开发应用程序,可以实现一次开发跨平台发布。由于Windows操作系统与Linux操作系统获取系统运行状态的命令不同,因此在实现系统资源获取时,需要区分不同的操作系统。以终止进程操作为例,在Windows系统中通过"taskkill/i
m进程名/f"命
软件研发与应用SOFTWARE DEVELOPMENT&APPLICATION■
令实现,在Linux操作系统中通过野kill-9进程名”命令实现。QT中使用宏定义区分不同的操作系统,具体实现代码如下:
#ifdef Q_OS_LINUX
…〃linux系统命令执行方法
#en d if
#ifdef Q_OS_WIN32
…〃Windows系统命令执行方法
#endif
4.2.2消息传递
被控程序通过系统调用的方式获取到系统的状态信息,并以消息的方式传递给主控程序。QT中UDP数据报文的收发通过QUdpSocket类实现袁发送UDP报文需要调用writeDatagram方法并指明目标计算机的IP和端口。UDP数据报文的接收通过信号槽的方式实现,QUdp­Socket通过bind方法指定监听的IP和端口信息,当接收到UDP数据报文时将触发readyReadO信号,并通知对应的处理槽函数。UDP数据报文的接收实现代码如下:QUdpSoeket reeeiver;〃定义udp接收Soeket对象reeeiver.bind(elientPort,QUdpSoeket::ShareAddress QUdpSoeket::ReuseAddressHi nt);〃绑定指定的监听端口conneet(&reeeiver,SIGNAL(readyRead()),this,SLOT (proeessPe n di ngDatagram()));〃定义信号槽连接
4.3主控程序运行效果
被控程序以服务形式装载到系统服务中袁没有用户操作界面。主控程序运行效果如图4所示。图4中显示的主控程序运行界面中,定义了4个目标监控系统袁名称分别为客户端1、客户端2、客户端3、客户端4,对应的IP地址分别为127.0.0.1,192.168.0.2, 192.168.0.3,192.168.0.4。其中,客户端1为绿灯,表示该客户端处于在线状态袁当前时刻内存和CPU的使用率分别为87%、39%o客户端1被监测的应用程序有4个,有3个处于运行状态,1个处于未运行状态。其他客户端为红灯,表明系统处于离线状态。每一个客户端状态信息展现在独立的窗体内袁当窗体为简化显示状态时,点击窗体右上方的还原按钮,可以展示应用程序运行状态。窗体之间可进行缩放切换,以查看系统状态或运行详情。通过点击界面的操作按钮,可以对系统及应用程序进行启停控制。
图4主控程序运行效果图
5结语
采用C/S架构设计并实现了系统运行状态监控软件,主控程序作为服务端应用,采用WPF界面开发框架,并充分运用了MVVM的设计思想袁将界面展示、逻辑处理、数据模型进行逻辑分层。被控程序作为客户端应用,采用QT开发框架实现,通过QT中宏定义的方式,实现不同操作系统环境中系统状态信息的获取,具有较好的可扩展性、跨平台性等特点。系统的实现为机房软硬件运维提供了基础保障,
能有效提升系统运维效率。
参考文献
[1]山寿,郝明哲,孙伟.基于数据分发服务和WPF技
术的试飞实时监控系统设计[J].计算机测量与控制,2020,28(03):119-122+143.
[2]袁琴,刘明启.一种基于C/S架构下的远程监控系
统设计[J].无线互联科技,2011,(12):35. [3]刘新玉.基于C/S架构的电池监控系统设计[D].
杭州电子科技大学,2013.
[4]雷雪.基于C/S模式的远程监控系统设计与实现[D].
北京邮电大学,2011.
4必亠仇亠必二必亠必亠牡班亠必4--9--弘-业-S-A-业-S-3--业-%-S-4-4-4-4-4-兌-4-4-业-业-3--业-3
(上接第34页)
式。因此,需要在现有研究成果的基础上继续不断深入探究和研发面向方面技术,使其变得更加完美。
参考文献
[1]黄文豪.面向方面程序设计(AOP)在Web程序中
的应用研究[D].武汉工程大学,2016.[2]陈恒鑫,熊壮,杨广超,王宁,霍敏霞.C++程序设
计[M].重庆大学出版社,2016.
[3]谢林.AOP思想在项目中的应用与研究[J].电脑
知识与技术,2010,6(15):4130-4132.
[4]刘营,王斯梁.面向方面的程序设计的研究与应用
[J].计算机应用研究,2005,(11):
157-159+178.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。