Преглед изворни кода

正在处理机器和监控

reghao пре 5 година
родитељ
комит
e528ae0cb5

+ 44 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/AppOpsService.java

@@ -0,0 +1,44 @@
+package cn.reghao.autodop.dmaster.app.service;
+
+import cn.reghao.autodop.common.http.DefaultWebRequest;
+import cn.reghao.autodop.common.http.WebRequest;
+import cn.reghao.autodop.dmaster.app.repository.AppRunningRepository;
+import cn.reghao.autodop.dmaster.monitor.service.MonitorService;
+import cn.reghao.autodop.dmaster.monitor.service.job.app.AppHealthCheckJob;
+import cn.reghao.autodop.dmaster.notification.service.NotifyService;
+import org.quartz.JobDataMap;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author reghao
+ * @date 2021-07-01 20:15:57
+ */
+@Service
+public class AppOpsService {
+    private MonitorService monitorService;
+    private AppRunningRepository runningRepository;
+    private NotifyService notifyService;
+    private WebRequest webRequest;
+
+    public AppOpsService(MonitorService monitorService,
+                         AppRunningRepository runningRepository,
+                         NotifyService notifyService) {
+        this.monitorService = monitorService;
+        this.runningRepository = runningRepository;
+        this.notifyService = notifyService;
+        this.webRequest = new DefaultWebRequest();
+    }
+
+    public void addMonitor(String appId, String machineId) {
+        String jobClassName = AppHealthCheckJob.class.getSimpleName();
+        String jobId = String.format("%s-%s-%s", appId, machineId, jobClassName);
+
+        JobDataMap jobDataMap = new JobDataMap();
+        jobDataMap.put("notifyService", notifyService);
+        jobDataMap.put("notifyGroups", "");
+        jobDataMap.put("webRequest", webRequest);
+        jobDataMap.put("appId", appId);
+        jobDataMap.put("machineId", machineId);
+        jobDataMap.put("runningRepository", runningRepository);
+    }
+}

+ 1 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/db/crud/MachineStatCrudService.java

@@ -1,7 +1,6 @@
 package cn.reghao.autodop.dmaster.machine.db.crud;
 
 import cn.reghao.autodop.dmaster.machine.entity.stat.MachineStat;
-import cn.reghao.autodop.dmaster.machine.entity.stat.StatusType;
 import cn.reghao.autodop.dmaster.machine.repository.MachineStatRepository;
 import com.github.benmanes.caffeine.cache.Cache;
 import org.springframework.stereotype.Service;
