Skip to content

Commit 4f04ad8

Browse files
authored
Merge pull request #337 from Nizernizer/main
agent state
2 parents 8b0a177 + 84e7d10 commit 4f04ad8

File tree

6 files changed

+63
-9
lines changed

6 files changed

+63
-9
lines changed

dongtai-agent/src/main/java/io/dongtai/iast/agent/Agent.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.io.*;
44
import java.util.Arrays;
5-
import java.util.concurrent.TimeUnit;
65

76
import io.dongtai.iast.agent.util.FileUtils;
87
import org.apache.commons.cli.*;
@@ -152,7 +151,6 @@ private static void extractJattach() throws IOException {
152151
* @param args
153152
*/
154153
public static void main(String[] args) throws InterruptedException {
155-
TimeUnit.SECONDS.sleep(10);
156154
String[] agentArgs = new String[0];
157155
try {
158156
agentArgs = parseAgentArgs(args);

dongtai-agent/src/main/java/io/dongtai/iast/agent/Constant.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ public class Constant {
99

1010
public final static String API_AGENT_REGISTER = "/api/v1/agent/register";
1111
public final static String API_REPORT_UPLOAD = "/api/v1/report/upload";
12-
public final static String API_ENGINE_ACTION = "/api/v1/engine/action";
12+
public final static String API_AGENT_STATUS = "/api/v1/actual_action";
13+
// public final static String API_ENGINE_ACTION = "/api/v1/engine/action";
14+
public final static String API_ENGINE_ACTION = "/api/v1/except_action";
1315

1416
public static final String KEY_NETWORK = "network";
1517
public static final String KEY_AGENT_VERSION = "version";
@@ -39,6 +41,8 @@ public class Constant {
3941
public static final String KEY_PERFORMANCE = "performance";
4042
public static final String KEY_CORE_INSTALLED = "isCoreInstalled";
4143
public static final String KEY_CORE_RUNNING = "isCoreRunning";
44+
public static final String KEY_CORE_STATUS = "actualRunningStatus";
45+
public static final String KEY_CORE_STATE = "stateStatus";
4246
public static final String KEY_RETURN_QUEUE = "returnQueue";
4347

4448
// 线程异常上报

dongtai-agent/src/main/java/io/dongtai/iast/agent/manager/EngineManager.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public class EngineManager {
3434
private static final String FALLBACK_MANAGER_CLASS = "io.dongtai.iast.core.bytecode.enhance.plugin.fallback.FallbackManager";
3535
private static final String REMOTE_CONFIG_UTILS_CLASS = "io.dongtai.iast.core.utils.config.RemoteConfigUtils";
3636
private static final String ENGINE_MANAGER_CLASS = "io.dongtai.iast.core.EngineManager";
37+
private static final String ENGINE_FALLBACK_CLASS = "io.dongtai.iast.core.bytecode.enhance.plugin.fallback.FallbackSwitch";
3738
private static final String INJECT_PACKAGE_REMOTE_URI = "/api/v1/engine/download?engineName=dongtai-spy";
3839
private static final String INJECT_PACKAGE_REMOTE_URI_JDK6 = "/api/v1/engine/download?engineName=dongtai-spy-jdk6";
3940
private static final String ENGINE_PACKAGE_REMOTE_URI = "/api/v1/engine/download?engineName=dongtai-core";
@@ -124,6 +125,22 @@ public static boolean checkCoreIsRunning() {
124125
}
125126
}
126127

128+
public static boolean checkCoreIsFallback() {
129+
if (IAST_CLASS_LOADER == null) {
130+
return false;
131+
}
132+
try {
133+
final Class<?> engineManagerClass = IAST_CLASS_LOADER.loadClass(ENGINE_FALLBACK_CLASS);
134+
if (engineManagerClass == null) {
135+
return false;
136+
}
137+
return (Boolean) engineManagerClass.getMethod("isEngineFallback").invoke(null);
138+
} catch (Throwable e) {
139+
DongTaiLog.info("checkCoreIsRunning failed, msg:{}, cause:{}", e.getMessage(), e.getCause());
140+
return false;
141+
}
142+
}
143+
127144
/**
128145
* 在核心包中加载并获取远端配置工具类
129146
*/

dongtai-agent/src/main/java/io/dongtai/iast/agent/monitor/impl/EngineMonitor.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import io.dongtai.iast.agent.monitor.MonitorDaemonThread;
66
import io.dongtai.iast.agent.monitor.ServerCommandEnum;
77
import io.dongtai.iast.agent.report.AgentRegisterReport;
8+
import io.dongtai.iast.agent.report.HeartBeatReport;
89
import io.dongtai.iast.agent.util.ThreadUtils;
910
import io.dongtai.iast.agent.util.http.HttpClientUtils;
1011
import io.dongtai.iast.agent.Constant;
@@ -20,6 +21,7 @@ public class EngineMonitor implements IMonitor {
2021
public static Boolean isCoreRegisterStart = false;
2122
private static final String NAME = "EngineMonitor";
2223
private static Boolean isUninstallHeart = true;
24+
private String coreStatus = "1";
2325

2426
public EngineMonitor(EngineManager engineManager) {
2527
this.engineManager = engineManager;
@@ -34,7 +36,21 @@ public String getName() {
3436
@Override
3537
public void check() throws Exception {
3638
String status = checkForStatus();
37-
ServerCommandEnum serviceCmdEnum = ServerCommandEnum.getEnum(status);
39+
if ("1".equals(status) && !"1".equals(coreStatus)) {
40+
coreStatus = "1";
41+
DongTaiLog.info("engine start");
42+
if (EngineManager.checkCoreIsInstalled()) {
43+
engineManager.start();
44+
} else {
45+
startEngine();
46+
}
47+
} else if ("2".equals(status) && !"2".equals(coreStatus)) {
48+
coreStatus = "2";
49+
DongTaiLog.info("engine stop");
50+
engineManager.stop();
51+
}
52+
HttpClientUtils.sendPost(Constant.API_AGENT_STATUS, HeartBeatReport.generateAgentStatusMsg());
53+
/* ServerCommandEnum serviceCmdEnum = ServerCommandEnum.getEnum(status);
3854
if (serviceCmdEnum == null || serviceCmdEnum == ServerCommandEnum.NO_CMD) {
3955
return;
4056
}
@@ -70,7 +86,7 @@ public void check() throws Exception {
7086
forceSwitchPerformanceBreaker(false);
7187
break;
7288
default:
73-
}
89+
}*/
7490
}
7591

7692
private void forceSwitchPerformanceBreaker(boolean turnOn) {
@@ -91,7 +107,8 @@ private String checkForStatus() {
91107
String respRaw = String.valueOf(HttpClientUtils.sendGet(Constant.API_ENGINE_ACTION, "agentId", String.valueOf(AgentRegisterReport.getAgentFlag())));
92108
if (respRaw != null && !respRaw.isEmpty()) {
93109
JSONObject resp = new JSONObject(respRaw);
94-
return resp.get("data").toString();
110+
JSONObject data = (JSONObject) resp.get("data");
111+
return data.get("exceptRunningStatus").toString();
95112
}
96113
} catch (Exception e) {
97114
return "other";
@@ -101,12 +118,12 @@ private String checkForStatus() {
101118

102119
public void startEngine() {
103120
boolean status = true;
104-
if(couldInstallEngine()){
121+
if (couldInstallEngine()) {
105122
// jdk8以上
106123
status = status && engineManager.extractPackage();
107124
status = status && engineManager.install();
108125
status = status && engineManager.start();
109-
}else {
126+
} else {
110127
// jdk6-7
111128
status = status && engineManager.extractPackage();
112129
status = status && engineManager.install();

dongtai-agent/src/main/java/io/dongtai/iast/agent/report/HeartBeatReport.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,20 @@ public static String generateHeartBeatMsg() {
3939
return report.toString();
4040
}
4141

42+
public static String generateAgentStatusMsg() {
43+
JSONObject detail = new JSONObject();
44+
detail.put(Constant.KEY_AGENT_ID, AgentRegisterReport.getAgentFlag());
45+
Integer status = 0;
46+
if (EngineManager.checkCoreIsRunning()){
47+
status = 1;
48+
}else {
49+
status = 2;
50+
}
51+
detail.put(Constant.KEY_CORE_STATUS, status);
52+
detail.put(Constant.KEY_CORE_STATE, EngineManager.checkCoreIsFallback() ? 3 : status);
53+
return detail.toString();
54+
}
55+
4256
/**
4357
* Query CPU usage
4458
*

dongtai-core/src/main/java/io/dongtai/iast/core/handler/hookpoint/models/IastReplayModel.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,11 @@ public String getFullUrl() {
7373

7474
StringBuilder url = new StringBuilder();
7575
// fixme 根据协议,判断使用http/https
76-
url.append("http://");
76+
if (EngineManager.SERVER.getProtocol().toLowerCase().contains("https")){
77+
url.append("https://");
78+
}else {
79+
url.append("http://");
80+
}
7781
url.append(host);
7882
if (getRequestQueryString().isEmpty()) {
7983
url.append(requestUrl);

0 commit comments

Comments
 (0)