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 5  
6 6 public class ClientInstance implements Instance{
7 7 private AnalysisHeartbeatInstanceEntity instance;
8   - private ClientRequest lastestClientRequest;
9   - private long lastestServerUnixtime = System.currentTimeMillis()/1000;
  8 + private ClientRequest latestClientRequest;
10 9 private long currFlushServerUnixtimeBaseline = 0L;
  10 + private long latestClientServerUnixtime = System.currentTimeMillis()/1000;
  11 + private long latestDetectServerUnixtime = this.latestClientServerUnixtime;
11 12 private int lostClientRequestCount = 0;
12 13 private boolean detectNewLost = false;
13 14  
... ... @@ -18,45 +19,51 @@ public class ClientInstance implements Instance{
18 19 @Override
19 20 public void flush() {
20 21 //还未收到请求,则无需刷新失败次数
21   - if(lastestClientRequest == null) {
  22 + if(latestClientRequest == null) {
22 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 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 51 @Override
41   - public boolean needReform() {
  52 + public boolean needReform() {
42 53 return this.detectNewLost && this.lostClientRequestCount>=1 && this.lostClientRequestCount<=this.instance.getReformMaxTime();
43 54 }
44 55  
45 56 @Override
46   - public boolean needDeploy() {
  57 + public boolean needDeploy() {
47 58 return this.detectNewLost && this.lostClientRequestCount == this.instance.getDeployAtLostNum();
48 59 }
49 60  
50   - public long getLastestServerUnixtime() {
51   - return lastestServerUnixtime;
52   - }
53   -
54 61 public int getLostClientRequestCount() {
55 62 return lostClientRequestCount;
56 63 }
57 64  
58 65 public ClientRequest getLastestClientRequest() {
59   - return lastestClientRequest;
  66 + return latestClientRequest;
60 67 }
61 68  
62 69 public AnalysisHeartbeatInstanceEntity getInstance() {
... ... @@ -64,15 +71,20 @@ public class ClientInstance implements Instance{
64 71 }
65 72  
66 73 public void dealClientRequest(ClientRequest clientRequest) {
  74 + //System.out.println("dealClientRequest:"+clientRequest.toString());
  75 +
67 76 if(this.instance.getFixRateSec() == null) {
68 77 this.instance.setFixRateSec(Instance.DEFAULT_FIX_RATE_SEC);
69 78 }
70 79 if(this.instance.getMaxWaitSec() == null) {
71 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 90 @Override
... ... @@ -80,11 +92,15 @@ public class ClientInstance implements Instance{
80 92 return this.instance.getCode();
81 93 }
82 94  
  95 + public long getLatestClientServerUnixtime() {
  96 + return this.latestClientServerUnixtime;
  97 + }
  98 +
83 99 public long getUnixtime() {
84   - if(this.lastestClientRequest == null) {
85   - return this.lastestServerUnixtime;
  100 + if(this.latestClientRequest == null) {
  101 + return this.latestClientServerUnixtime;
86 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 60 public String getIdentity() {
61 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 39 return;
40 40 }
41 41  
42   - this.latestRequestUnixtime = this.serverUnixtimeBaseline;
  42 + //发送数据包,并更新结构数据
43 43 try {
  44 + this.latestRequestUnixtime = this.serverUnixtimeBaseline;
44 45 this.isSendNewHeartbeat = true;
45 46 this.latestUrlWithParam = this.instance.getUrl() + this.getUrlParams();
46 47 UtilLog.infoForMessage("向code["+this.getIdentity()+"],url["+this.latestUrlWithParam+"]发送心跳请求", ServerInstance.class);
... ... @@ -52,7 +53,7 @@ public class ServerInstance implements Instance {
52 53 } catch(SocketTimeoutException timeError) {
53 54 this.latestServerResponse = ServerResponse.createOverdue();
54 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 70 }
70 71  
71 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 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 60 htmlContent += " 未收到服务器响应\n";
61 61 }else {
62 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 64 }else if(!instance.getLatestServerResponse().isCodeOk()) {
65   - htmlContent += " 向接口["+entity.getUrl()+"]发送请求,响应数据不正常(详细请查看邮件),请及时确认服务是否正常运行\n";
  65 + htmlContent += " CODE["+instance.getIdentity()+"]监控异常,向接口["+entity.getUrl()+"]发送请求,响应数据不正常(详细请查看邮件),请及时确认服务是否正常运行\n";
66 66 }else {
67   - htmlContent += " 向接口["+entity.getUrl()+"]发送请求,未知异常,请及时确认服务是否正常运行\n";
  67 + htmlContent += " CODE["+instance.getIdentity()+"]监控异常, 向接口["+entity.getUrl()+"]发送请求,未知异常,请及时确认服务是否正常运行\n";
68 68 }
69 69 }
70 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 148 htmlContent += "<li>请求频率: "+entity.getFixRateSec()+"秒/次</li>";
149 149 htmlContent += "<li>请求最大等待时间: "+entity.getMaxWaitSec()+"秒</li>";
150 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 152 htmlContent += "<li>最后一次收到的请求包: <span style=\"color:gray;\">"+JSON.toJSONString(instance.getLastestClientRequest())+"</span></li>";
153 153 htmlContent += "<li>累计次数("+entity.getReformMaxTime()+"次后不再报警):"+instance.getLostClientRequestCount()+"</li>";
154 154 htmlContent += "</ul>";
... ...
test/main/java/com/taover/bazhuayun/analysis/test/SemilarClient.java
... ... @@ -14,7 +14,7 @@ public class SemilarClient {
14 14 String token = "";
15 15 try {
16 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 19 Thread.sleep(1000*60);
20 20 } catch (Exception e) {
... ...
test/main/java/com/taover/bazhuayun/analysis/test/WbTest.java 0 → 100644
... ... @@ -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 +}
... ...