基于企业微信的图书馆网络检测功能研究与实现
——以西安建筑科技大学图书馆为例

2021-03-08 08:48杨平生
内蒙古科技与经济 2021年2期
关键词:网络设备列表服务器

杨平生

(西安建筑科技大学 图书馆,陕西 西安 710055)

随着图书馆线上业务的发展,各种电子期刊、电子图书、学位论文等数字化资源实行7×24h不间断服务;书目检索、入馆预约、座位预约、研讨空间预约等都要在线进行,因此保证图书馆的在线应用系统和网络设备能够正常运行成了一项重要任务。系统管理人员需要随时知道应用系统和关键网络设备的当前运行状态,尤其在非工作时间,发生故障时才能及时得到预警,并排除故障,因此有一个针对图书馆使用的、便捷的、轻量级的检测功能模块就显得非常有必要。

企业微信是腾讯公司打造的面向企业市场的通讯与移动办公工具,主要功能有企业通讯录、视频会议、考勤打卡、审批模板、企业支付、微文档、微盘等;企业微信具有开放的生态,开放了13类390个接口(API),包括通讯录管理、身份验证、消息推送、OA数据接口、电子发票、移动端SDK等接口。

笔者正是利用企业微信开放的接口实现了针对图书馆应用系统和网络设备的检测功能,只要在手机上登录企业微信,就能随时接收到检测程序发送来的检测结果,实时掌握系统和设备的运行状况。西安建筑科技大学图书馆自从2018年4月开始使用该检测功能至今,一直运行良好,尤其在假期和疫情期间,为及时掌握应用系统和设备信息发挥了一定的作用。

1 研究与方法

利用企业微信发送消息来实现运维监控与告警的研究有周昊实现的将Zabbix和企业微信运用于公安监控网络[1];韦筱泉等实现的后台程序向企业微信发送消息[2];李琦实现的以OEMCC与企业微信结合的数据库集中监管[3];李正等实现的基于企业微信的网络故障告警系统[4];刘淑影等实现的基于企业微信的机房报警系统[5];崔超实现的基于企业微信推送信息[6]。

笔者采用的方法是将检测程序部署在服务器上,负责定时检测图书馆主页、书目检索系统、重要数据库等各项应用系统和UPS、汇聚交换机、监控录像机、门禁服务器等设备,然后将检测信息通过企业微信的开放接口传送至手机端企业微信App,实现的效果如图1。如果有智能机房管理系统,还可以采用中间库的方式来采集状态数据。

文中应用的检测脚本采用Python2.7编写,调用的第三方库包括:requests、json、subprocess、re、BeautifulSoup。

图1 企业微信检测结果

2 功能实现

2.1 接口调用与信息发送

注册企业微信获取corpid用于识别企业;创建应用获取AgentId参数用于识别应用;获取Secret密钥用于请求验证身份的Token。所有接口使用HTTPS协议,通过GET或POST方法请求。可以指定消息允许接受的成员ID列表和部门ID列表、标签ID列表,消息文本最长不超过2 048字节。主要代码如下:

defToken(self):

url =′https://qyapi.weixin.qq.com/cgi-bin/gettoken′

params = {′corpid′:′ww*****1c2′,′corpsecret′:r′doZJgPM*****bt84′}

r = requests.get(url=url,params=params)

token=json.loads(r.text)[′access_token′]

return token

defsend_message(self):

data={"touser":"@all","toparty":" PartyID1 | PartyID2 ","totag":" TagID1 | TagID2 ",

"msgtype":"text","agentid":′*******′,"text":{ "content":"%s" %(self.text) },"safe":0}

value = json.dumps(data,ensure_ascii=False)

token = self.Token()

url =′https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s′%(token)

r = requests.post(url,data=value)

returnr.text

2.2 检测应用系统

HTTP状态码(HTTP Status Code)指服务器返回的对超文本传输协议的响应,是一个包含数字代码的信息头,它是由RFC 2616所规范定义的。状态码能够反映服务器的消息、成功、重定向、请求错误、服务器错误的详细状况。状态码200即为OK状态码,表示请求成功,请求的响应头或数据体将得到返回,所以如果识别出200 状态码,就表示服务器处于正常状态。笔者使用requests库,获取图书馆应用系统网页的状态码,根据状态码的状况返回信息,判断应用是否处于正常状态,然后将判断加入消息列表。主要代码如下:

defcheck_url(url,name):

response = requests.get(url)

ifresponse.status_code == 200:

msg.append(name +′:网页正常′)

else:

msg.append(name + ′:网页异常′)

2.3 检测UPS状态

网络爬虫是指能够按一定的规则抓取网络信息的一段程序。UPS运行状态的信息存在于本地UPS的Web页面中,而这个页面是需要登录才能打开的,所以需要网络爬虫模拟正常浏览器登录来获取信息。笔者通过requests的POST方法登录UPS的Web页面,使用BeautifulSoup解析文档,提取其中表示UPS当前报警状态的数据,转码后发送至推送信息列表。主要代码如下:

defapc(host,referer,url,name):

headers = {′Accept′:′text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8′,′Accept-Encoding′:′gzip,deflate′,′Host′:host,′Referer′:referer,

′User-Agent′:′Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/67.0.3396.99 Safari/537.36′}

form_data = {′login_username′:′***′,′login_password′:′***′,′submit′:′Log On′,}

response = requests.post(url = url,headers = headers,data = form_data)

out = response.content

soup = BS(out,′html.parser′,from_encoding = ′utf-8′)

alarms = soup.find(′td′,width="23%")

tit = alarms.a.attrs[′title′]

titl = repr(tit.decode(′utf-8′).encode(′utf8′))

msg.append(name + ′:′ + titl)

2.4 检测网络设备连通性

Python通过subprocess库产生子进程,stdin、stdout和stderr分别表示子程序的标准输入、标准输出和标准错误。笔者调用subprocess库中的Popen类,通过“ping”命令来测试图书馆关键网络设备的连通性,返回值进行判断后将“网络连接超时”“无法访问目标主机”“网络正常”加入消息列表,用以及时反馈设备状态。主要代码如下:

defping_ip(ip,name):

p = subprocess.Popen(["ping.exe",ip],

stdin = subprocess.PIPE,

stdout = subprocess.PIPE,

stderr = subprocess.PIPE,

shell = True)

out = p.stdout.read()

ifout.find(′timed out′) != -1:

msg.append (name + ′:网络连接超时′)

elifout.find(′Destination′) != -1:

msg.append (name + ′:无法访问目标主机′)

else:

msg.append (name +′:网络正常′)

3 结束语

通过企业微信及时获取有关图书馆应用系统和关键网络设备的信息,能够及时发现问题并解决问题,为图书馆数字资源不间断开放提供了保障。通过西安建筑科技大学图书馆几年来的使用显示,该应用模块简单易用,监控范围可以自己调整,发送信息及时,同时也是一个免费的应用。以后还应当完善功能,拓展监控范围,充实所反映的信息细节。

猜你喜欢
网络设备列表服务器
网络设备的安装与调试课程思政整体设计
网络设备故障分析与检测系统的需求分析
学习运用列表法
服务器组功能的使用
理解Horizon 连接服务器、安全服务器的配置
扩列吧
PowerTCP Server Tool
列表画树状图各有所长
地铁通信网络设备的维护
2011年《小说月刊》转载列表