張蓓蕾, 彭 驍, 李 杲, 董君磊, 周浩波
(寧波市地震監(jiān)測預(yù)報中心,浙江 寧波 315000)
地震監(jiān)測和地震應(yīng)急是防震減災(zāi)工作的兩大關(guān)鍵環(huán)節(jié)。震情信息處理系統(tǒng)作為兩者之間的“高速公路”,能夠在震后自動、快速地將震情信息發(fā)送給地震應(yīng)急相關(guān)人員,為震后應(yīng)急處置爭取時間,是防震減災(zāi)的關(guān)鍵一環(huán)。作為地震應(yīng)急工作的“觸發(fā)器”,震情信息處理系統(tǒng)要求穩(wěn)定、可靠,能夠保持(7×24)h無故障運行,并做到信息處理快速、及時、無差錯。
震情信息處理系統(tǒng)包括4個關(guān)鍵環(huán)節(jié):震情信息獲取、本地信息存儲、信息推送渠道以及發(fā)送規(guī)則控制。震情信息一般都來源于全國地震速報共享服務(wù)系統(tǒng)(簡稱EQIM系統(tǒng))及其省、市平臺。其中,部分通過自動抓取[1-4,6],例如,李紅等設(shè)計的地震速報信息系統(tǒng),通過自動抓取EQIM系統(tǒng)震情數(shù)據(jù)并實現(xiàn)實時通過官方網(wǎng)頁、在線地圖展示[2]。部分通過自動推送[5,7,8],例如,奚沖霄等研制的北京市測震臺網(wǎng)地震速報信息服務(wù)系統(tǒng)自動接收EQIM系統(tǒng)推送數(shù)據(jù),經(jīng)過本地篩選后通過短信發(fā)送[5]。信息存儲方面,安全要求高且有條件的,一般都將本地數(shù)據(jù)庫作為中間庫獨立于系統(tǒng)部署[1-5,8-12],例如,徐勝等研制的無錫市地震速報信息智能發(fā)布系統(tǒng),實現(xiàn)定時讀取EQIM系統(tǒng)數(shù)據(jù)到本地數(shù)據(jù)庫,從本地數(shù)據(jù)庫到多平臺發(fā)布的功能[7]。推送渠道多是運營商短信、微信、網(wǎng)絡(luò)等方式[1-16],例如劉仲達等開發(fā)的廈門市地震信息微信公眾平臺,通過微信公眾號自動實時發(fā)布地震信息[15];王瑣琛等開發(fā)的地震速報平臺,除了短信外,還通過傳真等發(fā)布地震信息[4]。寧波市震情信息處理系統(tǒng)在功能上除了要求震情信息的自動推送外,還需要包括應(yīng)急響應(yīng)、應(yīng)急處置等信息的人工或自動推送,以及系統(tǒng)推送功能的自動測試;發(fā)送范圍上,需包括未達到EQIM系統(tǒng)觸發(fā)要求但本地有感且本地臺網(wǎng)有記錄的小地震;發(fā)送規(guī)則的設(shè)置上,對地域、震級、對象的選擇更加細致、靈活且可經(jīng)常更改。本研究擬在參考、借鑒各地相關(guān)經(jīng)驗的基礎(chǔ)上,設(shè)計、開發(fā)實現(xiàn)滿足性能需求并符合本地個性化需求的震情信息處理系統(tǒng)。
開發(fā)建設(shè)寧波市震情信息處理系統(tǒng)的主要目的就是能夠快速、及時、可靠地獲取、處理、發(fā)送地震信息,支持與服務(wù)地震應(yīng)急工作。
(1) 震情信息獲取展示:震情信息來源于EQIM系統(tǒng),包括發(fā)震時間、地點、震級、震源深度、速報臺網(wǎng)等,提供查看、導(dǎo)出、關(guān)鍵字查詢等功能,用于震情會商或地震預(yù)測預(yù)報等研究工作。
(2) 震情信息自動推送:向指定對象推送設(shè)定規(guī)則范圍內(nèi)的震情信息(表1)。一類發(fā)送對象對應(yīng)一種規(guī)則。規(guī)則包括震情范圍、發(fā)送方式、發(fā)送模板3類。其中,震情范圍通過地域及對應(yīng)的震級下限設(shè)定,地域包括全球、全國、華東、浙江,分別以經(jīng)緯度范圍設(shè)定(比如浙江地區(qū)為27°~31°N,118°~123°E),在地圖上表示為一個矩形框。每類地區(qū)對應(yīng)設(shè)定發(fā)送的震級下限。發(fā)送方式分為實時發(fā)送和延遲發(fā)送2種,延遲發(fā)送可以設(shè)定延遲時段及延遲后發(fā)送的時段。
表1 某階段震情信息自動推送規(guī)則
(3) 手動短信發(fā)送:用于向指定對象手動推送指定模板內(nèi)容的短信。主要應(yīng)用于2種情況:一是為了預(yù)防EQIM系統(tǒng)對于MS≤3.0 地震及本地小震不觸發(fā)的情況,需要應(yīng)用此模塊手動補充;二是非震情的群發(fā)信息,比如應(yīng)急響應(yīng)通知,需要手動按需發(fā)送。發(fā)送對象、模板內(nèi)容可以按需設(shè)定。
(4) 短信發(fā)送測試及問題展示:用于每天定時自動向指定手機發(fā)送測試短信,并通過圖形界面顯示發(fā)送過程及故障環(huán)節(jié),方便工作人員判斷系統(tǒng)運行情況。同時,可以通過日志查看發(fā)送時間、發(fā)送路徑、短信內(nèi)容、發(fā)送狀態(tài)等詳細信息。
(5) 通信錄管理維護:用于管理維護發(fā)送對象。要求通過部門、人員2個層級進行管理。為便于操作,還需要通過群組功能,對人員進行獨立于部門的自定義分組。
(6) 系統(tǒng)管理:用于系統(tǒng)用戶、權(quán)限、資源、日志管理。只限于系統(tǒng)管理員操作。
可靠性:應(yīng)保證(7×24)h內(nèi)不宕機,連續(xù)運行穩(wěn)定可靠,數(shù)據(jù)傳輸不丟包,短信發(fā)送無遲發(fā)、漏發(fā)等現(xiàn)象,保證震情信息實時接收、實時發(fā)送。
安全性:應(yīng)避免架構(gòu)或代碼上的缺陷引起的系統(tǒng)或網(wǎng)絡(luò)安全問題,本系統(tǒng)應(yīng)有權(quán)限管理功能,防止誤操作造成的誤發(fā)、錯發(fā)等情況。
可擴展性:設(shè)計要求能夠體現(xiàn)擴展性要求,可在此基礎(chǔ)上進行模塊或功能的補充,以及系統(tǒng)的升級或重構(gòu),以適應(yīng)將來功能擴展的需求。
兼容性:頁面有較好的兼容性,用各種常用瀏覽器以不同分辨率瀏覽時,頁面顯示效果較好,整體美觀大方、布局規(guī)范合理,無錯誤鏈接和空鏈接。
采用B/S結(jié)構(gòu)的軟件體系,服務(wù)器采用Linux CentOS 7.0系統(tǒng)、JAVA開發(fā)環(huán)境、mySQL數(shù)據(jù)庫平臺建設(shè)部署。系統(tǒng)采用先進的J2EE技術(shù)架構(gòu)。使用4層的分布式應(yīng)用模型。系統(tǒng)架構(gòu)圖如圖1所示。
圖1 系統(tǒng)架構(gòu)圖Fig.1 System architecture
系統(tǒng)分成5個模塊(圖2),每個模塊的功能如下。
圖2 系統(tǒng)模塊圖Fig.2 System module diagram
(1) 震情信息
用于展示所有從EQIM平臺接收的震情信息,數(shù)據(jù)來源于省地震局EQIM數(shù)據(jù)庫,存儲于本地數(shù)據(jù)庫,所有該系統(tǒng)的讀取操作都是針對本地數(shù)據(jù)庫操作。包含2項菜單:(1) 顯示目錄。以文字列表的形式,展示接收的震情目錄,點擊顯示詳細信息,提供關(guān)鍵字查詢功能。(2) 導(dǎo)出目錄。提供根據(jù)查詢條件的導(dǎo)出功能。
(2) 短信發(fā)送
包括自動發(fā)送、手動發(fā)送2個子模塊,分別用于震情信息的自動推送,以及其他信息的手動發(fā)送。自動發(fā)送模塊包括5項菜單:(1) 待發(fā)短信。用于處理待發(fā)送的短信。包括發(fā)送時間、短信內(nèi)容、發(fā)送狀態(tài)等信息。自動發(fā)送子模塊提供刪除、查詢按鈕;手動發(fā)送子模塊提供新建、刪除、編輯、查詢及發(fā)送按鈕。新建短信通過選擇發(fā)送群組,選擇發(fā)送模板并補充內(nèi)容后保存,點擊“發(fā)送”按鈕后發(fā)送。(2) 已發(fā)短信。用于查詢已成功發(fā)送的短信。通過文字列表,顯示已成功發(fā)送的所有短信,提供關(guān)鍵字查詢功能。(3) 模板維護。用于維護短信模板。新建待發(fā)短信時,通過選擇確定該條短信使用的模板。只有系統(tǒng)管理員才有維護模板的權(quán)限。(4) 規(guī)則維護。用于維護自動發(fā)送短信的發(fā)送規(guī)則。提供發(fā)送群組選擇,以及對應(yīng)的規(guī)則設(shè)定。包括設(shè)定指定地域相對應(yīng)的發(fā)送震級下限以及發(fā)送方式。(5) 地區(qū)維護。用于(4)中所述的指定地域范圍的設(shè)定。全球、全國、華東、浙江地區(qū)分別通過經(jīng)緯度上下限確定。手動發(fā)送模塊沒有規(guī)則維護、地區(qū)維護菜單,其他與自動發(fā)送模塊類似。
(3) 短信測試
用于每天在指定時間自動向指定電話號碼或群組發(fā)送測試短信,以便用戶判斷系統(tǒng)運行情況。設(shè)置有以下3項菜單:(1) 發(fā)送狀態(tài)。用于展示短信測試狀態(tài)。通過圖形化界面直觀顯示短信發(fā)送流程。(2) 發(fā)送日志。用于管理維護所有測試短信的發(fā)送日志。以文字列表顯示,點擊顯示詳細信息,包含編號、發(fā)送時間、文字內(nèi)容、返回狀態(tài)及返回詳細信息。(3) 規(guī)則維護。用于管理維護測試短信的發(fā)送規(guī)則,只限于系統(tǒng)管理員設(shè)定。
(4) 通訊錄
用于對短信發(fā)送通訊錄進行管理維護,便于短信發(fā)送時的對象及群組選擇,設(shè)置有以下3項菜單:(1) 部門管理。用于管理維護通訊錄中的部門與單位。便于調(diào)取通信錄中的人員。(2) 人員管理。用于管理維護通訊錄中的人員信息。(3) 群組管理。用于管理維護通訊錄中的群組信息。短信發(fā)送時可以直接針對群組操作。
(5) 系統(tǒng)管理
用于對本系統(tǒng)的用戶、權(quán)限、日志進行管理,便于對系統(tǒng)開展檢查、維護及升級操作。此模塊只限于系統(tǒng)管理員使用,設(shè)置以下3項菜單:(1) 組織機構(gòu)。用于系統(tǒng)使用對象管理,包括部門、人員2項內(nèi)容。(2) 系統(tǒng)日志。用于該系統(tǒng)日志的管理,包括登錄日志、業(yè)務(wù)日志、異常日志,提供查詢、刷新功能。(3) 權(quán)限管理。用于系統(tǒng)權(quán)限分配。
由于客戶層菜單設(shè)計重復(fù)性較高,且多為框架及樣式類代碼。限于篇幅,本節(jié)僅簡述業(yè)務(wù)層5個關(guān)鍵模塊的詳細設(shè)計方案及其編碼實現(xiàn)。其中,4個是震情信息傳送流程,包括獲取震情、判斷規(guī)則、生成短信及發(fā)送短信,詳細流程圖見圖3。另一個是短信自動測試。
圖3 震情信息傳遞流程圖Fig.3 Flow chart of earthquake information transmission
震情獲取模塊主要功能是記錄震情信息,形成列表,存儲震情目錄(圖4)。這里使用JDBC的數(shù)據(jù)庫驅(qū)動類DriverManager.getConnection獲取數(shù)據(jù),使用用戶名、密碼及地址訪問EQIM數(shù)據(jù)庫。連接后獲取的震情數(shù)據(jù)實時傳輸至本地數(shù)據(jù)庫,之后該系統(tǒng)的讀取操作只針對本地數(shù)據(jù)庫操作,保障省局EQIM數(shù)據(jù)庫的穩(wěn)定性。通過sql查詢動作掃描最新的震情數(shù)據(jù),將掃描到的震情信息存入哈希表map_temp中進行存儲。顯示數(shù)據(jù)通過新建任務(wù)調(diào)度數(shù)據(jù)結(jié)構(gòu)JSONObject,顯示震情目錄。系統(tǒng)界面上其它菜單模式都與震情信息模塊類似,后面不再贅述,只詳述一些有特殊性的模塊編碼。
圖4 震情獲取流程圖Fig.4 Flow chart of earthquake information acquisition
短信發(fā)送規(guī)則模塊主要功能是判斷發(fā)送規(guī)則,對用戶輸入的發(fā)送時間、發(fā)送范圍、最大最小震級等規(guī)則進行整理,對震情信息進行篩選。新建哈希表map,儲存經(jīng)緯度范圍、震級范圍等信息。讀取SEND_TYPE信息判斷是否是實時發(fā)送,讀取DATES信息判斷是當日或次日,讀取TIME_TYPE信息判斷輸入的時間節(jié)點,判斷是工作時間或是晚間。
生成短信模塊主要功能是獲取發(fā)送模板,生成短信信息等功能。通過“,”枚舉判斷個數(shù),創(chuàng)建時間CREATE_TIME以逆序排列并存入c_t_contacts_group中。同理,將人員信息PERSONAL_ID以同樣的方法枚舉個數(shù),再存入c_t_contacts_user中。首先獲取短信發(fā)送內(nèi)容中經(jīng)緯度范圍,如果有負數(shù)說明是南緯或者西經(jīng),要將模板中的北緯和東經(jīng)進行修改。然后使用substring獲取短信信息中動態(tài)變量,以字符串截取的形式一一放入短信中,再通過讀取發(fā)送狀態(tài)、手機號等信息進行最后的短信發(fā)送工作。
短信發(fā)送模塊主要功能是與電信短信平臺對接,接收短信信息,判斷短信發(fā)送規(guī)則,然后向預(yù)定人員發(fā)送震情短信(表2)。首先確定發(fā)送時間,建立哈希表query用于存放短信目錄以供查詢。將未發(fā)送、發(fā)送時間小于當前時間、發(fā)送時間大于當日凌晨的短信統(tǒng)一放入listData中進行發(fā)送處理,通過sentSMS類取得手機號碼MOBILE和發(fā)送內(nèi)容SEND_CONTENT,存入字符串message中,再去除message中所有換行回車等多余字符。用SEND_STATE表示短信發(fā)送狀態(tài),“2”表示成功,“3”表示發(fā)送失敗,進行返回。
短信測試模塊主要功能是獲取測試短信配置,生成測試短信,再通過定時器進行發(fā)送操作,并返回測試結(jié)果。通過map_info字符串儲存配置信息,for循環(huán)存儲,直到tel電話號碼為空,表示循環(huán)結(jié)束,測試短信生成成功。執(zhí)行Linux內(nèi)核進程調(diào)度函數(shù)schedule(), 用于測試短信進程的選擇和切換。開始短信測試任務(wù)temblorDataTask,依據(jù)設(shè)定的延遲時間、循環(huán)間隔進行發(fā)送。將用戶名、密碼、時間戳轉(zhuǎn)化為md5碼發(fā)送到短信平臺,生成Code返回狀態(tài)碼,新建message存儲返回消息,與Code返回狀態(tài)碼合并作為返回值進行顯示。再通過bool值flag判斷圖形化流程中每個環(huán)節(jié)的運行情況,環(huán)節(jié)顏色變化表示運行正常與否,通過state狀態(tài)變量控制。
按照需求分析,運用黑箱測試方法,分模塊對系統(tǒng)的主要功能進行測試。運用等價劃分法設(shè)計,在盡可能減少同類測試的基礎(chǔ)上,注重對邊界條件、特殊條件的覆蓋。表2列出了短信發(fā)送模塊中自動發(fā)送子模塊的測試用例及結(jié)果。
表2 短信發(fā)送模塊—自動發(fā)送子模塊測試用例及結(jié)果
軟件測試完成后,使用2臺專用服務(wù)器,分別部署系統(tǒng)軟件及系統(tǒng)數(shù)據(jù)庫。數(shù)據(jù)庫服務(wù)器只配置地震行業(yè)內(nèi)部網(wǎng)絡(luò),用于與省局EQIM服務(wù)器穩(wěn)定連接,及時獲取、存儲震情信息及各種系統(tǒng)數(shù)據(jù)。系統(tǒng)軟件服務(wù)器配置地震行業(yè)內(nèi)網(wǎng)及因特網(wǎng),內(nèi)網(wǎng)用于獲取數(shù)據(jù)庫服務(wù)器數(shù)據(jù),因特網(wǎng)用于系統(tǒng)在線地圖、瀏覽器登錄等服務(wù)。部署完成后,經(jīng)過一段時間的使用,發(fā)現(xiàn)了一些前期未考慮到的實際問題,并對其進行了改進。比如,需求中提出,短信測試模塊通過圖形界面形象顯示發(fā)送過程及故障環(huán)節(jié)。在實際使用過程中,發(fā)現(xiàn)確實能夠直觀顯示短信發(fā)送流程,但是返回消息只提供“成功”、“失敗”2種消息,經(jīng)過調(diào)整及改進,將短信平臺返回消息進行細分,分為4種類型,使得相關(guān)人員能夠根據(jù)返回消息較為準確地判斷故障原因,便于及時處理。
寧波市震情信息處理系統(tǒng)與其他同類軟件相比,具有以下3點優(yōu)勢:(1) 從信息來源看,震情信息以轉(zhuǎn)發(fā)EQIM系統(tǒng)為主,本地人工補充為輔,有效避免了以往存在的漏報現(xiàn)象;(2) 從短信發(fā)送規(guī)則看,本系統(tǒng)提供了自定義功能,在全面性和靈活性上實現(xiàn)了很大提升;(3) 從系統(tǒng)穩(wěn)定性看,不僅在硬件配置、軟件架構(gòu)等方面增強了安全性、可靠性,還能自動測試短信發(fā)送,提高系統(tǒng)查障、排障效率??傮w而言,基本滿足了設(shè)計需求。但從穩(wěn)定可靠、靈活全面的要求看,仍然存在一些提升與改進的空間:(1) 在短信測試方面,仍然做不到全流程的監(jiān)控,只能根據(jù)運營商反饋信息來間接判斷故障原因;(2) 在信息獲取方面,過于依賴EQIM系統(tǒng);(3) 在硬件方面,局限于現(xiàn)實因素,無法完全排除硬件方面造成的系統(tǒng)停機等問題。以上問題需要在后續(xù)版本開發(fā)中進一步完善??梢灶A(yù)見,隨著震情信息處理系統(tǒng)的不斷升級,未來地震應(yīng)急響應(yīng)速度必將得到有效提高。