web项目的实时监控-思路

时间:2022-02-09 13:01:39

今天,做了一个用户登陆后,实时监控后台数据的任务,整整搞了一天,(环境是 mybatis、spring、springmvc)。上午想搞一个定时线程,在用户的登陆后就执行,然后从后台执行该线程,如果发现异常就在页面上告警,但是在一个线程里没有办法向用户所在页面发送告警弹窗。中午休息时,突然想到了后面讲的实时检查的思路:用户进来都是在页面上的,与其让后台实时监控,然后再向前台发送数据,不如在页面上定时向后台发出请求。这样做一方面容易实现,js上定时执行异步请求,使后台定时查询数据,及时发现问题,然后在异步请求返回的结果中弹出告警信息。

下面是head.jsp 的显示。

web项目的实时监控-思路

项目中的所有页面都是 :<c:import url="../common/head.jsp" charEncoding="UTF-8"></c:import>

将head.jsp 包含进来。所以该页面是进行定时向后台发起查询的最好页面。head.jsp 页面上要引入自己的js 和弹窗功能的插件 layer。

<script src="<%=basePath%>res/layer/layer.js"></script>
<script src="<%=basePath%>res/monitor/head.js"></script>
在head.jsp中引入的文件。

还有一个控制停止向后台发送异步请求的checkbox组件,满足用户的需要。

<input type="checkbox" style="" id="stop" />停止报警


下面是js代码:

$(function() {
setInterval("myInterval()",1000*60);//1000为1秒钟
});

function myInterval()
{
if($('#stop').is(':checked') ) {
//alert("nihao");
return;
}
//var index = layer.load(0, {shade: [0.2,'#000']});
$.post("/web_project_name/monitor/downDedail/checkBearTime", function(res) {
if(res.length==0){
return ;
}

var str1 = "<table class='table table-bordered'><thead><tr><th style='height:40px'>接口名</th><th style='height:40px'>容忍时长</th><th style='height:40px'>最大容忍时长</th><th style='height:40px'>平均耗时</th><th style='height:40px'>成功率</th></tr></thead>";
for(var i=0;i<res.length;i++){
str1 += "<tbody><tr bgcolor='f12339'style='height:60px'><td>" + res[i].METHODNAME
+ "</td><td>" + res[i].MINTIME + " 秒"
+ "</td>"
+"<td>" + res[i].MAXTIME + " 秒"
+ "</td>"
+"<td>" + res[i].AVGTIME + " 秒"
+ "</td>"
+"<td>" + res[i].SUCCRATE + " %"
+ "</td></tr></tbody>";
}
str1 += "</table>";
//alert(txt);
layer.open({
type: 1,
title : "报警明细(接口成功率小于80% 或 接口平均耗时大于最大容忍时长)",
skin: 'layui-layer-rim', //加上边框
area: ['600px', '400px'], //宽高
content: str1
});
layer.closeAll('loading');
});
}
js 的图片显示都是使用string拼起来的。借助layer插件,得到弹出窗口的功能。异步请求采取定向请求绝对路径。向Controller发送请求,从而达到触发定时查询的功能。

Controller的代码:

@RequestMapping(value = "checkBearTime", method = RequestMethod.POST)
@ResponseBody
public List<Map> checkBearTime() {
XXXXXXXXX;
return res;
}
这样,用户登录进来实现定时查询后后台数据的功能就实现了。

总结:我觉得但我们遇到问题时,应该有个时间静静,仔细的考虑问题的解决方案,这样才可以更快的找到更好的思路。