mtrAgent更新优化
This commit is contained in:
@@ -216,10 +216,6 @@ public class AgentEndpoint {
|
|||||||
String md5 = AgentUtil.getFileMD5(properties.getTempPath()+"/"+fileName);
|
String md5 = AgentUtil.getFileMD5(properties.getTempPath()+"/"+fileName);
|
||||||
if(StringUtils.isNotBlank(md5) && StringUtils.isNotBlank(versionUpdateEO.getFileMd5())
|
if(StringUtils.isNotBlank(md5) && StringUtils.isNotBlank(versionUpdateEO.getFileMd5())
|
||||||
&& StringUtils.equals(md5,versionUpdateEO.getFileMd5())){
|
&& StringUtils.equals(md5,versionUpdateEO.getFileMd5())){
|
||||||
//更改全局变量
|
|
||||||
GlobalConfig.isCollect = false;
|
|
||||||
//调用采集任务
|
|
||||||
agentService.cancelCollect();
|
|
||||||
//所有文件下载完成,执行脚本命令
|
//所有文件下载完成,执行脚本命令
|
||||||
agentService.command(policy, clientId,MsgEnum.Agent版本更新应答.getValue());
|
agentService.command(policy, clientId,MsgEnum.Agent版本更新应答.getValue());
|
||||||
}else{
|
}else{
|
||||||
|
|||||||
@@ -94,6 +94,8 @@ public class AppInitializer implements CommandLineRunner {
|
|||||||
agentService.checkMonitor();
|
agentService.checkMonitor();
|
||||||
AssertLog.info("检测mtr探测策略配置");
|
AssertLog.info("检测mtr探测策略配置");
|
||||||
agentService.checkMtrDelect();
|
agentService.checkMtrDelect();
|
||||||
|
AssertLog.info("检测agent更新配置");
|
||||||
|
agentService.checkAgentUpdate();
|
||||||
}else{
|
}else{
|
||||||
//未注册,发送注册
|
//未注册,发送注册
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -139,6 +139,7 @@ public class BusinessTasks {
|
|||||||
object.put("clientId", GlobalConfig.CLIENT_ID);
|
object.put("clientId", GlobalConfig.CLIENT_ID);
|
||||||
object.put("logicalNode", agentService.getLogicalNode());
|
object.put("logicalNode", agentService.getLogicalNode());
|
||||||
object.put("sn", GlobalConfig.DEVICE_SN);
|
object.put("sn", GlobalConfig.DEVICE_SN);
|
||||||
|
object.put("cpucores", Runtime.getRuntime().availableProcessors());
|
||||||
object.put("strength","31");
|
object.put("strength","31");
|
||||||
object.put("name", properties.getName());
|
object.put("name", properties.getName());
|
||||||
object.put("version", properties.getVersion());
|
object.put("version", properties.getVersion());
|
||||||
@@ -855,6 +856,8 @@ public class BusinessTasks {
|
|||||||
|
|
||||||
AssertLog.info("检测mtr探测策略配置");
|
AssertLog.info("检测mtr探测策略配置");
|
||||||
agentService.checkMtrDelect();
|
agentService.checkMtrDelect();
|
||||||
|
AssertLog.info("检测agent更新配置");
|
||||||
|
agentService.checkAgentUpdate();
|
||||||
}else{
|
}else{
|
||||||
//未注册,发送注册
|
//未注册,发送注册
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -2,12 +2,15 @@ package com.tongran.agent.client.scheduler.task;
|
|||||||
|
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.tongran.agent.client.core.config.ApplicationProperties;
|
import com.tongran.agent.client.core.config.ApplicationProperties;
|
||||||
|
import com.tongran.agent.client.core.config.GlobalConfig;
|
||||||
import com.tongran.agent.client.core.enums.MsgEnum;
|
import com.tongran.agent.client.core.enums.MsgEnum;
|
||||||
import com.tongran.agent.client.core.session.SessionManager;
|
import com.tongran.agent.client.core.session.SessionManager;
|
||||||
import com.tongran.agent.client.netty.model.Message;
|
import com.tongran.agent.client.netty.model.Message;
|
||||||
import com.tongran.agent.client.scheduler.service.AsyncCommandExecutor;
|
import com.tongran.agent.client.scheduler.service.AsyncCommandExecutor;
|
||||||
|
import com.tongran.agent.client.service.AgentService;
|
||||||
import com.tongran.agent.client.utils.AgentDataUtil;
|
import com.tongran.agent.client.utils.AgentDataUtil;
|
||||||
import com.tongran.agent.client.utils.AgentUtil;
|
import com.tongran.agent.client.utils.AgentUtil;
|
||||||
|
import com.tongran.agent.client.utils.AssertLog;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@@ -30,6 +33,8 @@ public class SpecificTimeTaskService {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private SpecificTimeTaskConfig taskConfig;
|
private SpecificTimeTaskConfig taskConfig;
|
||||||
|
@Resource
|
||||||
|
private AgentService agentService;
|
||||||
|
|
||||||
public SpecificTimeTaskService() {
|
public SpecificTimeTaskService() {
|
||||||
this.sessionManager = SessionManager.getInstance();
|
this.sessionManager = SessionManager.getInstance();
|
||||||
@@ -81,6 +86,11 @@ public class SpecificTimeTaskService {
|
|||||||
String key = request.getTaskName()+"-"+System.currentTimeMillis();
|
String key = request.getTaskName()+"-"+System.currentTimeMillis();
|
||||||
if(StringUtils.equals(request.getDataType(), MsgEnum.Agent版本更新应答.getValue())){
|
if(StringUtils.equals(request.getDataType(), MsgEnum.Agent版本更新应答.getValue())){
|
||||||
try {
|
try {
|
||||||
|
AssertLog.info("定时更新启动...暂停心跳和采集任务");
|
||||||
|
//更改全局变量
|
||||||
|
GlobalConfig.isCollect = false;
|
||||||
|
//调用采集任务
|
||||||
|
agentService.cancelCollect();
|
||||||
//设置检查回滚任务
|
//设置检查回滚任务
|
||||||
String SCRIPT_PATH = properties.getScriptPath()+"/rollback-tragent.sh";
|
String SCRIPT_PATH = properties.getScriptPath()+"/rollback-tragent.sh";
|
||||||
AgentDataUtil.chmod(SCRIPT_PATH,"775");
|
AgentDataUtil.chmod(SCRIPT_PATH,"775");
|
||||||
@@ -113,7 +123,7 @@ public class SpecificTimeTaskService {
|
|||||||
json.put("resMsg", "");
|
json.put("resMsg", "");
|
||||||
json.put("result", jsonObject.toJSONString());
|
json.put("result", jsonObject.toJSONString());
|
||||||
json.put("timestamp",timestamps);
|
json.put("timestamp",timestamps);
|
||||||
Message message = Message.builder().clientId(request.getClientId()).dataType(request.getDataType()).data(jsonObject.toJSONString()).build();
|
Message message = Message.builder().clientId(request.getClientId()).dataType(request.getDataType()).data(json.toJSONString()).build();
|
||||||
if (Objects.nonNull(sessionManager.getSessionById(request.getClientId()))) {
|
if (Objects.nonNull(sessionManager.getSessionById(request.getClientId()))) {
|
||||||
System.out.println("发送执行结果: " + json.toJSONString()); // 注意:toJSONString()
|
System.out.println("发送执行结果: " + json.toJSONString()); // 注意:toJSONString()
|
||||||
sessionManager.writeAndFlush(sessionManager.getSessionById(request.getClientId()).getChannel(), message);
|
sessionManager.writeAndFlush(sessionManager.getSessionById(request.getClientId()).getChannel(), message);
|
||||||
|
|||||||
@@ -32,4 +32,6 @@ public interface AgentService {
|
|||||||
void checkMonitor();
|
void checkMonitor();
|
||||||
|
|
||||||
void checkMtrDelect();
|
void checkMtrDelect();
|
||||||
|
|
||||||
|
void checkAgentUpdate();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -171,35 +171,25 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
.clientId(clientId)
|
.clientId(clientId)
|
||||||
.dataType(dataType)
|
.dataType(dataType)
|
||||||
.build();
|
.build();
|
||||||
try {
|
if(StringUtils.equals(dataType, MsgEnum.Agent版本更新应答.getValue())){
|
||||||
taskService.createSpecificTimeTask(request);
|
// 将request对象转换为JSON字符串
|
||||||
JSONObject json = new JSONObject();
|
String jsonContent = "updateMsg=" + JSONObject.toJSONString(request);
|
||||||
json.put("resCode",1);
|
// 检查并创建外置目录
|
||||||
json.put("resMsg", "执行脚本策略定时任务保存成功");
|
if (AdvancedAsyncDownloader.createSingleDirectoryIfNotExists(properties.getConfPath())) {
|
||||||
json.put("timestamp",timestamp);
|
// 将JSON字符串写入文件
|
||||||
// 判定客户端与服务端是否连接
|
AgentUtil.bufferedWriter(properties.getConfPath() + "/agentupdate.conf",
|
||||||
if (Objects.nonNull(sessionManager.getSessionById(GlobalConfig.CLIENT_ID))) {
|
new String[]{jsonContent});
|
||||||
Message message = Message.builder().clientId(GlobalConfig.CLIENT_ID).dataType(MsgEnum.执行脚本策略应答.getValue())
|
|
||||||
.data(json.toString()).build();
|
|
||||||
sessionManager.writeAndFlush(sessionManager.getSessionById(GlobalConfig.CLIENT_ID).getChannel(), message);
|
|
||||||
AssertLog.info("发送执行脚本策略应答={}",JSON.toJSONString(message));
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
JSONObject json = new JSONObject();
|
|
||||||
json.put("resCode",0);
|
|
||||||
json.put("resMsg", "执行脚本策略定时任务保存失败");
|
|
||||||
json.put("timestamp",timestamp);
|
|
||||||
// 判定客户端与服务端是否连接
|
|
||||||
if (Objects.nonNull(sessionManager.getSessionById(GlobalConfig.CLIENT_ID))) {
|
|
||||||
Message message = Message.builder().clientId(GlobalConfig.CLIENT_ID).dataType(MsgEnum.执行脚本策略应答.getValue())
|
|
||||||
.data(json.toString()).build();
|
|
||||||
sessionManager.writeAndFlush(sessionManager.getSessionById(GlobalConfig.CLIENT_ID).getChannel(), message);
|
|
||||||
AssertLog.info("发送执行脚本策略应答={}",JSON.toJSONString(message));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
processCommand(request, timestamp);
|
||||||
}else{
|
}else{
|
||||||
if(StringUtils.equals(dataType, MsgEnum.Agent版本更新应答.getValue())){
|
if(StringUtils.equals(dataType, MsgEnum.Agent版本更新应答.getValue())){
|
||||||
try {
|
try {
|
||||||
|
AssertLog.info("agent更新启动...暂停心跳和采集任务");
|
||||||
|
//更改全局变量
|
||||||
|
GlobalConfig.isCollect = false;
|
||||||
|
//调用采集任务
|
||||||
|
cancelCollect();
|
||||||
//设置检查回滚任务
|
//设置检查回滚任务
|
||||||
String SCRIPT_PATH = properties.getScriptPath()+"/rollback-tragent.sh";
|
String SCRIPT_PATH = properties.getScriptPath()+"/rollback-tragent.sh";
|
||||||
AgentDataUtil.chmod(SCRIPT_PATH,"775");
|
AgentDataUtil.chmod(SCRIPT_PATH,"775");
|
||||||
@@ -269,6 +259,39 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 辅助方法:持久化定时更新
|
||||||
|
* @param request
|
||||||
|
* @param timestamp
|
||||||
|
*/
|
||||||
|
public void processCommand(SpecificTimeRequest request, long timestamp){
|
||||||
|
try {
|
||||||
|
taskService.createSpecificTimeTask(request);
|
||||||
|
JSONObject json = new JSONObject();
|
||||||
|
json.put("resCode",1);
|
||||||
|
json.put("resMsg", "执行脚本策略定时任务保存成功");
|
||||||
|
json.put("timestamp",timestamp);
|
||||||
|
// 判定客户端与服务端是否连接
|
||||||
|
if (Objects.nonNull(sessionManager.getSessionById(GlobalConfig.CLIENT_ID))) {
|
||||||
|
Message message = Message.builder().clientId(GlobalConfig.CLIENT_ID).dataType(MsgEnum.执行脚本策略应答.getValue())
|
||||||
|
.data(json.toString()).build();
|
||||||
|
sessionManager.writeAndFlush(sessionManager.getSessionById(GlobalConfig.CLIENT_ID).getChannel(), message);
|
||||||
|
AssertLog.info("发送执行脚本策略应答={}",JSON.toJSONString(message));
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
JSONObject json = new JSONObject();
|
||||||
|
json.put("resCode",0);
|
||||||
|
json.put("resMsg", "执行脚本策略定时任务保存失败");
|
||||||
|
json.put("timestamp",timestamp);
|
||||||
|
// 判定客户端与服务端是否连接
|
||||||
|
if (Objects.nonNull(sessionManager.getSessionById(GlobalConfig.CLIENT_ID))) {
|
||||||
|
Message message = Message.builder().clientId(GlobalConfig.CLIENT_ID).dataType(MsgEnum.执行脚本策略应答.getValue())
|
||||||
|
.data(json.toString()).build();
|
||||||
|
sessionManager.writeAndFlush(sessionManager.getSessionById(GlobalConfig.CLIENT_ID).getChannel(), message);
|
||||||
|
AssertLog.info("发送执行脚本策略应答={}",JSON.toJSONString(message));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void cancelTask(String taskId) {
|
public void cancelTask(String taskId) {
|
||||||
@@ -290,6 +313,8 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
checkMonitor();
|
checkMonitor();
|
||||||
AssertLog.info("检测mtr探测策略配置");
|
AssertLog.info("检测mtr探测策略配置");
|
||||||
checkMtrDelect();
|
checkMtrDelect();
|
||||||
|
AssertLog.info("检测agent更新配置");
|
||||||
|
checkAgentUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -742,10 +767,6 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
String md5 = AgentUtil.getFileMD5(properties.getTempPath()+"/"+fileName);
|
String md5 = AgentUtil.getFileMD5(properties.getTempPath()+"/"+fileName);
|
||||||
if(StringUtils.isNotBlank(md5) && StringUtils.isNotBlank(versionUpdateEO.getFileMd5())
|
if(StringUtils.isNotBlank(md5) && StringUtils.isNotBlank(versionUpdateEO.getFileMd5())
|
||||||
&& StringUtils.equals(md5,versionUpdateEO.getFileMd5())){
|
&& StringUtils.equals(md5,versionUpdateEO.getFileMd5())){
|
||||||
//更改全局变量
|
|
||||||
GlobalConfig.isCollect = false;
|
|
||||||
//关闭采集任务
|
|
||||||
cancelCollect();
|
|
||||||
//所有文件下载完成,执行脚本命令
|
//所有文件下载完成,执行脚本命令
|
||||||
AssertLog.info("版本策略MD5验证成功");
|
AssertLog.info("版本策略MD5验证成功");
|
||||||
command(policy, GlobalConfig.CLIENT_ID,MsgEnum.Agent版本更新应答.getValue());
|
command(policy, GlobalConfig.CLIENT_ID,MsgEnum.Agent版本更新应答.getValue());
|
||||||
@@ -1563,4 +1584,28 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
public void caseTypeBySystem(String type, int interval, boolean collect){
|
public void caseTypeBySystem(String type, int interval, boolean collect){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public void checkAgentUpdate() {
|
||||||
|
File agentUpdateFile = new File(properties.getConfPath() + "/agentupdate.conf");
|
||||||
|
if (agentUpdateFile.exists()) {
|
||||||
|
Properties props = new Properties();
|
||||||
|
try (InputStream input = Files.newInputStream(agentUpdateFile.toPath())) {
|
||||||
|
props.load(input);
|
||||||
|
|
||||||
|
String updateMsg = props.getProperty("updateMsg");
|
||||||
|
if (StringUtils.isNotBlank(updateMsg)) {
|
||||||
|
long timestamp = System.currentTimeMillis();
|
||||||
|
timestamp = Math.round(timestamp / 1000.0);
|
||||||
|
SpecificTimeRequest request = JSON.parseObject(updateMsg, SpecificTimeRequest.class);
|
||||||
|
processCommand(request, timestamp);
|
||||||
|
AssertLog.info("应用启动时加载agent更新配置成功: {}", updateMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
AssertLog.error("应用启动时加载agent更新配置异常", e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
AssertLog.debug("agent更新配置文件不存在: {}", agentUpdateFile.getPath());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user