|
|
|
@ -25,6 +25,9 @@ import java.util.Date;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
import static com.docus.server.common.MsgConstants.COLLECTOR_RESTART;
|
|
|
|
|
import static com.docus.server.common.MsgConstants.HAS_COLLECTOR_COUNT;
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
@AllArgsConstructor
|
|
|
|
|
@NoArgsConstructor
|
|
|
|
@ -41,22 +44,68 @@ public class ClientHandler extends SimpleChannelInboundHandler<CommMsg<Serializa
|
|
|
|
|
|
|
|
|
|
log.info("======== 【终端客户端-收到调度器消息】, 消息时间={}, 消息类型={}, 消息内容={}", messageTime, messageType, messageContent + " ======== ");
|
|
|
|
|
|
|
|
|
|
if (messageType.equals(MsgConstants.TERMINATOR_RESTART)) {
|
|
|
|
|
log.info("【终端客户端-收到调度器消息】接受到终端重启命令,内容={}", messageContent);
|
|
|
|
|
switch (messageType) {
|
|
|
|
|
case MsgConstants.TERMINATOR_RESTART:
|
|
|
|
|
terminatorRestart(messageContent);
|
|
|
|
|
break;
|
|
|
|
|
case MsgConstants.COLLECTOR_RESTART:
|
|
|
|
|
collectorRestart(messageContent);
|
|
|
|
|
break;
|
|
|
|
|
case MsgConstants.VIRTUAL_RESTART:
|
|
|
|
|
virtualRestart(messageContent);
|
|
|
|
|
break;
|
|
|
|
|
case MsgConstants.UPDATE_COLLECTOR_FILE:
|
|
|
|
|
updateCollectorFile(messageContent);
|
|
|
|
|
break;
|
|
|
|
|
case MsgConstants.UPDATE_COLLECTOR_CONFIG:
|
|
|
|
|
updateCollectorConfig(messageContent);
|
|
|
|
|
break;
|
|
|
|
|
case MsgConstants.SCH_DISTRIBUTE_TASKS:
|
|
|
|
|
schDistributeTasks(commMsg, messageContent);
|
|
|
|
|
break;
|
|
|
|
|
case MsgConstants.HAS_VALID_COLLECTOR:
|
|
|
|
|
hasValidCollector(messageContent);
|
|
|
|
|
break;
|
|
|
|
|
case MsgConstants.HAS_COLLECTOR_COUNT:
|
|
|
|
|
hasCollectorCount(context, messageContent);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else if (messageType.equals(MsgConstants.COLLECTOR_RESTART)) {
|
|
|
|
|
log.info("【终端客户端-收到调度器消息】收到采集器重启命令,内容={}", messageContent);
|
|
|
|
|
private void hasCollectorCount(ChannelHandlerContext context, String messageContent) {
|
|
|
|
|
log.info("【终端客户端-收到调度器消息】收到获取采集器数量命令,内容={}", messageContent);
|
|
|
|
|
|
|
|
|
|
} else if (messageType.equals(MsgConstants.VIRTUAL_RESTART)) {
|
|
|
|
|
log.info("【终端客户端-收到调度器消息】收到虚拟机重启命令,内容={}", messageContent);
|
|
|
|
|
CollectorChannelCacheMap collectorChannelCacheMap = nettyClient.getCollectorChannelCacheMap();
|
|
|
|
|
Map<String, Channel> collectorMap = collectorChannelCacheMap.getAll();
|
|
|
|
|
|
|
|
|
|
} else if (messageType.equals(MsgConstants.UPDATE_COLLECTOR_FILE)) {
|
|
|
|
|
log.info("【终端客户端-收到调度器消息】收到更新采集器文件命令,内容={}", messageContent);
|
|
|
|
|
String packageValue = nettyClient.getRedisMsg();
|
|
|
|
|
List<LoadSchCollectorVO> redisLoadSchCollectors = JSON.fromJSONWithGeneric(packageValue, new TypeReference<List<LoadSchCollectorVO>>() {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
} else if (messageType.equals(MsgConstants.UPDATE_COLLECTOR_CONFIG)) {
|
|
|
|
|
log.info("【终端客户端-收到调度器消息】收到更新采集器配置命令,内容={}", messageContent);
|
|
|
|
|
List<LoadSchCollectorVO> objects = Lists.newArrayList();
|
|
|
|
|
|
|
|
|
|
for (LoadSchCollectorVO loadSchCollectorVO : redisLoadSchCollectors) {
|
|
|
|
|
if (collectorMap.containsKey(String.valueOf(loadSchCollectorVO.getCollectorId()))) {
|
|
|
|
|
objects.add(loadSchCollectorVO);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CommMsg<Serializable> collectorCountMsg = CommMsg.builder()
|
|
|
|
|
.messageType(HAS_COLLECTOR_COUNT)
|
|
|
|
|
.messageTime(DateUtil.formatDateTime(new Date()))
|
|
|
|
|
.content(JSON.toJSON(objects))
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
context.channel().writeAndFlush(collectorCountMsg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void hasValidCollector(String messageContent) {
|
|
|
|
|
log.info("【终端客户端-收到调度器消息】是否有可用类型的采集器命令,内容={}", messageContent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else if (messageType.equals(MsgConstants.SCH_DISTRIBUTE_TASKS)) {
|
|
|
|
|
private void schDistributeTasks(CommMsg commMsg, String messageContent) throws Exception {
|
|
|
|
|
log.info("【终端客户端-收到调度器消息】收到采集调度器下发任务命令,内容={}", messageContent);
|
|
|
|
|
|
|
|
|
|
//下发任务: 判断这个任务采集器类型在指定目录是否存在、
|
|
|
|
@ -98,45 +147,58 @@ public class ClientHandler extends SimpleChannelInboundHandler<CommMsg<Serializa
|
|
|
|
|
collectorChannelCacheMap.writeAndFlush(collectorId, commMsg);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
Thread.sleep(5000);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void updateCollectorConfig(String messageContent) {
|
|
|
|
|
log.info("【终端客户端-收到调度器消息】收到更新采集器配置命令,内容={}", messageContent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else if (messageType.equals(MsgConstants.HAS_VALID_COLLECTOR)) {
|
|
|
|
|
log.info("【终端客户端-收到调度器消息】是否有可用类型的采集器命令,内容={}", messageContent);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//下发任务: 判断这个任务采集器类型在指定目录是否存在、
|
|
|
|
|
//如果不存在:下拉该采集器类型最新的版本更新包到指定的部署路径,并且启动该exe采集器,将任务tcp给对应采集器
|
|
|
|
|
//如果存在:
|
|
|
|
|
} else if (messageType.equals(MsgConstants.HAS_COLLECTOR_COUNT)) {
|
|
|
|
|
log.info("【终端客户端-收到调度器消息】收到获取采集器数量命令,内容={}", messageContent);
|
|
|
|
|
private void updateCollectorFile(String messageContent) {
|
|
|
|
|
log.info("【终端客户端-收到调度器消息】收到更新采集器文件命令,内容={}", messageContent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CollectorChannelCacheMap collectorChannelCacheMap = nettyClient.getCollectorChannelCacheMap();
|
|
|
|
|
Map<String, Channel> collectorMap = collectorChannelCacheMap.getAll();
|
|
|
|
|
private void virtualRestart(String messageContent) {
|
|
|
|
|
log.info("【终端客户端-收到调度器消息】收到虚拟机重启命令,内容={}", messageContent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void collectorRestart(String messageContent) {
|
|
|
|
|
log.info("【终端客户端-收到调度器消息】收到采集器重启命令,内容={}", messageContent);
|
|
|
|
|
String packageValue = nettyClient.getRedisMsg();
|
|
|
|
|
String saveCollectorPackagePath = nettyClient.getSaveCollectorPackagePath();
|
|
|
|
|
List<LoadSchCollectorVO> redisLoadSchCollectors = JSON.fromJSONWithGeneric(packageValue, new TypeReference<List<LoadSchCollectorVO>>() {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
List<LoadSchCollectorVO> objects = Lists.newArrayList();
|
|
|
|
|
Map<Long, LoadSchCollectorVO> collectorVoMap = ListUtils.toMap(redisLoadSchCollectors, LoadSchCollectorVO::getCollectorId);
|
|
|
|
|
Long collectorId = Long.valueOf(messageContent);
|
|
|
|
|
|
|
|
|
|
for (LoadSchCollectorVO loadSchCollectorVO : redisLoadSchCollectors) {
|
|
|
|
|
if (collectorMap.containsKey(String.valueOf(loadSchCollectorVO.getCollectorId()))) {
|
|
|
|
|
objects.add(loadSchCollectorVO);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (collectorVoMap.containsKey(collectorId)) {
|
|
|
|
|
LoadSchCollectorVO loadSchCollectorVO = collectorVoMap.get(collectorId);
|
|
|
|
|
String processName = loadSchCollectorVO.getProcessName();
|
|
|
|
|
|
|
|
|
|
CommMsg<Serializable> collectorCountMsg = CommMsg.builder()
|
|
|
|
|
.messageType(MsgConstants.HAS_COLLECTOR_COUNT)
|
|
|
|
|
if (Func.isNotBlank(processName)) {
|
|
|
|
|
boolean isExistProcess = StartUpExeUtils.checkProcessOnly(processName);
|
|
|
|
|
//存在指定采集器id进程
|
|
|
|
|
if (isExistProcess) {
|
|
|
|
|
boolean result = StartUpExeUtils.startUpExe(saveCollectorPackagePath + collectorId + "\\collector\\" + processName, processName);
|
|
|
|
|
|
|
|
|
|
CommMsg<Serializable> collectorRestartMsg = CommMsg.builder()
|
|
|
|
|
.content(result)
|
|
|
|
|
.messageTime(DateUtil.formatDateTime(new Date()))
|
|
|
|
|
.content(JSON.toJSON(objects))
|
|
|
|
|
.messageType(COLLECTOR_RESTART)
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
context.channel().writeAndFlush(collectorCountMsg);
|
|
|
|
|
nettyClient.getCollectorChannelCacheMap().writeAndFlush(messageContent, collectorRestartMsg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void terminatorRestart(String messageContent) {
|
|
|
|
|
log.info("【终端客户端-收到调度器消息】接受到终端重启命令,内容={}", messageContent);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|