Commit 753fc22d6b3854054847492719c346361bf1d06d
1 parent
f758c964
Exists in
master
1.optimized monitor
Showing
6 changed files
with
63 additions
and
33 deletions
Show diff stats
src/main/java/com/taover/bazhuayun/analysis/web/module/heartbeat/bean/ClientInstance.java
@@ -5,9 +5,10 @@ import com.taover.util.UtilLog; | @@ -5,9 +5,10 @@ import com.taover.util.UtilLog; | ||
5 | 5 | ||
6 | public class ClientInstance implements Instance{ | 6 | public class ClientInstance implements Instance{ |
7 | private AnalysisHeartbeatInstanceEntity instance; | 7 | private AnalysisHeartbeatInstanceEntity instance; |
8 | - private ClientRequest lastestClientRequest; | ||
9 | - private long lastestServerUnixtime = System.currentTimeMillis()/1000; | 8 | + private ClientRequest latestClientRequest; |
10 | private long currFlushServerUnixtimeBaseline = 0L; | 9 | private long currFlushServerUnixtimeBaseline = 0L; |
10 | + private long latestClientServerUnixtime = System.currentTimeMillis()/1000; | ||
11 | + private long latestDetectServerUnixtime = this.latestClientServerUnixtime; | ||
11 | private int lostClientRequestCount = 0; | 12 | private int lostClientRequestCount = 0; |
12 | private boolean detectNewLost = false; | 13 | private boolean detectNewLost = false; |
13 | 14 | ||
@@ -18,45 +19,51 @@ public class ClientInstance implements Instance{ | @@ -18,45 +19,51 @@ public class ClientInstance implements Instance{ | ||
18 | @Override | 19 | @Override |
19 | public void flush() { | 20 | public void flush() { |
20 | //还未收到请求,则无需刷新失败次数 | 21 | //还未收到请求,则无需刷新失败次数 |
21 | - if(lastestClientRequest == null) { | 22 | + if(latestClientRequest == null) { |
22 | return; | 23 | return; |
23 | } | 24 | } |
24 | 25 | ||
25 | - this.detectNewLost = false; | ||
26 | - this.currFlushServerUnixtimeBaseline = System.currentTimeMillis()/1000; | ||
27 | - //通过服务器时间,判断是否超时未收到客户端请求 | ||
28 | - if(isNewLoopForFixRateSec()) { | ||
29 | - ++this.lostClientRequestCount; | ||
30 | - this.detectNewLost = true; | ||
31 | - | ||
32 | - UtilLog.infoForMessage("检测到超时未收到请求,code["+this.getIdentity()+"],丢包统计["+this.lostClientRequestCount+"]", ServerInstance.class); | 26 | + synchronized (this) { |
27 | + this.detectNewLost = false; | ||
28 | + this.currFlushServerUnixtimeBaseline = System.currentTimeMillis()/1000; | ||
29 | + //通过服务器时间,判断是否超时未收到客户端请求 | ||
30 | + if(isNewLoopForFixRateSec()) { | ||
31 | + this.latestDetectServerUnixtime = this.currFlushServerUnixtimeBaseline; | ||
32 | + if(isOverdueFixAndMaxWaitTime()) { | ||
33 | + ++this.lostClientRequestCount; | ||
34 | + this.detectNewLost = true; | ||
35 | + UtilLog.infoForMessage("检测到超时未收到请求,code["+this.getIdentity()+"],丢包统计["+this.lostClientRequestCount+"]", ServerInstance.class); | ||
36 | + } | ||
37 | + } | ||
33 | } | 38 | } |
34 | } | 39 | } |
35 | 40 | ||
41 | + private boolean isOverdueFixAndMaxWaitTime() { | ||
42 | + //System.out.println("isOverdueFixAndMaxWaitTime:"+(this.currFlushServerUnixtimeBaseline-this.latestClientServerUnixtime)+" > "+(this.instance.getFixRateSec()+this.instance.getMaxWaitSec())); | ||
43 | + return (this.currFlushServerUnixtimeBaseline-this.latestClientServerUnixtime) > (this.instance.getFixRateSec()+this.instance.getMaxWaitSec()); | ||
44 | + } | ||
45 | + | ||
36 | private boolean isNewLoopForFixRateSec() { | 46 | private boolean isNewLoopForFixRateSec() { |
37 | - return ((this.currFlushServerUnixtimeBaseline-this.lastestServerUnixtime) / this.instance.getFixRateSec()) > this.lostClientRequestCount; | 47 | + //System.out.println("isNewLoopForFixRateSec:"+(this.currFlushServerUnixtimeBaseline-this.latestDetectServerUnixtime)+" > "+this.instance.getFixRateSec()); |
48 | + return ((this.currFlushServerUnixtimeBaseline-this.latestDetectServerUnixtime) / this.instance.getFixRateSec()) > 0; | ||
38 | } | 49 | } |
39 | 50 | ||
40 | @Override | 51 | @Override |
41 | - public boolean needReform() { | 52 | + public boolean needReform() { |
42 | return this.detectNewLost && this.lostClientRequestCount>=1 && this.lostClientRequestCount<=this.instance.getReformMaxTime(); | 53 | return this.detectNewLost && this.lostClientRequestCount>=1 && this.lostClientRequestCount<=this.instance.getReformMaxTime(); |
43 | } | 54 | } |
44 | 55 | ||
45 | @Override | 56 | @Override |
46 | - public boolean needDeploy() { | 57 | + public boolean needDeploy() { |
47 | return this.detectNewLost && this.lostClientRequestCount == this.instance.getDeployAtLostNum(); | 58 | return this.detectNewLost && this.lostClientRequestCount == this.instance.getDeployAtLostNum(); |
48 | } | 59 | } |
49 | 60 | ||
50 | - public long getLastestServerUnixtime() { | ||
51 | - return lastestServerUnixtime; | ||
52 | - } | ||
53 | - | ||
54 | public int getLostClientRequestCount() { | 61 | public int getLostClientRequestCount() { |
55 | return lostClientRequestCount; | 62 | return lostClientRequestCount; |
56 | } | 63 | } |
57 | 64 | ||
58 | public ClientRequest getLastestClientRequest() { | 65 | public ClientRequest getLastestClientRequest() { |
59 | - return lastestClientRequest; | 66 | + return latestClientRequest; |
60 | } | 67 | } |
61 | 68 | ||
62 | public AnalysisHeartbeatInstanceEntity getInstance() { | 69 | public AnalysisHeartbeatInstanceEntity getInstance() { |
@@ -64,15 +71,20 @@ public class ClientInstance implements Instance{ | @@ -64,15 +71,20 @@ public class ClientInstance implements Instance{ | ||
64 | } | 71 | } |
65 | 72 | ||
66 | public void dealClientRequest(ClientRequest clientRequest) { | 73 | public void dealClientRequest(ClientRequest clientRequest) { |
74 | + //System.out.println("dealClientRequest:"+clientRequest.toString()); | ||
75 | + | ||
67 | if(this.instance.getFixRateSec() == null) { | 76 | if(this.instance.getFixRateSec() == null) { |
68 | this.instance.setFixRateSec(Instance.DEFAULT_FIX_RATE_SEC); | 77 | this.instance.setFixRateSec(Instance.DEFAULT_FIX_RATE_SEC); |
69 | } | 78 | } |
70 | if(this.instance.getMaxWaitSec() == null) { | 79 | if(this.instance.getMaxWaitSec() == null) { |
71 | this.instance.setMaxWaitSec(Instance.DEFAULT_MAX_WAIT_SEC); | 80 | this.instance.setMaxWaitSec(Instance.DEFAULT_MAX_WAIT_SEC); |
72 | } | 81 | } |
73 | - this.lastestClientRequest = clientRequest; | ||
74 | - this.lastestServerUnixtime = System.currentTimeMillis()/1000; | ||
75 | - this.lostClientRequestCount = 0; | 82 | + |
83 | + synchronized (this) { | ||
84 | + this.latestClientRequest = clientRequest; | ||
85 | + this.latestClientServerUnixtime = System.currentTimeMillis()/1000; | ||
86 | + this.lostClientRequestCount = 0; | ||
87 | + } | ||
76 | } | 88 | } |
77 | 89 | ||
78 | @Override | 90 | @Override |
@@ -80,11 +92,15 @@ public class ClientInstance implements Instance{ | @@ -80,11 +92,15 @@ public class ClientInstance implements Instance{ | ||
80 | return this.instance.getCode(); | 92 | return this.instance.getCode(); |
81 | } | 93 | } |
82 | 94 | ||
95 | + public long getLatestClientServerUnixtime() { | ||
96 | + return this.latestClientServerUnixtime; | ||
97 | + } | ||
98 | + | ||
83 | public long getUnixtime() { | 99 | public long getUnixtime() { |
84 | - if(this.lastestClientRequest == null) { | ||
85 | - return this.lastestServerUnixtime; | 100 | + if(this.latestClientRequest == null) { |
101 | + return this.latestClientServerUnixtime; | ||
86 | }else { | 102 | }else { |
87 | - return this.lastestClientRequest.getUnixtime(); | 103 | + return this.latestClientRequest.getUnixtime(); |
88 | } | 104 | } |
89 | } | 105 | } |
90 | } | 106 | } |
src/main/java/com/taover/bazhuayun/analysis/web/module/heartbeat/bean/ClientRequest.java
@@ -60,4 +60,9 @@ public class ClientRequest { | @@ -60,4 +60,9 @@ public class ClientRequest { | ||
60 | public String getIdentity() { | 60 | public String getIdentity() { |
61 | return this.code; | 61 | return this.code; |
62 | } | 62 | } |
63 | + | ||
64 | + @Override | ||
65 | + public String toString() { | ||
66 | + return "ClientRequest [code=" + code + ", ip=" + ip + ", unixtime=" + unixtime + ", seckey=" + seckey + "]"; | ||
67 | + } | ||
63 | } | 68 | } |
src/main/java/com/taover/bazhuayun/analysis/web/module/heartbeat/bean/ServerInstance.java
@@ -39,8 +39,9 @@ public class ServerInstance implements Instance { | @@ -39,8 +39,9 @@ public class ServerInstance implements Instance { | ||
39 | return; | 39 | return; |
40 | } | 40 | } |
41 | 41 | ||
42 | - this.latestRequestUnixtime = this.serverUnixtimeBaseline; | 42 | + //发送数据包,并更新结构数据 |
43 | try { | 43 | try { |
44 | + this.latestRequestUnixtime = this.serverUnixtimeBaseline; | ||
44 | this.isSendNewHeartbeat = true; | 45 | this.isSendNewHeartbeat = true; |
45 | this.latestUrlWithParam = this.instance.getUrl() + this.getUrlParams(); | 46 | this.latestUrlWithParam = this.instance.getUrl() + this.getUrlParams(); |
46 | UtilLog.infoForMessage("向code["+this.getIdentity()+"],url["+this.latestUrlWithParam+"]发送心跳请求", ServerInstance.class); | 47 | UtilLog.infoForMessage("向code["+this.getIdentity()+"],url["+this.latestUrlWithParam+"]发送心跳请求", ServerInstance.class); |
@@ -52,7 +53,7 @@ public class ServerInstance implements Instance { | @@ -52,7 +53,7 @@ public class ServerInstance implements Instance { | ||
52 | } catch(SocketTimeoutException timeError) { | 53 | } catch(SocketTimeoutException timeError) { |
53 | this.latestServerResponse = ServerResponse.createOverdue(); | 54 | this.latestServerResponse = ServerResponse.createOverdue(); |
54 | } catch (Exception e) { | 55 | } catch (Exception e) { |
55 | - this.latestServerResponse = ServerResponse.createException(e); | 56 | + this.latestServerResponse = ServerResponse.createException(e); |
56 | } | 57 | } |
57 | 58 | ||
58 | //判断响应是否正常 | 59 | //判断响应是否正常 |
@@ -69,7 +70,8 @@ public class ServerInstance implements Instance { | @@ -69,7 +70,8 @@ public class ServerInstance implements Instance { | ||
69 | } | 70 | } |
70 | 71 | ||
71 | private boolean isNewLoopForFixRateSec() { | 72 | private boolean isNewLoopForFixRateSec() { |
72 | - return ((this.serverUnixtimeBaseline-this.latestRequestUnixtime)/this.instance.getFixRateSec()) > this.errorServerResponseCount; | 73 | + System.out.println("isNewLoopForFixRateSec:"+(this.serverUnixtimeBaseline-this.latestRequestUnixtime)+" > "+this.instance.getFixRateSec()); |
74 | + return (this.serverUnixtimeBaseline-this.latestRequestUnixtime) > this.instance.getFixRateSec(); | ||
73 | } | 75 | } |
74 | 76 | ||
75 | public AnalysisHeartbeatInstanceEntity getInstance() { | 77 | public AnalysisHeartbeatInstanceEntity getInstance() { |
src/main/java/com/taover/bazhuayun/analysis/web/module/heartbeat/service/HeartbeatReformServiceImpl.java
@@ -60,11 +60,11 @@ public class HeartbeatReformServiceImpl implements HeartbeatReformService { | @@ -60,11 +60,11 @@ public class HeartbeatReformServiceImpl implements HeartbeatReformService { | ||
60 | htmlContent += " 未收到服务器响应\n"; | 60 | htmlContent += " 未收到服务器响应\n"; |
61 | }else { | 61 | }else { |
62 | if(instance.getLatestServerResponse().isOverdue()) { | 62 | if(instance.getLatestServerResponse().isOverdue()) { |
63 | - htmlContent += " 向接口["+entity.getUrl()+"]发送请求,响应超时["+entity.getMaxWaitSec()+"s],请及时确认服务是否正常运行\n"; | 63 | + htmlContent += " CODE["+instance.getIdentity()+"]监控异常,向接口["+entity.getUrl()+"]发送请求,响应超时["+entity.getMaxWaitSec()+"s],请及时确认服务是否正常运行\n"; |
64 | }else if(!instance.getLatestServerResponse().isCodeOk()) { | 64 | }else if(!instance.getLatestServerResponse().isCodeOk()) { |
65 | - htmlContent += " 向接口["+entity.getUrl()+"]发送请求,响应数据不正常(详细请查看邮件),请及时确认服务是否正常运行\n"; | 65 | + htmlContent += " CODE["+instance.getIdentity()+"]监控异常,向接口["+entity.getUrl()+"]发送请求,响应数据不正常(详细请查看邮件),请及时确认服务是否正常运行\n"; |
66 | }else { | 66 | }else { |
67 | - htmlContent += " 向接口["+entity.getUrl()+"]发送请求,未知异常,请及时确认服务是否正常运行\n"; | 67 | + htmlContent += " CODE["+instance.getIdentity()+"]监控异常, 向接口["+entity.getUrl()+"]发送请求,未知异常,请及时确认服务是否正常运行\n"; |
68 | } | 68 | } |
69 | } | 69 | } |
70 | htmlContent += " 最后一次请求时间: "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(instance.getLatestRequestUnixtime()*1000)); | 70 | htmlContent += " 最后一次请求时间: "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(instance.getLatestRequestUnixtime()*1000)); |
@@ -148,7 +148,7 @@ public class HeartbeatReformServiceImpl implements HeartbeatReformService { | @@ -148,7 +148,7 @@ public class HeartbeatReformServiceImpl implements HeartbeatReformService { | ||
148 | htmlContent += "<li>请求频率: "+entity.getFixRateSec()+"秒/次</li>"; | 148 | htmlContent += "<li>请求频率: "+entity.getFixRateSec()+"秒/次</li>"; |
149 | htmlContent += "<li>请求最大等待时间: "+entity.getMaxWaitSec()+"秒</li>"; | 149 | htmlContent += "<li>请求最大等待时间: "+entity.getMaxWaitSec()+"秒</li>"; |
150 | htmlContent += "<li>客户端请求时间戳: "+sdf.format(new Date(instance.getUnixtime()*1000))+"</li>"; | 150 | htmlContent += "<li>客户端请求时间戳: "+sdf.format(new Date(instance.getUnixtime()*1000))+"</li>"; |
151 | - htmlContent += "<li>服务器接收时间: "+sdf.format(new Date(instance.getLastestServerUnixtime()*1000))+"</li>"; | 151 | + htmlContent += "<li>服务器接收时间: "+sdf.format(new Date(instance.getLatestClientServerUnixtime()*1000))+"</li>"; |
152 | htmlContent += "<li>最后一次收到的请求包: <span style=\"color:gray;\">"+JSON.toJSONString(instance.getLastestClientRequest())+"</span></li>"; | 152 | htmlContent += "<li>最后一次收到的请求包: <span style=\"color:gray;\">"+JSON.toJSONString(instance.getLastestClientRequest())+"</span></li>"; |
153 | htmlContent += "<li>累计次数("+entity.getReformMaxTime()+"次后不再报警):"+instance.getLostClientRequestCount()+"</li>"; | 153 | htmlContent += "<li>累计次数("+entity.getReformMaxTime()+"次后不再报警):"+instance.getLostClientRequestCount()+"</li>"; |
154 | htmlContent += "</ul>"; | 154 | htmlContent += "</ul>"; |
test/main/java/com/taover/bazhuayun/analysis/test/SemilarClient.java
@@ -14,7 +14,7 @@ public class SemilarClient { | @@ -14,7 +14,7 @@ public class SemilarClient { | ||
14 | String token = ""; | 14 | String token = ""; |
15 | try { | 15 | try { |
16 | System.out.println("=======send heartbeat["+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"]======="); | 16 | System.out.println("=======send heartbeat["+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"]======="); |
17 | - System.out.println("response:"+UtilHttpByOkHttp.sendGet("http://localhost/api/heartbeat?code="+code+"&unixtime="+time+"&seckey="+UtilEncrypt.MD5Lower32(code+time+token), null)); | 17 | + System.out.println("response:"+UtilHttpByOkHttp.sendGet("http://localhost/api/heartbeat/demon?code="+code+"&unixtime="+time+"&seckey="+UtilEncrypt.MD5Lower32(code+time+token), null)); |
18 | 18 | ||
19 | Thread.sleep(1000*60); | 19 | Thread.sleep(1000*60); |
20 | } catch (Exception e) { | 20 | } catch (Exception e) { |
test/main/java/com/taover/bazhuayun/analysis/test/WbTest.java
0 → 100644