|
|
@@ -3,18 +3,23 @@ package cn.reghao.autodop.dmaster.machine.service;
|
|
|
import cn.reghao.autodop.dmaster.machine.db.crud.MachineHostCrudService;
|
|
|
import cn.reghao.autodop.dmaster.machine.db.crud.MachineInfoCrudService;
|
|
|
import cn.reghao.autodop.dmaster.machine.db.crud.MachineStatCrudService;
|
|
|
+import cn.reghao.autodop.dmaster.machine.entity.po.MachineHost;
|
|
|
import cn.reghao.autodop.dmaster.machine.entity.po.MachineStat;
|
|
|
import cn.reghao.autodop.dmaster.machine.entity.po.info.MachineInfo;
|
|
|
+import cn.reghao.autodop.dmaster.monitor.db.MonitorJobCrudService;
|
|
|
+import cn.reghao.autodop.dmaster.monitor.entity.JobId;
|
|
|
+import cn.reghao.autodop.dmaster.monitor.entity.JobType;
|
|
|
import cn.reghao.autodop.dmaster.monitor.entity.MonitorJob;
|
|
|
+import cn.reghao.autodop.dmaster.monitor.service.MonitorJobData;
|
|
|
import cn.reghao.autodop.dmaster.monitor.service.MonitorService;
|
|
|
-import cn.reghao.autodop.dmaster.monitor.service.job.MachineHeartbeatCheckJob;
|
|
|
+import cn.reghao.autodop.dmaster.notification.entity.NotifyGroup;
|
|
|
import cn.reghao.autodop.dmaster.sys.db.AppRuntimeLogCrudService;
|
|
|
import cn.reghao.autodop.dmaster.sys.entity.AppRuntimeLog;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.quartz.JobDataMap;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.util.List;
|
|
|
|
|
|
/**
|
|
|
* DagentOps 实现
|
|
|
@@ -25,22 +30,28 @@ import java.time.LocalDateTime;
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
public class DagentOpsService {
|
|
|
- private MachineHostCrudService hostCrudService;
|
|
|
private MachineInfoCrudService infoCrudService;
|
|
|
+ private MachineHostCrudService hostCrudService;
|
|
|
private MachineStatCrudService statCrudService;
|
|
|
private AppRuntimeLogCrudService logCrudService;
|
|
|
private MonitorService monitorService;
|
|
|
+ private MonitorJobData monitorJobData;
|
|
|
+ private MonitorJobCrudService jobCrudService;
|
|
|
|
|
|
- public DagentOpsService(MachineHostCrudService hostCrudService,
|
|
|
- MachineInfoCrudService infoCrudService,
|
|
|
+ public DagentOpsService(MachineInfoCrudService infoCrudService,
|
|
|
+ MachineHostCrudService hostCrudService,
|
|
|
MachineStatCrudService statCrudService,
|
|
|
AppRuntimeLogCrudService logCrudService,
|
|
|
- MonitorService monitorService) {
|
|
|
- this.hostCrudService = hostCrudService;
|
|
|
+ MonitorService monitorService,
|
|
|
+ MonitorJobData monitorJobData,
|
|
|
+ MonitorJobCrudService jobCrudService) {
|
|
|
this.infoCrudService = infoCrudService;
|
|
|
+ this.hostCrudService = hostCrudService;
|
|
|
this.statCrudService = statCrudService;
|
|
|
this.logCrudService = logCrudService;
|
|
|
this.monitorService = monitorService;
|
|
|
+ this.monitorJobData = monitorJobData;
|
|
|
+ this.jobCrudService = jobCrudService;
|
|
|
}
|
|
|
|
|
|
public void start(MachineInfo machineInfo) {
|
|
|
@@ -51,34 +62,40 @@ public class DagentOpsService {
|
|
|
machineInfo.setCreateTime(infoEntity.getCreateTime());
|
|
|
machineInfo.setUpdateTime(LocalDateTime.now());
|
|
|
infoCrudService.insertOrUpdate(machineInfo);
|
|
|
+
|
|
|
+ MachineHost machineHost = hostCrudService.selectByUk(infoEntity);
|
|
|
+ List<NotifyGroup> notifyGroups = machineHost.getNotifyGroups();
|
|
|
+ if (!notifyGroups.isEmpty()) {
|
|
|
+ String jobId = monitorJobData.machineMonitorJobId(machineId).getJobId();
|
|
|
+ MonitorJob monitorJob = jobCrudService.selectByUk(jobId);
|
|
|
+ try {
|
|
|
+ monitorService.startJob(monitorJob);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ log.error("任务启动失败 {}", e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
} else {
|
|
|
// 先存储数据,然后再添加监控任务,若任务添加失败则回滚
|
|
|
infoCrudService.insertOrUpdate(machineInfo);
|
|
|
+ addMonitorJob(machineId);
|
|
|
}
|
|
|
- addOrStartMonitorJob(machineId);
|
|
|
}
|
|
|
|
|
|
- private void addOrStartMonitorJob(String machineId) {
|
|
|
- String jobClassName = MachineHeartbeatCheckJob.class.getSimpleName();
|
|
|
- String jobId = String.format("%s-%s", machineId, jobClassName);
|
|
|
-
|
|
|
- JobDataMap jobDataMap = new JobDataMap();
|
|
|
-
|
|
|
- MonitorJob monitorJob = new MonitorJob(jobId, jobClassName);
|
|
|
- try {
|
|
|
- monitorService.addOrModifyJob(monitorJob, jobDataMap);
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("添加任务失败 {}", e.getMessage());
|
|
|
- }
|
|
|
+ private void addMonitorJob(String machineId) {
|
|
|
+ JobId jobId = monitorJobData.machineMonitorJobId(machineId);
|
|
|
+ MonitorJob monitorJob = new MonitorJob(jobId.getJobId(), jobId.getJobClassName(), JobType.machine.name());
|
|
|
+ jobCrudService.insertOrUpdate(monitorJob);
|
|
|
}
|
|
|
|
|
|
public void heartbeat(MachineStat machineStat) {
|
|
|
- // TODO 检测内存和磁盘使用量
|
|
|
statCrudService.insertOrUpdate(machineStat);
|
|
|
}
|
|
|
|
|
|
public void shutdown(MachineStat machineStat) {
|
|
|
- // TODO 停止心跳检测任务
|
|
|
+ String machineId = machineStat.getMachineId();
|
|
|
+ JobId jobId = monitorJobData.machineMonitorJobId(machineId);
|
|
|
+ monitorService.pauseJob(jobId.getJobId());
|
|
|
statCrudService.insertOrUpdate(machineStat);
|
|
|
}
|
|
|
|