|
@@ -1,14 +1,26 @@
|
|
|
package cn.reghao.autodop.dmaster.mqttsub.processor;
|
|
package cn.reghao.autodop.dmaster.mqttsub.processor;
|
|
|
|
|
|
|
|
|
|
+import cn.reghao.autodop.common.dagent.machine.api.data.MachineHeartbeat;
|
|
|
|
|
+import cn.reghao.autodop.common.dagent.machine.hardware.disk.DiskInfo;
|
|
|
import cn.reghao.autodop.common.log.RunningLog;
|
|
import cn.reghao.autodop.common.log.RunningLog;
|
|
|
import cn.reghao.autodop.common.message.ops.DagentOps;
|
|
import cn.reghao.autodop.common.message.ops.DagentOps;
|
|
|
|
|
+import cn.reghao.autodop.common.utils.ByteConverter;
|
|
|
|
|
+import cn.reghao.autodop.common.utils.ByteType;
|
|
|
|
|
+import cn.reghao.autodop.common.utils.PercentCalculator;
|
|
|
import cn.reghao.autodop.common.utils.serializer.JsonConverter;
|
|
import cn.reghao.autodop.common.utils.serializer.JsonConverter;
|
|
|
import cn.reghao.autodop.common.message.ops.OpsProcessor;
|
|
import cn.reghao.autodop.common.message.ops.OpsProcessor;
|
|
|
|
|
+import cn.reghao.autodop.dmaster.machine.db.MachineCrudService;
|
|
|
|
|
+import cn.reghao.autodop.dmaster.machine.entity.MachineInfo;
|
|
|
|
|
+import cn.reghao.autodop.dmaster.machine.entity.MachineStatus;
|
|
|
|
|
+import cn.reghao.autodop.dmaster.machine.repository.MachineStatusRepository;
|
|
|
import cn.reghao.autodop.dmaster.sys.entity.AppRunningLog;
|
|
import cn.reghao.autodop.dmaster.sys.entity.AppRunningLog;
|
|
|
import cn.reghao.autodop.dmaster.sys.repository.AppRunningLogRepository;
|
|
import cn.reghao.autodop.dmaster.sys.repository.AppRunningLogRepository;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 分发处理 Dagent 相关的消息
|
|
* 分发处理 Dagent 相关的消息
|
|
|
*
|
|
*
|
|
@@ -18,26 +30,83 @@ import org.springframework.stereotype.Component;
|
|
|
@Slf4j
|
|
@Slf4j
|
|
|
@Component
|
|
@Component
|
|
|
public class DagentOpsProcessor implements OpsProcessor {
|
|
public class DagentOpsProcessor implements OpsProcessor {
|
|
|
|
|
+ private ByteConverter convert = new ByteConverter();
|
|
|
|
|
+ private MachineCrudService machineCrudService;
|
|
|
|
|
+ private MachineStatusRepository statusRepository;
|
|
|
private AppRunningLogRepository runtimeLogRepository;
|
|
private AppRunningLogRepository runtimeLogRepository;
|
|
|
|
|
|
|
|
- public DagentOpsProcessor(AppRunningLogRepository runtimeLogRepository) {
|
|
|
|
|
|
|
+ public DagentOpsProcessor(MachineCrudService machineCrudService,
|
|
|
|
|
+ MachineStatusRepository statusRepository,
|
|
|
|
|
+ AppRunningLogRepository runtimeLogRepository) {
|
|
|
|
|
+ this.machineCrudService = machineCrudService;
|
|
|
|
|
+ this.statusRepository = statusRepository;
|
|
|
this.runtimeLogRepository = runtimeLogRepository;
|
|
this.runtimeLogRepository = runtimeLogRepository;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public void process(String ops, String payload) {
|
|
public void process(String ops, String payload) {
|
|
|
switch (DagentOps.valueOf(ops)) {
|
|
switch (DagentOps.valueOf(ops)) {
|
|
|
|
|
+ case dagentStart:
|
|
|
|
|
+ processDagentStart(payload);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case dagentHeartbeat:
|
|
|
|
|
+ processDagentHeartbeat(payload);
|
|
|
|
|
+ break;
|
|
|
case dagentLog:
|
|
case dagentLog:
|
|
|
processDagentLog(payload);
|
|
processDagentLog(payload);
|
|
|
break;
|
|
break;
|
|
|
|
|
+ case dagnetShutdown:
|
|
|
|
|
+ processDagentShutdown(payload);
|
|
|
|
|
+ break;
|
|
|
default:
|
|
default:
|
|
|
log.error("DagentOps 中没有相应类型...");
|
|
log.error("DagentOps 中没有相应类型...");
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private void processDagentStart(String payload) {
|
|
|
|
|
+ MachineInfo machineInfo = JsonConverter.jsonToObject(payload, MachineInfo.class);
|
|
|
|
|
+ machineCrudService.insertOrUpdate(machineInfo);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void processDagentHeartbeat(String payload) {
|
|
|
|
|
+ MachineHeartbeat heartbeat = JsonConverter.jsonToObject(payload, MachineHeartbeat.class);
|
|
|
|
|
+ String machineIpv4 = heartbeat.getMachineIpv4();
|
|
|
|
|
+ String diskAvail = calculateDiskUsage(machineIpv4, heartbeat.getDiskInfo());
|
|
|
|
|
+ MachineStatus status = statusRepository.findByMachineId(heartbeat.getMachineId());
|
|
|
|
|
+ if (status != null) {
|
|
|
|
|
+ status.setMachineIpv4(machineIpv4);
|
|
|
|
|
+ status.setDiskAvail(diskAvail);
|
|
|
|
|
+ status.setLastCheck(LocalDateTime.now());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ status = new MachineStatus(heartbeat, diskAvail);
|
|
|
|
|
+ }
|
|
|
|
|
+ statusRepository.save(status);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private String calculateDiskUsage(String machineIpv4, List<DiskInfo> diskInfos) {
|
|
|
|
|
+ long size = 0, avail = 0;
|
|
|
|
|
+ for (DiskInfo diskInfo : diskInfos) {
|
|
|
|
|
+ size += diskInfo.getSize();
|
|
|
|
|
+ avail += diskInfo.getAvail();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ String availSize = convert.convert(ByteType.Bytes, ByteType.MiB, avail) + ByteType.MiB.name();
|
|
|
|
|
+ double value = PercentCalculator.percentValue(avail, size);
|
|
|
|
|
+ String percent = PercentCalculator.percent(value);
|
|
|
|
|
+ double minimalPercent = 0.20;
|
|
|
|
|
+ if (value < minimalPercent) {
|
|
|
|
|
+ // TODO 发出告警通知
|
|
|
|
|
+ log.info("{} 上可用的磁盘空间仅占总磁盘空间的 {},共计 {}", machineIpv4, percent, availSize);
|
|
|
|
|
+ }
|
|
|
|
|
+ return availSize;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private void processDagentLog(String payload) {
|
|
private void processDagentLog(String payload) {
|
|
|
RunningLog runningLog = JsonConverter.jsonToObject(payload, RunningLog.class);
|
|
RunningLog runningLog = JsonConverter.jsonToObject(payload, RunningLog.class);
|
|
|
runtimeLogRepository.save(AppRunningLog.from(runningLog));
|
|
runtimeLogRepository.save(AppRunningLog.from(runningLog));
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ private void processDagentShutdown(String payload) {
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|