|
|
@@ -1,5 +1,8 @@
|
|
|
package cn.reghao.devops.web.mgr.machine.service.impl;
|
|
|
|
|
|
+import cn.reghao.devops.common.msg.constant.NodeStatus;
|
|
|
+import cn.reghao.devops.common.msg.event.EvtAgentHeartbeat;
|
|
|
+import cn.reghao.devops.common.msg.event.EvtAgentStart;
|
|
|
import cn.reghao.devops.web.mgr.app.service.AppDeployService;
|
|
|
import cn.reghao.devops.web.mgr.machine.db.query.MachineQuery;
|
|
|
import cn.reghao.devops.web.mgr.machine.db.repository.MachineHostRepository;
|
|
|
@@ -8,6 +11,8 @@ import cn.reghao.devops.web.mgr.machine.model.po.MachineHost;
|
|
|
import cn.reghao.devops.web.mgr.machine.model.po.MachineInfo;
|
|
|
import cn.reghao.devops.web.mgr.machine.model.po.SshAuth;
|
|
|
import cn.reghao.devops.web.mgr.machine.service.MachineService;
|
|
|
+import cn.reghao.jutil.jdk.machine.data.detail.DiskDetail;
|
|
|
+import cn.reghao.jutil.jdk.machine.data.detail.MemoryDetail;
|
|
|
import cn.reghao.jutil.jdk.result.Result;
|
|
|
import cn.reghao.jutil.jdk.result.ResultStatus;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
@@ -15,6 +20,8 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.List;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @author reghao
|
|
|
@@ -37,73 +44,114 @@ public class MachineServiceImpl implements MachineService {
|
|
|
this.machineQuery = machineQuery;
|
|
|
}
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
- public void setEnv(String machineId, String env) {
|
|
|
- MachineHost machineHost = machineHostRepository.findByMachineId(machineId);
|
|
|
+ public void addOrUpdateMachine(EvtAgentStart evtAgentStart) {
|
|
|
+ String machineId = evtAgentStart.getMachineId();
|
|
|
+ long timestamp = evtAgentStart.getTimestamp();
|
|
|
+
|
|
|
+ MachineInfo machineInfo = new MachineInfo(evtAgentStart);
|
|
|
+ MachineInfo infoEntity = machineQuery.getMachineInfo(machineId);
|
|
|
+ if (infoEntity == null) {
|
|
|
+ infoEntity = machineInfoRepository.save(machineInfo);
|
|
|
+ machineHostRepository.save(new MachineHost(infoEntity));
|
|
|
+ } else {
|
|
|
+ machineInfo.setId(infoEntity.getId());
|
|
|
+ machineInfo.setCreateTime(infoEntity.getCreateTime());
|
|
|
+ machineInfoRepository.save(machineInfo);
|
|
|
+
|
|
|
+ MachineHost hostEntity = machineQuery.getMachineHost(machineId);
|
|
|
+ String machineIpv4 = infoEntity.getMachineIpv4();
|
|
|
+ if (!hostEntity.getMachineIpv4().equals(machineIpv4)) {
|
|
|
+ hostEntity.setMachineIpv4(machineIpv4);
|
|
|
+ machineHostRepository.save(hostEntity);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void updateMachine(EvtAgentHeartbeat evtAgentHeartbeat) {
|
|
|
+ // TODO 根据 EvtAgentHeartbeat 中的信息检查系统负载,CPU,内存,磁盘等使用情况(暂未实现)
|
|
|
+ String machineId = evtAgentHeartbeat.getMachineId();
|
|
|
+ long timestamp = evtAgentHeartbeat.getTimestamp();
|
|
|
+
|
|
|
+ MemoryDetail memoryDetail = evtAgentHeartbeat.getMemoryDetail();
|
|
|
+ List<DiskDetail> diskDetails = evtAgentHeartbeat.getDiskDetails();
|
|
|
+ MachineInfo machineInfo = machineQuery.getMachineInfo(machineId);
|
|
|
+ if (machineInfo != null) {
|
|
|
+ String machineIpv4 = machineInfo.getMachineIpv4();
|
|
|
+ //log.info("heartbeat from {}", machineIpv4);
|
|
|
+ } else {
|
|
|
+ //log.info("heartbeat from {}", machineId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void setMachineEnv(String machineId, String env) {
|
|
|
+ MachineHost machineHost = machineQuery.getMachineHost(machineId);
|
|
|
machineHost.setEnv(env);
|
|
|
machineHostRepository.save(machineHost);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void setSshAuth(String machineId, SshAuth sshAuth) {
|
|
|
+ public void setMachineSshAuth(String machineId, SshAuth sshAuth) {
|
|
|
// TODO 检测主机可达, 端口可达, 协议正确
|
|
|
String ipv4 = sshAuth.getIpv4();
|
|
|
int port = sshAuth.getPort();
|
|
|
|
|
|
- MachineHost machineHost = machineHostRepository.findByMachineId(machineId);
|
|
|
+ MachineHost machineHost = machineQuery.getMachineHost(machineId);
|
|
|
machineHost.setSshAuth(sshAuth);
|
|
|
machineHostRepository.save(machineHost);
|
|
|
}
|
|
|
|
|
|
- @Transactional
|
|
|
- public Result delete(String machineId) {
|
|
|
- if (machineQuery.isAgentOnline(machineId)) {
|
|
|
- return Result.result(ResultStatus.FAIL, "机器当前在线, 不能删除");
|
|
|
+ @Override
|
|
|
+ public Result setMachinesDeprecate(List<String> machineIds) {
|
|
|
+ List<MachineInfo> list = machineQuery.getMachineInfos(machineIds);
|
|
|
+ // TODO 这里并没有调用 save, 但仍会持久化
|
|
|
+ List<MachineInfo> list1 = list.stream()
|
|
|
+ .filter(machineInfo -> !Objects.equals(machineInfo.getStat(), NodeStatus.Online.getCode()))
|
|
|
+ .peek(machineInfo -> machineInfo.setStat(NodeStatus.Deprecated.getCode()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (!list1.isEmpty()) {
|
|
|
+ machineInfoRepository.saveAll(list1);
|
|
|
}
|
|
|
|
|
|
- machineHostRepository.deleteByMachineId(machineId);
|
|
|
- machineInfoRepository.deleteByMachineId(machineId);
|
|
|
return Result.result(ResultStatus.SUCCESS);
|
|
|
}
|
|
|
|
|
|
- private void deleteMachine(String machineId) {
|
|
|
- MachineHost machineHost = machineHostRepository.findByMachineId(machineId);
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Result deleteMachine(String machineId) {
|
|
|
+ MachineHost machineHost = machineQuery.getMachineHost(machineId);
|
|
|
+ if (machineHost == null) {
|
|
|
+ return Result.result(ResultStatus.SUCCESS);
|
|
|
+ }
|
|
|
+
|
|
|
+ MachineInfo machineInfo = machineHost.getMachineInfo();
|
|
|
+ if (!machineInfo.getStat().equals(NodeStatus.Deprecated.getCode())) {
|
|
|
+ return Result.result(ResultStatus.FAIL, "只能删除 Deprecated 状态的机器");
|
|
|
+ }
|
|
|
|
|
|
- // AppDeploying -> AppDeployConfig -> MachineInfo
|
|
|
- // AppDeploying -> AppDeployConfig -> DeployLog
|
|
|
appDeployService.deleteByMachineHost(machineHost);
|
|
|
machineHostRepository.deleteByMachineId(machineId);
|
|
|
machineInfoRepository.deleteByMachineId(machineId);
|
|
|
- }
|
|
|
-
|
|
|
- @Transactional
|
|
|
- @Override
|
|
|
- public Result updateMachineStat(List<String> machineIds) {
|
|
|
- for (String machineId : machineIds) {
|
|
|
- MachineInfo machineInfo = machineInfoRepository.findByMachineId(machineId);
|
|
|
- if (machineInfo != null && machineInfo.getStat() != 1) {
|
|
|
- machineInfoRepository.updateMachineInfoByMachineId(machineId, 4);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
return Result.result(ResultStatus.SUCCESS);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void agentShutdown(String machineId) {
|
|
|
- MachineInfo machineInfo = machineInfoRepository.findByMachineId(machineId);
|
|
|
+ MachineInfo machineInfo = machineQuery.getMachineInfo(machineId);
|
|
|
if (machineInfo != null) {
|
|
|
- machineInfo.setStat(2);
|
|
|
+ machineInfo.setStat(NodeStatus.Offline.getCode());
|
|
|
machineInfoRepository.save(machineInfo);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void shutdown() {
|
|
|
- List<MachineInfo> list = machineInfoRepository.findByStat(1);
|
|
|
- list.forEach(machineInfo -> {
|
|
|
- machineInfo.setStat(2);
|
|
|
- machineInfoRepository.save(machineInfo);
|
|
|
- });
|
|
|
+ List<MachineInfo> list = machineQuery.getMachineInfos(NodeStatus.Online.getCode()).stream()
|
|
|
+ .peek(machineInfo -> machineInfo.setStat(NodeStatus.Offline.getCode()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ machineInfoRepository.saveAll(list);
|
|
|
}
|
|
|
}
|