web项目的实时监控-思路

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

下面是head.jsp 的显示。


项目中的所有页面都是 :<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;
	}
这样,用户登录进来实现定时查询后后台数据的功能就实现了。

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








  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值