测震台网日志记录了各技术系统运行状态及故障处理信息,有助于追踪故障、积累运维管理经验(肖文等,2004),是台网长期平稳运行的保障,也是各级领导了解台网设备状态及人员工作状况的窗口。目前,台网日志以纸介质为主、文本文件为辅,只能简单记录,不便查询、统计、分析(李文江,2008),数据复用率低,记录分散破碎(曾戊忠等,2012)。随着行业范围扩大,测震仪器设备数量增多,无纸办公的推进,需要统一化、标准化、模块化、科学化的日志管理方式(陈赛娉,2006)。近年来移动设备硬件逐步升级,手机APP功能更加强大,更具人性化(高嘉伟等,2016),地震行业内已设计开发多款服务类手机APP软件,包括提供地震速报信息、地震编目查询(常亮等,2017)、设备维修(戴波等,2016)、预警信息发布(朱宏等,2016)、震害信息采集(学峰等,2016)和灾情速报(刘军等,2014)等服务。为适应移动平台的普及,开发基于Android系统的日志管理平台,为测震台网各技术系统提供日志数据的录入、查询、统计等功能,为台网工作的平稳运行提供支持。
1 测震台网概况 1.1 技术系统河北省测震台网承担首都圈地区及邻省责任区大震速报和编目资料处理工作,实时接收本省及邻省168个测震台站数据。该台网主要技术系统包括:流服务系统、人工速报系统、自动速报系统、地震编目系统和地震预警与烈度系统,其中:流服务系统、地震编目系统和地震预警与烈度系统采用广东省地震局研发的JOPENS软件包,人工速报系统采用河北省地震局研发的ISDP软件,自动速报系统采用福建省地震局研发的区域自动速报软件。除上述主要技术系统,还包括短信发布、省政府应急、省地震局地震应急数据汇聚、各类服务器和MYSQL数据库等软硬件平台。
1.2 日常工作(1)速报工作。地震发生后:①地震预警与烈度系统在数秒内自动完成地震定位并产出预警信息,短信平台自动向相关人员发送信息;②华北区域自动速报系统在1—2 min内自动完成地震定位,并推送结果至中国地震台网中心服务器,短信平台自动向本地震局相关人员发送短信;③人工速报系统由值班人员利用ISDP速报软件完成地震拾取和定位,在8 min内人工推送定位结果至中国地震台网中心服务器,短信平台自动向全地震局职工发送短信,速报结束后,值班员利用省政府应急平台上传相关地震参数信息,并向省委、省应急管理厅值班室发送传真,利用省地震局地震应急数据汇聚平台上传主震参数、震中分布图等信息。
速报值班人员除完成大震速报外,需:①每日完成责任区所有天然地震事件及较大非天然地震事件的快报,提交本地数据库并统一编目;②完成规定震级的震源机制解和震源参数计算与上传。
(2)编目工作:①编目工作人员每周日14时前完成上周本台网所有快报事件的编目;②连续波形、事件波形刻盘;③每月15日前向中国地震台网中心FTP服务器上传以下文件:上月本台网观测报告、上月某日(由国家台网指定日期)本台网全部台站连续波形、上月本台网记录的一个远震事件波形及测震自动速报系统与人工速报系统的对比记录。
(3)系统运维工作:①每日巡检本台网所有技术系统软硬件平台运行状况,及时处理故障;②负责台网所有软件升级和安全防护;③负责数据库备份,清理服务器过期数据;④处理各技术系统突发性故障。
2 平台设计测震台网日志管理平台设计包括:整体架构设计、数据库设计、权限设计、服务器端模块设计、手机APP设计与功能介绍。
2.1 整体架构设计测震台网日志管理平台整体架构如下:Web服务器程序、MYSQL数据库、链路检测软件和手机APP(图 1)。Web服务器程序采用4层架构,底层为Hibernate框架,直接连接数据库;第2层为DAO层,负责给用户提供数据库访问接口;第3层为Service层,实现用户的各类业务操作;第4层分Servlet和Struts2,其中Servlet供手机APP调用,Struts2供Web浏览器调用。
该平台运行流程如下:链路检测软件定时巡检测震台网所有服务器、工作站、台式机的网络状态,将检测结果写入MYSQL数据库(本平台数据源)供客户端调用;手机APP登录平台,与Web服务器交互实现各技术系统日志的管理、查询和统计操作,Web服务器与手机APP之间采用JSON格式交换数据(常亮等,2017)。
测震台网日志管理平台架构具有以下优点:①链路检测软件完成网络链路巡检,减轻工作人员手工检测负担;②实现手机客户端和Web方式的多点访问。
2.2 数据库设计根据测震台网技术系统组成,测震台网日志管理平台数据库设计5类11张数据表,包括:①权限类(角色表、用户表);②设备类(设备信息表、部署信息表、链路巡检表、设备状态表);③速报类(系统状态日志表、测震值班日志表);④编目类(编目周日志表、编目月日志表);⑤系统运维类(运维值班日志表)。其中:权限类数据表存储用户信息和角色信息;设备类数据表存储技术系统服务器、工作站、台式机等硬件设备信息、链路状态、部署情况等;速报、编目和系统运维类数据表存储各技术系统的日志信息。
2.3 权限设计为控制用户权限,设计3类6种用户角色,包括工作类角色(速报人员、编目人员、运维人员、多角色人员)、监管类角色(领导)和管理类角色(管理员)。其中:工作类角色享有各自工作范围内数据表的增、删、改、查、统计操作,而多角色人员指拥有2个及以上角色的用户,可管理多个技术系统日志;监管类角色享有速报、编目、运维类数据表的查询操作;管理员享有所有表的操作权限。
2.4 服务器端模块设计服务器端模块设计需要用到:①Model包:所有与数据库表对应的POJO文件,包括getter和setter方法;②DAO包:所有数据库访问方法,负责调用Hibernate框架;③Service包:各模块用到的操作方法抽象类;④ServiceImpl包:Service包中各个抽象类的实现类;⑤Servlet包:供手机调用的类。
服务器端访问流程如下:手机APP访问Tomcat下的Web服务,调用Servlet包中的各个类,这些类调用Service包来处理各类用户请求,需要访问数据库时,Service包会调用DAO包中封装好的Hibernate方法,得到的数据返回Servlet,由Servlet将数据打包成JSON格式返回手机APP。
2.5 手机APP设计与功能介绍APP采用模块化设计原则,将同一类型的工作放在同一模块,便于开发和维护。用户登录时将用户角色写入手机,客户端APP根据用户角色进入相应工作界面,避免非法操作。平台功能模块见图 2,其中业务管理模块包括速报日志管理、编目日志管理和系统运维日志管理;监管模块包括速报日志浏览、编目日志浏览和运维日志浏览;后台管理模块包括用户管理和角色管理。
设备状态日志(图 3)主要记录人工EQIM状态、自动EQIM状态、人工速报机状态、自动速报机状态、短信通道状态;测震值班日志主要记录值班期间速报地震、快报、震源机制解和震源参数处理情况。利用该模块,可实现当日日志添加与修改、历史日志查询、统计,主要代码如下
//添加日志
Map<String, String>map = new HashMap<String, String>();
map.put(“logRecordDate”, logRecordDate);
map.put(“userId1”, userId1 + “”);
map.put(“userId2”, userId2 + “”);
map.put(“eqimManSysStatusTypeId”, eqimManSysStatusTypeId + “”);
map.put(“eqimAutoSysStatusTypeId”, eqimAutoSysStatusTypeId + “”);
map.put(“eqimManMachineStatusTypeId”, eqimManMachineStatusTypeId + “”);
map.put(“eqimAutoMachineStatusTypeId”, eqimAutoMachineStatusTypeId + “”);
map.put(“smsStatusTypeId”, smsStatusTypeId + “”);
String url = “http://”+ sdUtil.readServerCfg() +”:8080/logmanage/addSubaoLog1”;
return HttpUtil.postRequest(url, map);
2.5.2 编目日志管理模块编目周日志(图 4)主要记录上周编目事件个数、国内5.0级以上地震个数、刻盘情况;编目月日志主要记录当月各类数据上传中国地震台网中心FTP服务器的情况。利用该模块,可实现日志添加与修改、历史日志查询、统计,主要代码如下
//修改编目周日志
Map<String, String>map = new HashMap<String, String>();
map.put(“logRecordDate”, logRecordDate);
map.put(“eqCount”, eqCount);
map.put(“up5Count”, up5Count);
map.put(“saveStationWaveData”, saveStationWaveData);
map.put(“memo”, memo);
map.put(“userId”, userId + “”);
String url = “http://”+ sdUtil.readServerCfg() +”:8080/logmanage/updateCataLogWeek”;
return HttpUtil.postRequest(url, map);
//修改编目月日志
Map<String, String>map = new HashMap<String, String>(); map.put(“saveEventDataCount”, saveEventDataCount);
map.put(“memo”, memo);
map.put(“userId”, userId + “”);
String url = “http://”+ sdUtil.readServerCfg() +”:8080/logmanage/updateCataLogMonth”;
return HttpUtil.postRequest(url, map);
2.5.3 系统运维日志管理模块运维日志(图 5)主要记录台网部署的设备状态信息、故障开始及结束时间;设备信息管理主要记录台网硬件参数信息;部署信息管理主要记录台网设备部署情况;状态信息管理主要记录设备常见状态信息。利用本模块,可实现当日日志添加与修改、历史日志查询、当前网络状态查看、旧故障清理和统计,主要代码如下
String url_getUser = “http://”+ sdUtil.readServerCfg() +”: 8080/ logmanage/viewUser”;
JSONArray jsonArrayUser = null;
//获取user,结果封装成JSONArray
jsonArrayUser = new JSONArray (HttpUtil.getRequest(url_ getUser));
JSONArrayAdapter adapterUser = new JSONArrayAdapter(this, jsonArrayUser, “userName”, false);
spinnerUser.setAdapter(adapterUser);
//为DeploymentInfo下拉列表获取信息
String url_getDeploymentInfo=”http://”+sdUtil.readServerCfg()+”:8080/logmanage/viewDeploy mentInfo”;
JSONArray jsonArrayDeploymentInfo = null;
jsonArrayDeploymentInfo = new JSONArray(HttpUtil.getRequest(url_getDeploymentInfo));
//将JSONArray包装成Adapter
JSONArrayAdapter adapterDeploymentInfo=newJSONArrayAdapter(this, jsonArrayDeploymentInfo, “ip”, false);
spinnerDeploymentInfo.setAdapter(adapterDeploymentInfo);
//为StatusType下拉列表获取信息
String url_getStatusType = “http://”+ sdUtil.readServerCfg() +”:8080/logmanage/viewStatusType”;
JSONArray jsonArrayStatusType = null;
jsonArrayStatusType = new JSONArray(HttpUtil.getRequest(url_getStatusType));
JSONArrayAdapter adapterStatusType = new JSONArrayAdapter(this, jsonArrayStatusType, “statusDesc”, false);
//显示用户名列表
spinnerStatusType.setAdapter(adapterStatusType);
2.5.4 监管模块领导角色可以利用该模块功能,浏览、查询技术系统日志数据。
2.5.5 权限管理模块管理员用户可以登录该模块,负责平台角色信息(图 6)和用户信息(图 7)的增、删、改、查操作,主要代码如下
//添加角色
Map<String, String>map = new HashMap<String, String>();
map.put(“name”, name);
map.put(“descs”, descs);
String url = “http://”+ sdUtil.readServerCfg() +”: 8080/ logmanage/ addRole”;
return HttpUtil.postRequest(url, map);
//角色列表显示
private void showList (JSONArray queryListJsonArray){
RoleArrayAdapter adapter = new RoleArray Adapter (query ListJsonArray, this);
roleList.setAdapter(adapter); }
private JSONArray query() throws Exception {
SDCardUtil sdUtil = new SDCardUtil();
String url = “http://”+ sdUtil.readServerCfg()+”: 8080/ logmanage/queryRole”;
return new JSONArray(HttpUtil.getRequest(url));
}
3 平台测试测震台网日志管理平台设计完成后,在河北测震台网部分工作人员手机上进行安装测试,借助河北省地震局部署的全局式无线网络平台,手机APP流畅运行,测试结果正常(图 8,图 9,图 10)。
随着行业的发展,更多软硬件设备融入测震台网,借助日志文件,可有效保障测震台网的长期稳定运行。与传统纸介质或普通文本文件记录相比,测震台网日志管理平台功能强大,占用物理空间小,便于查询,便于移动工作,节约纸张及打印耗材,符合国家节能减排要求。该日志管理平台的应用,实现了测震台网集中化、规范化、便捷化的日志产出,解决了查询难、管理落后等难题。
在软件研发过程中,笔者发现:①手机APP调用Servlet传递参数时,需重写Servlet中的doPost()方法;如不需传递参数,只需重写doGet()方法即可;②Android-20 API不支持某些控件,此版本及以上版本的API只支持Android可穿戴设备,开发手机应用只能调用Android-19及以下版本的API。
常亮, 赵英萍, 郭垚嘉, 等. 2017. 基于Android系统的地震编目数据查询平台设计[J]. 地震地磁观测与研究, 38(1): 141-145. DOI:10.3969/j.issn.1003-3246.2017.01.024 |
陈赛娉. 2006. 大型企业日志管理平台方案设计[J]. 大众科技, (8): 207-208. DOI:10.3969/j.issn.1008-1151.2006.08.114 |
戴波, 王大伟, 江昊琳, 等. 2016. 基于Android平台的地震设备维修管理系统[J]. 地震地磁观测与研究, 37(2): 153-156. |
高嘉伟, 李娟, 李帮辉. 2016. 基于Android的地震速报软件设计与实现[J]. 计算机应用与软件, 33(5): 212-214. DOI:10.3969/j.issn.1000-386x.2016.05.053 |
李文江. 2008. 基于ASP.NET 2.0的工作日志管理系统设计[J]. 重庆文理学院学报(自然科学版), 27(1): 35-39. DOI:10.3969/j.issn.1673-8012.2008.01.012 |
刘军, 宋立军, 兰陵, 等. 2014. 基于Android平台的灾情速报系统在于田7.3级地震中的应用[J]. 震灾防御技术, 9(4): 915-920. |
肖文, 尹建伟, 陈刚, 等. 2004. 基于J2EE的日志管理中间件的设计和实现[J]. 计算机应用研究, 21(10): 173-175. DOI:10.3969/j.issn.1001-3695.2004.10.061 |
学峰, 苏日亚, 阿那尔, 等. 2016. 基于Android平台的地震灾害信息采集系统应用[J]. 防灾减灾学报, 32(3): 70-73. |
曾戊忠, 李叶新. 2012. 基于日志管理的珠海市气象网络数据系统[J]. 广东气象, 34(6): 58-60. DOI:10.3969/j.issn.1007-6190.2012.06.017 |
朱宏, 王晓磊, 刘磊, 等. 2016. 基于Android平台的地震预警终端软平台的设计与一种实现[J]. 地震工程学报, 38(6): 1016-1020. |