@@ -19,8 +18,7 @@ public class MachineStatCrudService {
     private Cache<String, Object> cache;
     private MachineStatRepository statRepository;
 
-    public MachineStatCrudService(Cache<String, Object> cache,
-                                  MachineStatRepository statRepository) {
+    public MachineStatCrudService(Cache<String, Object> cache, MachineStatRepository statRepository) {
         this.cache = cache;
         this.statRepository = statRepository;
     }

+ 81 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/service/DagentOpsService.java

@@ -0,0 +1,81 @@
+package cn.reghao.autodop.dmaster.machine.service;
+
+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.info.MachineInfo;
+import cn.reghao.autodop.dmaster.machine.entity.stat.MachineStat;
+import cn.reghao.autodop.dmaster.machine.entity.stat.StatusType;
+import cn.reghao.autodop.dmaster.monitor.service.MonitorService;
+import cn.reghao.autodop.dmaster.monitor.service.job.machine.MachineHeartbeatCheckJob;
+import cn.reghao.autodop.dmaster.sys.db.AppRuntimeLogCrudService;
+import cn.reghao.autodop.dmaster.sys.entity.AppRuntimeLog;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author reghao
+ * @date 2021-07-01 19:11:54
+ */
+@Service
+public class DagentOpsService {
+    private MachineInfoCrudService infoCrudService;
+    private MachineStatCrudService statCrudService;
+    private AppRuntimeLogCrudService logCrudService;
+    private MonitorService monitorService;
+
+    public DagentOpsService(MachineInfoCrudService infoCrudService,
+                            MachineStatCrudService statCrudService,
+                            AppRuntimeLogCrudService logCrudService,
+                            MonitorService monitorService) {
+        this.infoCrudService = infoCrudService;
+        this.statCrudService = statCrudService;
+        this.logCrudService = logCrudService;
+        this.monitorService = monitorService;
+    }
+
+    public void start(MachineInfo machineInfo) {
+        String machineId = machineInfo.getMachineId();
+        MachineStat stat = statCrudService.selectByUk(machineId);
+        if (stat == null) {
+            stat = new MachineStat(machineInfo.getMachineId());
+            statCrudService.insert(stat);
+        } else {
+            stat.setStatus(StatusType.UP.name());
+            statCrudService.update(stat);
+        }
+
+        MachineInfo infoEntity = infoCrudService.selectByUk(machineId);
+        if (infoEntity == null) {
+            infoCrudService.insertOrUpdate(machineInfo);
+        } else {
+
+        }
+
+        // TODO 开启心跳检测任务
+        String jobClassName = MachineHeartbeatCheckJob.class.getSimpleName();
+        String jobId = String.format("%s-%s", machineId, jobClassName);
+        //monitorService.addOrModifyJob();
+    }
+
+    public void heartbeat(MachineStat machineStat) {
+        MachineStat stat = statCrudService.selectByUk(machineStat.getMachineId());
+        if (stat != null) {
+            if (stat.getStatus().equals(StatusType.DOWN.name())) {
+                stat.setStatus(StatusType.UP.name());
+            }
+            statCrudService.update(stat);
+        }
+    }
+
+    public void shutdown(String machineId) {
+        MachineStat machineStat = statCrudService.selectByUk(machineId);
+        if (machineStat != null) {
+            // TODO 停止心跳检测任务
+            machineStat.setStatus(StatusType.DOWN.name());
+            statCrudService.update(machineStat);
+        }
+    }
+
+    public void log(AppRuntimeLog runtimeLog) {
+        logCrudService.insertOrUpdate(runtimeLog);
+    }
+}

+ 31 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/db/MonitorJobCrudService.java

@@ -0,0 +1,31 @@
+package cn.reghao.autodop.dmaster.monitor.db;
+
+import cn.reghao.autodop.dmaster.monitor.entity.MonitorJob;
+import cn.reghao.autodop.dmaster.monitor.repository.MonitorJobRepository;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author reghao
+ * @date 2021-06-15 16:29:18
+ */
+@Service
+public class MonitorJobCrudService {
+    private MonitorJobRepository monitorJobRepository;
+
+    public MonitorJobCrudService(MonitorJobRepository monitorJobRepository) {
+        this.monitorJobRepository = monitorJobRepository;
+    }
+
+    public void insert(MonitorJob monitorJob) {
+    }
+
+    public void update(MonitorJob monitorJob) {
+    }
+
+    public void delete(MonitorJob monitorJob) {
+    }
+
+    public MonitorJob selectByUk(String jobId) {
+        return monitorJobRepository.findByJobId(jobId);
+    }
+}

+ 10 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/MonitorScheduler.java

@@ -3,6 +3,7 @@ package cn.reghao.autodop.dmaster.monitor.service;
 import cn.reghao.autodop.dmaster.monitor.entity.MonitorJob;
 import cn.reghao.autodop.dmaster.monitor.repository.MonitorJobRepository;
 import cn.reghao.autodop.dmaster.notification.entity.NotifyGroup;
+import cn.reghao.autodop.dmaster.utils.clazz.PackageScanner;
 import lombok.extern.slf4j.Slf4j;
 import org.quartz.*;
 import org.quartz.impl.StdSchedulerFactory;
@@ -23,10 +24,12 @@ import java.util.List;
 public class MonitorScheduler {
     private Scheduler scheduler;
     private MonitorJobRepository monitorJobRepository;
+    private PackageScanner packageScanner;
 
     public MonitorScheduler(MonitorJobRepository monitorJobRepository) throws SchedulerException {
         this.scheduler = StdSchedulerFactory.getDefaultScheduler();
         this.monitorJobRepository = monitorJobRepository;
+        this.packageScanner = new PackageScanner();
     }
 
     /**
@@ -52,8 +55,13 @@ public class MonitorScheduler {
         JobDataMap jobDataMap = jobDetail.getJobDataMap();
     }
 
-    public void addJob(String jobId, String cronExp, Class<? extends Job> clazz, JobDataMap jobDataMap)
-            throws SchedulerException {
+    public void addJob(MonitorJob monitorJob, JobDataMap jobDataMap) throws IOException, SchedulerException {
+        String jobId = monitorJob.getJobId();
+        String jobClassName = monitorJob.getJobClassName();
+        String cronExp = monitorJob.getCronExp();
+        String jobPkg = "cn.reghao.autodop.dmaster.monitor.service.job";
+        Class clazz = packageScanner.findClassBySimpleName(jobClassName, jobPkg);
+
         JobDetail jobDetail = JobBuilder.newJob(clazz)
                 .withIdentity(jobId)
                 // job 需要使用的数据

+ 1 - 61
dmaster/src/main/java/cn/reghao/autodop/dmaster/monitor/service/MonitorServiceImpl.java

@@ -1,21 +1,12 @@
 package cn.reghao.autodop.dmaster.monitor.service;
 
-import cn.reghao.autodop.common.http.DefaultWebRequest;
-import cn.reghao.autodop.common.http.WebRequest;
-import cn.reghao.autodop.dmaster.app.repository.AppRunningRepository;
-import cn.reghao.autodop.dmaster.machine.db.crud.MachineStatCrudService;
 import cn.reghao.autodop.dmaster.monitor.entity.MonitorJob;
 import cn.reghao.autodop.dmaster.monitor.repository.MonitorJobRepository;
 import cn.reghao.autodop.dmaster.notification.entity.NotifyGroup;
-import cn.reghao.autodop.dmaster.notification.service.NotifyService;
-import cn.reghao.autodop.dmaster.utils.clazz.PackageScanner;
 import lombok.extern.slf4j.Slf4j;
-import org.quartz.JobDataMap;
 import org.quartz.SchedulerException;
 import org.springframework.stereotype.Service;
 
-import java.io.IOException;
-
 /**
  * @author reghao
  * @date 2020-10-22 17:51:56
@@ -25,61 +16,10 @@ import java.io.IOException;
 public class MonitorServiceImpl implements MonitorService {
     private MonitorScheduler monitorScheduler;
     private MonitorJobRepository monitorJobRepository;
-    private MachineStatCrudService statCrudService;
-    private AppRunningRepository runningRepository;
-    private NotifyService notifyService;
-    private PackageScanner packageScanner;
-    private WebRequest webRequest;
 
-    public MonitorServiceImpl(MonitorScheduler monitorScheduler,
-                              MonitorJobRepository monitorJobRepository,
-                              MachineStatCrudService statCrudService,
-                              AppRunningRepository runningRepository,
-                              NotifyService notifyService) {
+    public MonitorServiceImpl(MonitorScheduler monitorScheduler, MonitorJobRepository monitorJobRepository) {
         this.monitorScheduler = monitorScheduler;
         this.monitorJobRepository = monitorJobRepository;
-        this.statCrudService = statCrudService;
-        this.runningRepository = runningRepository;
-        this.notifyService = notifyService;
-        this.packageScanner = new PackageScanner();
-        this.webRequest = new DefaultWebRequest();
-    }
-
-    public void startMachineMonitorJob(String machineId, String jobClassName) throws IOException, SchedulerException {
-        /*String jobId = String.format("%s-%s", machineId, jobClassName);
-        MonitorJob MonitorJob = MonitorJobRepository.findByMachineId(machineId);
-        MonitorJob monitorJob = MonitorJob.getJobMap().get(jobId);
-
-        List<NotifyGroup> notifyGroups = MonitorJob.getNotifyGroups();
-        String cronExp = monitorJob.getCronExp();
-        String jobPkg = "cn.reghao.autodop.dmaster.monitor.service.job";
-        Class jobClass = packageScanner.findClassBySimpleName(monitorJob.getJobClassName(), jobPkg);
-
-        JobDataMap jobDataMap = new JobDataMap();
-        jobDataMap.put("notifyService", notifyService);
-        jobDataMap.put("notifyGroups", notifyGroups);
-        jobDataMap.put("machineId", MonitorJob.getMachineId());
-        jobDataMap.put("statCrudService", statCrudService);
-        monitorScheduler.addJob(jobId, cronExp, jobClass, jobDataMap);*/
-    }
-
-    public void startAppMonitorJob(String appId, String machineId, String jobClassName)
-            throws IOException, SchedulerException {
-        String jobId = String.format("%s-%s-%s", appId, machineId, jobClassName);
-        MonitorJob monitorJob = monitorJobRepository.findByJobId(jobId);
-
-        String cronExp = monitorJob.getCronExp();
-        String jobPkg = "cn.reghao.autodop.dmaster.monitor.service.job";
-        Class jobClass = packageScanner.findClassBySimpleName(monitorJob.getJobClassName(), jobPkg);
-
-        JobDataMap jobDataMap = new JobDataMap();
-        jobDataMap.put("notifyService", notifyService);
-        jobDataMap.put("notifyGroups", monitorJob.getNotifyGroups());
-        jobDataMap.put("webRequest", webRequest);
-        jobDataMap.put("appId", appId);
-        jobDataMap.put("machineId", machineId);
-        jobDataMap.put("runningRepository", runningRepository);
-        monitorScheduler.addJob(monitorJob.getJobId(), cronExp, jobClass, jobDataMap);
     }
 
     @Override

+ 9 - 42
dmaster/src/main/java/cn/reghao/autodop/dmaster/mqttsub/processor/DagentOpsProcessor.java

@@ -1,15 +1,12 @@
 package cn.reghao.autodop.dmaster.mqttsub.processor;
 
-import cn.reghao.autodop.common.log.RuntimeLog;
 import cn.reghao.autodop.common.message.ops.DagentOps;
 import cn.reghao.autodop.common.utils.serializer.JsonConverter;
 import cn.reghao.autodop.common.message.ops.OpsProcessor;
-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.info.MachineInfo;
 import cn.reghao.autodop.dmaster.machine.entity.stat.*;
+import cn.reghao.autodop.dmaster.machine.service.DagentOpsService;
 import cn.reghao.autodop.dmaster.sys.entity.AppRuntimeLog;
-import cn.reghao.autodop.dmaster.sys.repository.AppRuntimeLogRepository;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
@@ -22,16 +19,10 @@ import org.springframework.stereotype.Component;
 @Slf4j
 @Component
 public class DagentOpsProcessor implements OpsProcessor {
-    private MachineInfoCrudService machineInfoCrudService;
-    private MachineStatCrudService statCrudService;
-    private AppRuntimeLogRepository runtimeLogRepository;
+    private DagentOpsService dagentOpsService;
 
-    public DagentOpsProcessor(MachineInfoCrudService machineInfoCrudService,
-                              MachineStatCrudService statCrudService,
-                              AppRuntimeLogRepository runtimeLogRepository) {
-        this.machineInfoCrudService = machineInfoCrudService;
-        this.statCrudService = statCrudService;
-        this.runtimeLogRepository = runtimeLogRepository;
+    public DagentOpsProcessor(DagentOpsService dagentOpsService) {
+        this.dagentOpsService = dagentOpsService;
     }
 
     @Override
@@ -57,45 +48,21 @@ public class DagentOpsProcessor implements OpsProcessor {
 
     private void processDagentStart(String payload) {
         MachineInfo machineInfo = JsonConverter.jsonToObject(payload, MachineInfo.class);
-        machineInfoCrudService.insertOrUpdate(machineInfo);
-
-        String machineId = machineInfo.getMachineId();
-        MachineStat stat = statCrudService.selectByUk(machineId);
-        if (stat != null) {
-            stat.setStatus(StatusType.UP.name());
-            statCrudService.update(stat);
-        } else {
-            stat = new MachineStat(machineInfo.getMachineId());
-            statCrudService.insert(stat);
-        }
-
-        // TODO 开启心跳检测任务
+        dagentOpsService.start(machineInfo);
     }
 
     private void processDagentHeartbeat(String payload) {
         MachineStat machineStat = JsonConverter.jsonToObject(payload, MachineStat.class);
-        MachineStat stat = statCrudService.selectByUk(machineStat.getMachineId());
-        if (stat != null) {
-            if (stat.getStatus().equals(StatusType.DOWN.name())) {
-                stat.setStatus(StatusType.UP.name());
-            }
-            statCrudService.update(stat);
-        }
+        dagentOpsService.heartbeat(machineStat);
     }
 
     private void processDagentShutdown(String payload) {
         String machineId = JsonConverter.jsonToObject(payload, String.class);
-        MachineStat machineStat = statCrudService.selectByUk(machineId);
-        if (machineStat != null) {
-            machineStat.setStatus(StatusType.DOWN.name());
-            statCrudService.update(machineStat);
-        }
-
-        // TODO 停止心跳检测任务
+        dagentOpsService.shutdown(machineId);
     }
 
     private void processDagentLog(String payload) {
-        RuntimeLog runtimeLog = JsonConverter.jsonToObject(payload, RuntimeLog.class);
-        runtimeLogRepository.save(AppRuntimeLog.from(runtimeLog));
+        AppRuntimeLog runtimeLog = JsonConverter.jsonToObject(payload, AppRuntimeLog.class);
+        dagentOpsService.log(runtimeLog);
     }
 }

+ 3 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/sys/db/AppRuntimeLogCrudService.java

@@ -18,10 +18,11 @@ public class AppRuntimeLogCrudService {
         this.runtimeLogRepository = runtimeLogRepository;
     }
 
-    public void insertOrUpdate(AppRuntimeLog machineInfo) {
+    public void insertOrUpdate(AppRuntimeLog runtimeLog) {
+        runtimeLogRepository.save(runtimeLog);
     }
 
-    public void delete(AppRuntimeLog machineInfo) {
+    public void delete(AppRuntimeLog runtimeLog) {
     }
 
     public AppRuntimeLog selectByPk(Integer id) {

+ 5 - 6
dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/lifecycle/DmasterLifecycle.java

@@ -9,6 +9,7 @@ import cn.reghao.autodop.dmaster.app.db.crud.config.build.BuildDirCrudService;
 import cn.reghao.autodop.dmaster.app.entity.config.build.BuildDir;
 import cn.reghao.autodop.dmaster.app.entity.config.build.BuildDirLocal;
 import cn.reghao.autodop.dmaster.mqttsub.DagentMsgDispatcher;
+import cn.reghao.autodop.dmaster.sys.db.AppRuntimeLogCrudService;
 import cn.reghao.autodop.dmaster.sys.repository.AppRuntimeLogRepository;
 import cn.reghao.autodop.dmaster.utils.log.Appenders;
 import lombok.extern.slf4j.Slf4j;
@@ -32,28 +33,26 @@ public class DmasterLifecycle implements ApplicationRunner, DisposableBean {
     public static String MACHINE_ID;
     public static String MACHINE_IPV4;
 
-    private AppRuntimeLogRepository logRepository;
     private DagentMsgDispatcher dagentMsgDispatcher;
     private DefaultMqttClient mqttClient;
     private BuildDirCrudService buildDirCrudService;
 
     public DmasterLifecycle(MachineIdentity machineIdentity,
-                            AppRuntimeLogRepository logRepository,
+                            AppRuntimeLogCrudService logCrudService,
                             DagentMsgDispatcher dagentMsgDispatcher,
                             BuildDirCrudService buildDirCrudService,
                             DefaultMqttClient mqttClient) throws IOException {
         MACHINE_ID = machineIdentity.id();
         MACHINE_IPV4 = machineIdentity.ipv4();
-        this.logRepository = logRepository;
         this.dagentMsgDispatcher = dagentMsgDispatcher;
         this.mqttClient = mqttClient;
         this.buildDirCrudService = buildDirCrudService;
-        initLogger();
+        initLogger(logCrudService);
     }
 
-    private void initLogger() {
+    private void initLogger(AppRuntimeLogCrudService logCrudService) {
         List<Appender<ILoggingEvent>> appenders = new ArrayList<>();
-        appenders.add(Appenders.mongoAppender("dmaster", logRepository));
+        appenders.add(Appenders.mongoAppender("dmaster", logCrudService));
         LoggerConfig.initLogger(appenders);
     }
 

+ 3 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/log/Appenders.java

@@ -4,6 +4,7 @@ import ch.qos.logback.classic.LoggerContext;
 import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
 import ch.qos.logback.classic.spi.ILoggingEvent;
 import ch.qos.logback.core.Appender;
+import cn.reghao.autodop.dmaster.sys.db.AppRuntimeLogCrudService;
 import cn.reghao.autodop.dmaster.sys.repository.AppRuntimeLogRepository;
 import org.slf4j.LoggerFactory;
 
@@ -14,13 +15,13 @@ import org.slf4j.LoggerFactory;
 public class Appenders {
     private static LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
     
-    public static Appender<ILoggingEvent> mongoAppender(String appId, AppRuntimeLogRepository logRepository) {
+    public static Appender<ILoggingEvent> mongoAppender(String appId, AppRuntimeLogCrudService logCrudService) {
         PatternLayoutEncoder layoutEncoder = new PatternLayoutEncoder();
         layoutEncoder.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
         layoutEncoder.setContext(loggerContext);
         layoutEncoder.start();
 
-        MongoAppender mongoAppender = new MongoAppender(appId, logRepository);
+        MongoAppender mongoAppender = new MongoAppender(appId, logCrudService);
         mongoAppender.setContext(loggerContext);
         mongoAppender.start();
         return mongoAppender;

+ 5 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/log/MongoAppender.java

@@ -3,6 +3,7 @@ package cn.reghao.autodop.dmaster.utils.log;
 import ch.qos.logback.classic.spi.ILoggingEvent;
 import ch.qos.logback.core.UnsynchronizedAppenderBase;
 import cn.reghao.autodop.common.utils.DateTimeConverter;
+import cn.reghao.autodop.dmaster.sys.db.AppRuntimeLogCrudService;
 import cn.reghao.autodop.dmaster.sys.entity.AppRuntimeLog;
 import cn.reghao.autodop.dmaster.sys.repository.AppRuntimeLogRepository;
 import cn.reghao.autodop.dmaster.utils.lifecycle.DmasterLifecycle;
@@ -13,11 +14,11 @@ import cn.reghao.autodop.dmaster.utils.lifecycle.DmasterLifecycle;
  */
 public class MongoAppender extends UnsynchronizedAppenderBase<ILoggingEvent> {
     private String appId;
-    private AppRuntimeLogRepository logRepository;
+    private AppRuntimeLogCrudService logCrudService;
 
-    public MongoAppender(String appId, AppRuntimeLogRepository logRepository) {
+    public MongoAppender(String appId, AppRuntimeLogCrudService logCrudService) {
         this.appId = appId;
-        this.logRepository = logRepository;
+        this.logCrudService = logCrudService;
     }
 
     @Override
@@ -33,7 +34,7 @@ public class MongoAppender extends UnsynchronizedAppenderBase<ILoggingEvent> {
     @Override
     protected void append(ILoggingEvent event) {
         AppRuntimeLog runtimeLog = runtimeLog(event);
-        logRepository.save(runtimeLog);
+        logCrudService.insertOrUpdate(runtimeLog);
     }
 
     private AppRuntimeLog runtimeLog(ILoggingEvent event) {