张蓓蕾, 彭 骁, 李 杲, 董君磊, 周浩波
(宁波市地震监测预报中心,浙江 宁波 315000)
地震监测和地震应急是防震减灾工作的两大关键环节。震情信息处理系统作为两者之间的“高速公路”,能够在震后自动、快速地将震情信息发送给地震应急相关人员,为震后应急处置争取时间,是防震减灾的关键一环。作为地震应急工作的“触发器”,震情信息处理系统要求稳定、可靠,能够保持(7×24)h无故障运行,并做到信息处理快速、及时、无差错。
震情信息处理系统包括4个关键环节:震情信息获取、本地信息存储、信息推送渠道以及发送规则控制。震情信息一般都来源于全国地震速报共享服务系统(简称EQIM系统)及其省、市平台。其中,部分通过自动抓取[1-4,6],例如,李红等设计的地震速报信息系统,通过自动抓取EQIM系统震情数据并实现实时通过官方网页、在线地图展示[2]。部分通过自动推送[5,7,8],例如,奚冲霄等研制的北京市测震台网地震速报信息服务系统自动接收EQIM系统推送数据,经过本地筛选后通过短信发送[5]。信息存储方面,安全要求高且有条件的,一般都将本地数据库作为中间库独立于系统部署[1-5,8-12],例如,徐胜等研制的无锡市地震速报信息智能发布系统,实现定时读取EQIM系统数据到本地数据库,从本地数据库到多平台发布的功能[7]。推送渠道多是运营商短信、微信、网络等方式[1-16],例如刘仲达等开发的厦门市地震信息微信公众平台,通过微信公众号自动实时发布地震信息[15];王琐琛等开发的地震速报平台,除了短信外,还通过传真等发布地震信息[4]。宁波市震情信息处理系统在功能上除了要求震情信息的自动推送外,还需要包括应急响应、应急处置等信息的人工或自动推送,以及系统推送功能的自动测试;发送范围上,需包括未达到EQIM系统触发要求但本地有感且本地台网有记录的小地震;发送规则的设置上,对地域、震级、对象的选择更加细致、灵活且可经常更改。本研究拟在参考、借鉴各地相关经验的基础上,设计、开发实现满足性能需求并符合本地个性化需求的震情信息处理系统。
开发建设宁波市震情信息处理系统的主要目的就是能够快速、及时、可靠地获取、处理、发送地震信息,支持与服务地震应急工作。
(1) 震情信息获取展示:震情信息来源于EQIM系统,包括发震时间、地点、震级、震源深度、速报台网等,提供查看、导出、关键字查询等功能,用于震情会商或地震预测预报等研究工作。
(2) 震情信息自动推送:向指定对象推送设定规则范围内的震情信息(表1)。一类发送对象对应一种规则。规则包括震情范围、发送方式、发送模板3类。其中,震情范围通过地域及对应的震级下限设定,地域包括全球、全国、华东、浙江,分别以经纬度范围设定(比如浙江地区为27°~31°N,118°~123°E),在地图上表示为一个矩形框。每类地区对应设定发送的震级下限。发送方式分为实时发送和延迟发送2种,延迟发送可以设定延迟时段及延迟后发送的时段。
表1 某阶段震情信息自动推送规则
(3) 手动短信发送:用于向指定对象手动推送指定模板内容的短信。主要应用于2种情况:一是为了预防EQIM系统对于MS≤3.0 地震及本地小震不触发的情况,需要应用此模块手动补充;二是非震情的群发信息,比如应急响应通知,需要手动按需发送。发送对象、模板内容可以按需设定。
(4) 短信发送测试及问题展示:用于每天定时自动向指定手机发送测试短信,并通过图形界面显示发送过程及故障环节,方便工作人员判断系统运行情况。同时,可以通过日志查看发送时间、发送路径、短信内容、发送状态等详细信息。
(5) 通信录管理维护:用于管理维护发送对象。要求通过部门、人员2个层级进行管理。为便于操作,还需要通过群组功能,对人员进行独立于部门的自定义分组。
(6) 系统管理:用于系统用户、权限、资源、日志管理。只限于系统管理员操作。
可靠性:应保证(7×24)h内不宕机,连续运行稳定可靠,数据传输不丢包,短信发送无迟发、漏发等现象,保证震情信息实时接收、实时发送。
安全性:应避免架构或代码上的缺陷引起的系统或网络安全问题,本系统应有权限管理功能,防止误操作造成的误发、错发等情况。
可扩展性:设计要求能够体现扩展性要求,可在此基础上进行模块或功能的补充,以及系统的升级或重构,以适应将来功能扩展的需求。
兼容性:页面有较好的兼容性,用各种常用浏览器以不同分辨率浏览时,页面显示效果较好,整体美观大方、布局规范合理,无错误链接和空链接。
采用B/S结构的软件体系,服务器采用Linux CentOS 7.0系统、JAVA开发环境、mySQL数据库平台建设部署。系统采用先进的J2EE技术架构。使用4层的分布式应用模型。系统架构图如图1所示。
图1 系统架构图Fig.1 System architecture
系统分成5个模块(图2),每个模块的功能如下。
图2 系统模块图Fig.2 System module diagram
(1) 震情信息
用于展示所有从EQIM平台接收的震情信息,数据来源于省地震局EQIM数据库,存储于本地数据库,所有该系统的读取操作都是针对本地数据库操作。包含2项菜单:(1) 显示目录。以文字列表的形式,展示接收的震情目录,点击显示详细信息,提供关键字查询功能。(2) 导出目录。提供根据查询条件的导出功能。
(2) 短信发送
包括自动发送、手动发送2个子模块,分别用于震情信息的自动推送,以及其他信息的手动发送。自动发送模块包括5项菜单:(1) 待发短信。用于处理待发送的短信。包括发送时间、短信内容、发送状态等信息。自动发送子模块提供删除、查询按钮;手动发送子模块提供新建、删除、编辑、查询及发送按钮。新建短信通过选择发送群组,选择发送模板并补充内容后保存,点击“发送”按钮后发送。(2) 已发短信。用于查询已成功发送的短信。通过文字列表,显示已成功发送的所有短信,提供关键字查询功能。(3) 模板维护。用于维护短信模板。新建待发短信时,通过选择确定该条短信使用的模板。只有系统管理员才有维护模板的权限。(4) 规则维护。用于维护自动发送短信的发送规则。提供发送群组选择,以及对应的规则设定。包括设定指定地域相对应的发送震级下限以及发送方式。(5) 地区维护。用于(4)中所述的指定地域范围的设定。全球、全国、华东、浙江地区分别通过经纬度上下限确定。手动发送模块没有规则维护、地区维护菜单,其他与自动发送模块类似。
(3) 短信测试
用于每天在指定时间自动向指定电话号码或群组发送测试短信,以便用户判断系统运行情况。设置有以下3项菜单:(1) 发送状态。用于展示短信测试状态。通过图形化界面直观显示短信发送流程。(2) 发送日志。用于管理维护所有测试短信的发送日志。以文字列表显示,点击显示详细信息,包含编号、发送时间、文字内容、返回状态及返回详细信息。(3) 规则维护。用于管理维护测试短信的发送规则,只限于系统管理员设定。
(4) 通讯录
用于对短信发送通讯录进行管理维护,便于短信发送时的对象及群组选择,设置有以下3项菜单:(1) 部门管理。用于管理维护通讯录中的部门与单位。便于调取通信录中的人员。(2) 人员管理。用于管理维护通讯录中的人员信息。(3) 群组管理。用于管理维护通讯录中的群组信息。短信发送时可以直接针对群组操作。
(5) 系统管理
用于对本系统的用户、权限、日志进行管理,便于对系统开展检查、维护及升级操作。此模块只限于系统管理员使用,设置以下3项菜单:(1) 组织机构。用于系统使用对象管理,包括部门、人员2项内容。(2) 系统日志。用于该系统日志的管理,包括登录日志、业务日志、异常日志,提供查询、刷新功能。(3) 权限管理。用于系统权限分配。
由于客户层菜单设计重复性较高,且多为框架及样式类代码。限于篇幅,本节仅简述业务层5个关键模块的详细设计方案及其编码实现。其中,4个是震情信息传送流程,包括获取震情、判断规则、生成短信及发送短信,详细流程图见图3。另一个是短信自动测试。
图3 震情信息传递流程图Fig.3 Flow chart of earthquake information transmission
震情获取模块主要功能是记录震情信息,形成列表,存储震情目录(图4)。这里使用JDBC的数据库驱动类DriverManager.getConnection获取数据,使用用户名、密码及地址访问EQIM数据库。连接后获取的震情数据实时传输至本地数据库,之后该系统的读取操作只针对本地数据库操作,保障省局EQIM数据库的稳定性。通过sql查询动作扫描最新的震情数据,将扫描到的震情信息存入哈希表map_temp中进行存储。显示数据通过新建任务调度数据结构JSONObject,显示震情目录。系统界面上其它菜单模式都与震情信息模块类似,后面不再赘述,只详述一些有特殊性的模块编码。
图4 震情获取流程图Fig.4 Flow chart of earthquake information acquisition
短信发送规则模块主要功能是判断发送规则,对用户输入的发送时间、发送范围、最大最小震级等规则进行整理,对震情信息进行筛选。新建哈希表map,储存经纬度范围、震级范围等信息。读取SEND_TYPE信息判断是否是实时发送,读取DATES信息判断是当日或次日,读取TIME_TYPE信息判断输入的时间节点,判断是工作时间或是晚间。
生成短信模块主要功能是获取发送模板,生成短信信息等功能。通过“,”枚举判断个数,创建时间CREATE_TIME以逆序排列并存入c_t_contacts_group中。同理,将人员信息PERSONAL_ID以同样的方法枚举个数,再存入c_t_contacts_user中。首先获取短信发送内容中经纬度范围,如果有负数说明是南纬或者西经,要将模板中的北纬和东经进行修改。然后使用substring获取短信信息中动态变量,以字符串截取的形式一一放入短信中,再通过读取发送状态、手机号等信息进行最后的短信发送工作。
短信发送模块主要功能是与电信短信平台对接,接收短信信息,判断短信发送规则,然后向预定人员发送震情短信(表2)。首先确定发送时间,建立哈希表query用于存放短信目录以供查询。将未发送、发送时间小于当前时间、发送时间大于当日凌晨的短信统一放入listData中进行发送处理,通过sentSMS类取得手机号码MOBILE和发送内容SEND_CONTENT,存入字符串message中,再去除message中所有换行回车等多余字符。用SEND_STATE表示短信发送状态,“2”表示成功,“3”表示发送失败,进行返回。
短信测试模块主要功能是获取测试短信配置,生成测试短信,再通过定时器进行发送操作,并返回测试结果。通过map_info字符串储存配置信息,for循环存储,直到tel电话号码为空,表示循环结束,测试短信生成成功。执行Linux内核进程调度函数schedule(), 用于测试短信进程的选择和切换。开始短信测试任务temblorDataTask,依据设定的延迟时间、循环间隔进行发送。将用户名、密码、时间戳转化为md5码发送到短信平台,生成Code返回状态码,新建message存储返回消息,与Code返回状态码合并作为返回值进行显示。再通过bool值flag判断图形化流程中每个环节的运行情况,环节颜色变化表示运行正常与否,通过state状态变量控制。
按照需求分析,运用黑箱测试方法,分模块对系统的主要功能进行测试。运用等价划分法设计,在尽可能减少同类测试的基础上,注重对边界条件、特殊条件的覆盖。表2列出了短信发送模块中自动发送子模块的测试用例及结果。
表2 短信发送模块—自动发送子模块测试用例及结果
软件测试完成后,使用2台专用服务器,分别部署系统软件及系统数据库。数据库服务器只配置地震行业内部网络,用于与省局EQIM服务器稳定连接,及时获取、存储震情信息及各种系统数据。系统软件服务器配置地震行业内网及因特网,内网用于获取数据库服务器数据,因特网用于系统在线地图、浏览器登录等服务。部署完成后,经过一段时间的使用,发现了一些前期未考虑到的实际问题,并对其进行了改进。比如,需求中提出,短信测试模块通过图形界面形象显示发送过程及故障环节。在实际使用过程中,发现确实能够直观显示短信发送流程,但是返回消息只提供“成功”、“失败”2种消息,经过调整及改进,将短信平台返回消息进行细分,分为4种类型,使得相关人员能够根据返回消息较为准确地判断故障原因,便于及时处理。
宁波市震情信息处理系统与其他同类软件相比,具有以下3点优势:(1) 从信息来源看,震情信息以转发EQIM系统为主,本地人工补充为辅,有效避免了以往存在的漏报现象;(2) 从短信发送规则看,本系统提供了自定义功能,在全面性和灵活性上实现了很大提升;(3) 从系统稳定性看,不仅在硬件配置、软件架构等方面增强了安全性、可靠性,还能自动测试短信发送,提高系统查障、排障效率。总体而言,基本满足了设计需求。但从稳定可靠、灵活全面的要求看,仍然存在一些提升与改进的空间:(1) 在短信测试方面,仍然做不到全流程的监控,只能根据运营商反馈信息来间接判断故障原因;(2) 在信息获取方面,过于依赖EQIM系统;(3) 在硬件方面,局限于现实因素,无法完全排除硬件方面造成的系统停机等问题。以上问题需要在后续版本开发中进一步完善。可以预见,随着震情信息处理系统的不断升级,未来地震应急响应速度必将得到有效提高。