在项目中有时会用到实时图表的显示,例如电压监测图、水文监测图、桥梁监测图、IT运维监控性能图、预警信息显示、经营分析监测等等。本文介绍SODBASE CEP自带的SODBASE View以及RESTful接口。用户可以在此基础上二次开发,定制自己的图表。用户也可以使用RESTful接口拓展自己的图表类型。
原理很简单,将需要显示的最新数据缓存在内存中,前端Javasript或flash定时取最新值在图表中刷新。SODBASE View模块做了fail retry和自带垃圾回收机制,防止因为网络不稳定引起图表数据掉线,同时避免长时间实时图表绘制引起内存泄露。
1. 示例操作步骤
准备:机器上安装有JDK和Tomcat
(1)下载sodbase-view-highcharts 工程sodbase-view-highcharts.zip,将 sodbase-view-highcharts工程中的WebRoot文件夹,拷贝到Tomcat的webapps中,命名为sodbase-view-highcharts,启动tomcat。
TomcatURI编码设置为UTF-8。并查看Tomcat端口,比如说是18080
(2)下载Sodbase StudioSODBASE-CEP-Studio-2.0.19,解压后运行
(3)下载模拟数据源SODBASE-View示例数据源,解压后将VD0001, VD0000导入Sodbase Studio。左边点击VD0001,工作区面板右键点击,测试运行。左边点击VD0002,工作区面板右键点击,测试运行。
(4)在Firefox浏览器中打开http://localhost:18080/sodbase-view-highcharts/voltage.jsp
可以测试停掉模拟数据源,在启动。实时图形能够继续显示。
2.工作原理
2.1配置方法
(1)通过sodbase-view-highcharts工程下WebRoot/voltage.jsp
配置图形显示
$.post("ChartChangeServlet2D.do?series=220KV%20I%E6%AE%B5PT%E7%94%B5%E5%8E%8B|110KV%20I%E6%AE%B5PT%E7%94%B5%E5%8E%8B&attribute=voltagevalue",function(data,status){
series是显示分组字段中哪些值的数据
attribute是数据字段的名称
(2)WebRoot/WEB-INF/lib/ sodbase-view-dataservlet.jar 中com.sodbase.view.dataservlet目录下
config.properties 中配置接收数据端口和数据分组使用的字段。数据分组使用的字段需要在VD0001的输出中。默认为viewgroupbyid
2.2 com.sodbase.view.dataservlet中的数据接口
2.2.1原理
根据com.sodbase.view.dataservlet目录下配置文件config.properties中的groupby属性,将数据在内存中统一进行存储。不同的servlet则代表了不同的数据查询方式。
在VD0001中,viewgroupbyid就是lineid。sodbase-view-dataservlet会为每个lineid的数据建立一个缓冲区,一般图表前端显示的是某lineid最新的数据值。
2.2.2 数据接口
数据接口兼容FusionWidget显示。Highcharts是Javascript图形显示,好处是移动端也可以用。具体接口以官方最新版为准,下面是写示例时版本中的接口。
2.2.2.1ChartChangeServlet1D
查询格式:series= groupbyid的值 &attribute=一个查询字段
输出格式:&value=数值
例如:series=220KV线路&attribute=voltagevalue
返回的是220KV线路最新的电压值。
2.2.2.2ChartChangeServlet2D
查询格式:series= groupbyid的值列表以|分开 &attribute=一个查询字段
输出格式:&label=time&value=series1'svalue|series2's value|......
例如:series=110KV线路|220KV线路&attribute=voltagevalue
返回的是110KV线路和220KV线路最新的电压值
2.2.2.3ChartChangeServlet3D
查询格式:series= 一个groupbyid的值 &attribute=一个查询字段
输出格式:&label=time&value=值1|值2|.....
不同series现在用不同的图表示,即一张图就一个series,可用在分组柱状图中, 一个series一次查询包含多个值,输出时用"|"分割。.
注:要求CEP event输入的被查询数据字段包含多个数据,用","分割
。即要求事件字段attribute的值为以(值1,值2)以,分开的字符串。
例:
查询ChartChangeServlet3D.do?series=测点1&attribute=voltagevalue_amp
输出&label=time&value=3|0.1|2
返回的是测点1的voltagevalue_amp最新值。要求voltagevalue_amp的值就是’3,0.1,2’,返回值用|分开是与fusionwidgets的格式兼容,在highcharts等其它图表中也容易使用。
3. 移动端消息提醒(以Android为例)
功能将某个SODSQL语句输出的新事件发到Android客户端中,以Notification的形式提醒用户。应用场景如:环境指标COD超阈值,发提醒。
下面第1、2步在SODBASEView(highcharts)示例中使用过,如果有了webapps中的目录名称改为sodbase-view-highcharts即可。
第一步:Eclipse中,将 sodbase-view-highcharts工程中的WebRoot文件夹,拷贝到Tomcat的webapps中,命名为sodbase-view-highcharts,启动tomcat
Tomcat的URI编码设置为UTF-8。服务器需要有外网地址,手机才能访问到。
第二步:在SodbaseStudio中同时运行例子VD0001, VD0000。VD0001的输出适配器的ip参数设置为tomcat服务器ip地址。
第三步:修改res\values\strings.xml中url的ip:port为自己的tomcat地址。运行sodbase-view-androidnotifications工程
原理:需要在之前Tomcat sodbase-view-highcharts的基础上,运行这个Web应用,就提供了一个Restful接口获取新的消息(也就是新的事件)
http://ip:port/sodbase-view-highcharts/NotificationServlet1D.do =?series=***&attribute=****&afterindex=****&indexattribute=_end_time_
使用方法见SodbaseDataService.java的FetchViewDataTask代码