楊平生
(西安建筑科技大學(xué) 圖書館,陜西 西安 710055)
隨著圖書館線上業(yè)務(wù)的發(fā)展,各種電子期刊、電子圖書、學(xué)位論文等數(shù)字化資源實(shí)行7×24h不間斷服務(wù);書目檢索、入館預(yù)約、座位預(yù)約、研討空間預(yù)約等都要在線進(jìn)行,因此保證圖書館的在線應(yīng)用系統(tǒng)和網(wǎng)絡(luò)設(shè)備能夠正常運(yùn)行成了一項(xiàng)重要任務(wù)。系統(tǒng)管理人員需要隨時知道應(yīng)用系統(tǒng)和關(guān)鍵網(wǎng)絡(luò)設(shè)備的當(dāng)前運(yùn)行狀態(tài),尤其在非工作時間,發(fā)生故障時才能及時得到預(yù)警,并排除故障,因此有一個針對圖書館使用的、便捷的、輕量級的檢測功能模塊就顯得非常有必要。
企業(yè)微信是騰訊公司打造的面向企業(yè)市場的通訊與移動辦公工具,主要功能有企業(yè)通訊錄、視頻會議、考勤打卡、審批模板、企業(yè)支付、微文檔、微盤等;企業(yè)微信具有開放的生態(tài),開放了13類390個接口(API),包括通訊錄管理、身份驗(yàn)證、消息推送、OA數(shù)據(jù)接口、電子發(fā)票、移動端SDK等接口。
筆者正是利用企業(yè)微信開放的接口實(shí)現(xiàn)了針對圖書館應(yīng)用系統(tǒng)和網(wǎng)絡(luò)設(shè)備的檢測功能,只要在手機(jī)上登錄企業(yè)微信,就能隨時接收到檢測程序發(fā)送來的檢測結(jié)果,實(shí)時掌握系統(tǒng)和設(shè)備的運(yùn)行狀況。西安建筑科技大學(xué)圖書館自從2018年4月開始使用該檢測功能至今,一直運(yùn)行良好,尤其在假期和疫情期間,為及時掌握應(yīng)用系統(tǒng)和設(shè)備信息發(fā)揮了一定的作用。
利用企業(yè)微信發(fā)送消息來實(shí)現(xiàn)運(yùn)維監(jiān)控與告警的研究有周昊實(shí)現(xiàn)的將Zabbix和企業(yè)微信運(yùn)用于公安監(jiān)控網(wǎng)絡(luò)[1];韋筱泉等實(shí)現(xiàn)的后臺程序向企業(yè)微信發(fā)送消息[2];李琦實(shí)現(xiàn)的以O(shè)EMCC與企業(yè)微信結(jié)合的數(shù)據(jù)庫集中監(jiān)管[3];李正等實(shí)現(xiàn)的基于企業(yè)微信的網(wǎng)絡(luò)故障告警系統(tǒng)[4];劉淑影等實(shí)現(xiàn)的基于企業(yè)微信的機(jī)房報警系統(tǒng)[5];崔超實(shí)現(xiàn)的基于企業(yè)微信推送信息[6]。
筆者采用的方法是將檢測程序部署在服務(wù)器上,負(fù)責(zé)定時檢測圖書館主頁、書目檢索系統(tǒng)、重要數(shù)據(jù)庫等各項(xiàng)應(yīng)用系統(tǒng)和UPS、匯聚交換機(jī)、監(jiān)控錄像機(jī)、門禁服務(wù)器等設(shè)備,然后將檢測信息通過企業(yè)微信的開放接口傳送至手機(jī)端企業(yè)微信App,實(shí)現(xiàn)的效果如圖1。如果有智能機(jī)房管理系統(tǒng),還可以采用中間庫的方式來采集狀態(tài)數(shù)據(jù)。
文中應(yīng)用的檢測腳本采用Python2.7編寫,調(diào)用的第三方庫包括:requests、json、subprocess、re、BeautifulSoup。
圖1 企業(yè)微信檢測結(jié)果
注冊企業(yè)微信獲取corpid用于識別企業(yè);創(chuàng)建應(yīng)用獲取AgentId參數(shù)用于識別應(yīng)用;獲取Secret密鑰用于請求驗(yàn)證身份的Token。所有接口使用HTTPS協(xié)議,通過GET或POST方法請求。可以指定消息允許接受的成員ID列表和部門ID列表、標(biāo)簽ID列表,消息文本最長不超過2 048字節(jié)。主要代碼如下:
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
HTTP狀態(tài)碼(HTTP Status Code)指服務(wù)器返回的對超文本傳輸協(xié)議的響應(yīng),是一個包含數(shù)字代碼的信息頭,它是由RFC 2616所規(guī)范定義的。狀態(tài)碼能夠反映服務(wù)器的消息、成功、重定向、請求錯誤、服務(wù)器錯誤的詳細(xì)狀況。狀態(tài)碼200即為OK狀態(tài)碼,表示請求成功,請求的響應(yīng)頭或數(shù)據(jù)體將得到返回,所以如果識別出200 狀態(tài)碼,就表示服務(wù)器處于正常狀態(tài)。筆者使用requests庫,獲取圖書館應(yīng)用系統(tǒng)網(wǎng)頁的狀態(tài)碼,根據(jù)狀態(tài)碼的狀況返回信息,判斷應(yīng)用是否處于正常狀態(tài),然后將判斷加入消息列表。主要代碼如下:
defcheck_url(url,name):
response = requests.get(url)
ifresponse.status_code == 200:
msg.append(name +′:網(wǎng)頁正?!?
else:
msg.append(name + ′:網(wǎng)頁異?!?
網(wǎng)絡(luò)爬蟲是指能夠按一定的規(guī)則抓取網(wǎng)絡(luò)信息的一段程序。UPS運(yùn)行狀態(tài)的信息存在于本地UPS的Web頁面中,而這個頁面是需要登錄才能打開的,所以需要網(wǎng)絡(luò)爬蟲模擬正常瀏覽器登錄來獲取信息。筆者通過requests的POST方法登錄UPS的Web頁面,使用BeautifulSoup解析文檔,提取其中表示UPS當(dāng)前報警狀態(tài)的數(shù)據(jù),轉(zhuǎn)碼后發(fā)送至推送信息列表。主要代碼如下:
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)
Python通過subprocess庫產(chǎn)生子進(jìn)程,stdin、stdout和stderr分別表示子程序的標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤。筆者調(diào)用subprocess庫中的Popen類,通過“ping”命令來測試圖書館關(guān)鍵網(wǎng)絡(luò)設(shè)備的連通性,返回值進(jìn)行判斷后將“網(wǎng)絡(luò)連接超時”“無法訪問目標(biāo)主機(jī)”“網(wǎng)絡(luò)正?!奔尤胂⒘斜?,用以及時反饋設(shè)備狀態(tài)。主要代碼如下:
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 + ′:網(wǎng)絡(luò)連接超時′)
elifout.find(′Destination′) != -1:
msg.append (name + ′:無法訪問目標(biāo)主機(jī)′)
else:
msg.append (name +′:網(wǎng)絡(luò)正常′)
通過企業(yè)微信及時獲取有關(guān)圖書館應(yīng)用系統(tǒng)和關(guān)鍵網(wǎng)絡(luò)設(shè)備的信息,能夠及時發(fā)現(xiàn)問題并解決問題,為圖書館數(shù)字資源不間斷開放提供了保障。通過西安建筑科技大學(xué)圖書館幾年來的使用顯示,該應(yīng)用模塊簡單易用,監(jiān)控范圍可以自己調(diào)整,發(fā)送信息及時,同時也是一個免費(fèi)的應(yīng)用。以后還應(yīng)當(dāng)完善功能,拓展監(jiān)控范圍,充實(shí)所反映的信息細(xì)節(jié)。