Commit 753fc22d6b3854054847492719c346361bf1d06d

Authored by 王彬
1 parent f758c964
Exists in master

1.optimized monitor

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
@@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
  1 +package com.taover.bazhuayun.analysis.test;
  2 +
  3 +public class WbTest {
  4 + public static void main(String args[]) {
  5 + System.out.println("equals:"+((-121L)/1000));
  6 + }
  7 +}