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

新增第三方应用模块,并将数据备份和还原模块合并到此模块

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

+ 10 - 0
README.md

@@ -4,3 +4,13 @@ DevOps 自动化:
 - 构建部署
 - 运行监控
 - 备份还原
+
+autodop 模块:
+- 应用
+> 自主开发需要构建部署的程序
+- 第三方应用
+> 类似 MySQL 之类提供服务的程序
+- 主机
+> 物理主机和已部署 dagent 应用的主机(物理主机和虚拟主机)
+- 系统
+> autodop 系统管理

+ 57 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/App3Controller.java

@@ -0,0 +1,57 @@
+package cn.reghao.autodop.dmaster.app3;
+
+import cn.reghao.autodop.common.result.WebResult;
+import cn.reghao.autodop.common.utils.JsonUtil;
+import cn.reghao.autodop.common.utils.text.TextFile;
+import cn.reghao.autodop.dmaster.app3.backup.BackupService;
+import cn.reghao.autodop.dmaster.app3.entity.App3BakLog;
+import cn.reghao.autodop.dmaster.app3.entity.App3Bak;
+import cn.reghao.autodop.dmaster.common.mongo.MongoManager;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2019-11-15 08:44:50
+ */
+@Api(tags = "第三方应用接口")
+@RestController
+@RequestMapping("/api/app3")
+public class App3Controller {
+    private BackupService backupService;
+    private MongoManager mongoManager;
+
+    public App3Controller(BackupService backupService, MongoManager mongoManager) {
+        this.backupService = backupService;
+        this.mongoManager = mongoManager;
+    }
+
+    @PostMapping("/")
+    public String addService(App3Bak app3Bak) throws Exception {
+        String scriptPath = "/tmp/test.sh";
+        TextFile.write(new File(scriptPath), app3Bak.getBakScript());
+        app3Bak.setBakScriptPath(scriptPath);
+        backupService.backup(app3Bak);
+
+        return WebResult.success("ok");
+    }
+
+    @GetMapping("/")
+    public String serviceList() {
+        return WebResult.success("ok");
+    }
+
+    @PostMapping("/restore/{serviceName}")
+    public String restore(@PathVariable("serviceName") String serviceName) throws Exception {
+        return WebResult.success("ok");
+    }
+
+    @GetMapping("/log/{serviceName}")
+    public String bakLog(@PathVariable("serviceName") String serviceName) {
+        List<App3BakLog> list = mongoManager.query(serviceName);
+        return WebResult.success(JsonUtil.objectToJson(list));
+    }
+}

+ 17 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/App3Service.java

@@ -0,0 +1,17 @@
+package cn.reghao.autodop.dmaster.app3;
+
+import cn.reghao.autodop.dmaster.common.mongo.MongoManager;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author reghao
+ * @date 2020-11-10 21:58:00
+ */
+@Service
+public class App3Service {
+    private MongoManager mongoManager;
+
+    public App3Service(MongoManager mongoManager) {
+        this.mongoManager = mongoManager;
+    }
+}

+ 4 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/backup/BackupService.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/backup/BackupService.java

@@ -1,6 +1,6 @@
-package cn.reghao.autodop.dmaster.backup;
+package cn.reghao.autodop.dmaster.app3.backup;
 
-import cn.reghao.autodop.dmaster.backup.entity.BakService;
+import cn.reghao.autodop.dmaster.app3.entity.App3Bak;
 
 /**
  * @author reghao
@@ -10,11 +10,11 @@ public interface BackupService {
     /**
      * 备份数据
      *
-     * @param bakService 需要备份的服务
+     * @param app3Bak 需要备份的服务
      * @return 备份的 ID
      * @date 2020-11-09 下午8:53
      */
-    String backup(BakService bakService) throws Exception;
+    String backup(App3Bak app3Bak) throws Exception;
 
     /**
      * 还原数据

+ 5 - 5
dmaster/src/main/java/cn/reghao/autodop/dmaster/backup/BackupServiceImpl.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/backup/BackupServiceImpl.java

@@ -1,7 +1,7 @@
-package cn.reghao.autodop.dmaster.backup;
+package cn.reghao.autodop.dmaster.app3.backup;
 
-import cn.reghao.autodop.dmaster.backup.entity.BakService;
-import cn.reghao.autodop.dmaster.backup.scheduler.BackupScheduler;
+import cn.reghao.autodop.dmaster.app3.entity.App3Bak;
+import cn.reghao.autodop.dmaster.app3.scheduler.BackupScheduler;
 import org.quartz.SchedulerException;
 import org.springframework.stereotype.Service;
 
@@ -18,8 +18,8 @@ public class BackupServiceImpl implements BackupService {
     }
 
     @Override
-    public String backup(BakService bakService) throws SchedulerException {
-        backupScheduler.add(bakService);
+    public String backup(App3Bak app3Bak) throws SchedulerException {
+        backupScheduler.add(app3Bak);
         backupScheduler.start();
         return null;
     }

+ 23 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/entity/App3.java

@@ -0,0 +1,23 @@
+package cn.reghao.autodop.dmaster.app3.entity;
+
+import cn.reghao.autodop.dmaster.app.entity.BaseEntity;
+import lombok.Data;
+
+import javax.persistence.Entity;
+
+/**
+ * @author reghao
+ * @date 2020-11-10 22:05:40
+ */
+@Data
+@Entity
+public class App3 extends BaseEntity {
+    private String app3Name;
+    private String ip;
+    private int port;
+    private String execPath;
+    private String configDir;
+    private String configFile;
+    private String logDir;
+    private String logFile;
+}

+ 4 - 6
dmaster/src/main/java/cn/reghao/autodop/dmaster/backup/entity/BakService.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/entity/App3Bak.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dmaster.backup.entity;
+package cn.reghao.autodop.dmaster.app3.entity;
 
 import cn.reghao.autodop.dmaster.app.entity.BaseEntity;
 import lombok.Data;
@@ -7,18 +7,16 @@ import javax.persistence.Column;
 import javax.persistence.Entity;
 
 /**
- * 需要数据备份和还原的服务
+ * 第三方应用备份配置
  *
  * @author reghao
  * @date 2020-11-09 20:42:38
  */
 @Data
 @Entity
-public class BakService extends BaseEntity {
+public class App3Bak extends BaseEntity {
     @Column(nullable = false, unique = true)
-    private String serviceName;
-    private String ip;
-    private int port;
+    private String app3name;
     private String bakScript;
     private String bakScriptPath;
     private String bakDir;

+ 5 - 5
dmaster/src/main/java/cn/reghao/autodop/dmaster/backup/entity/BakLog.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/entity/App3BakLog.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dmaster.backup.entity;
+package cn.reghao.autodop.dmaster.app3.entity;
 
 import lombok.Data;
 import org.springframework.data.annotation.Id;
@@ -11,13 +11,13 @@ import org.springframework.data.mongodb.core.mapping.Field;
  * @author reghao
  * @date 2020-11-10 17:15:59
  */
-@Document(collection = "bak_log")
+@Document(collection = "app3_bak_log")
 @Data
-public class BakLog {
+public class App3BakLog {
     @Id
     private String id;
-    @Field("service_name")
-    private String serviceName;
+    @Field("app3name")
+    private String app3name;
     @Field("bak_time")
     private String bakTime;
     @Field("is_success")

+ 11 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/repository/App3BakRepository.java

@@ -0,0 +1,11 @@
+package cn.reghao.autodop.dmaster.app3.repository;
+
+import cn.reghao.autodop.dmaster.app3.entity.App3Bak;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * @author reghao
+ * @date 2020-01-21 14:53:03
+ */
+public interface App3BakRepository extends JpaRepository<App3Bak, Long> {
+}

+ 8 - 8
dmaster/src/main/java/cn/reghao/autodop/dmaster/backup/scheduler/BackupScheduler.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/scheduler/BackupScheduler.java

@@ -1,7 +1,7 @@
-package cn.reghao.autodop.dmaster.backup.scheduler;
+package cn.reghao.autodop.dmaster.app3.scheduler;
 
 import cn.reghao.autodop.common.shell.ShellExecutor;
-import cn.reghao.autodop.dmaster.backup.entity.BakService;
+import cn.reghao.autodop.dmaster.app3.entity.App3Bak;
 import cn.reghao.autodop.dmaster.common.mongo.MongoManager;
 import lombok.extern.slf4j.Slf4j;
 import org.quartz.*;
@@ -27,24 +27,24 @@ public class BackupScheduler {
         this.mongoManager = mongoManager;
     }
 
-    public void add(BakService bakService) throws SchedulerException {
+    public void add(App3Bak app3Bak) throws SchedulerException {
         JobDataMap jobDataMap = new JobDataMap();
         // 只传入一组 KV
-        jobDataMap.put(bakService.getBakScriptPath(), executor);
+        jobDataMap.put(app3Bak.getBakScriptPath(), executor);
         jobDataMap.put("mongo", mongoManager);
         JobDetail jobDetail = JobBuilder.newJob(ScriptBakJob.class)
-                .withIdentity(bakService.getServiceName())
+                .withIdentity(app3Bak.getApp3name())
                 .usingJobData(jobDataMap)
                 .build();
 
         TriggerBuilder<CronTrigger> triggerBuilder = TriggerBuilder
                 .newTrigger()
-                .withIdentity(bakService.getServiceName() + "@trigger")
-                .withSchedule(CronScheduleBuilder.cronSchedule(bakService.getCronExp()));
+                .withIdentity(app3Bak.getApp3name() + "@trigger")
+                .withSchedule(CronScheduleBuilder.cronSchedule(app3Bak.getCronExp()));
         CronTrigger cronTrigger = triggerBuilder.build();
 
         scheduler.scheduleJob(jobDetail, cronTrigger);
-        log.info("添加新定时任务 {}...", bakService.getServiceName());
+        log.info("添加新定时任务 {}...", app3Bak.getApp3name());
     }
 
     public void remove() {

+ 12 - 16
dmaster/src/main/java/cn/reghao/autodop/dmaster/backup/scheduler/ScriptBakJob.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app3/scheduler/ScriptBakJob.java

@@ -1,9 +1,9 @@
-package cn.reghao.autodop.dmaster.backup.scheduler;
+package cn.reghao.autodop.dmaster.app3.scheduler;
 
 import cn.reghao.autodop.common.shell.ShellExecutor;
 import cn.reghao.autodop.common.shell.ShellResult;
 import cn.reghao.autodop.common.utils.DateTimeUtil;
-import cn.reghao.autodop.dmaster.backup.entity.BakLog;
+import cn.reghao.autodop.dmaster.app3.entity.App3BakLog;
 import cn.reghao.autodop.dmaster.common.mongo.MongoManager;
 import lombok.extern.slf4j.Slf4j;
 import org.quartz.*;
@@ -35,27 +35,23 @@ public class ScriptBakJob implements Job {
             }
         }
 
-        /*MongoManager mongoManager = (MongoManager) jobDataMap.get("mongo");
-        String script = jobDataMap.getKeys()[0];
-        ShellExecutor executor = (ShellExecutor) jobDataMap.get(script);*/
-
-        BakLog bakLog = new BakLog();
-        bakLog.setServiceName(jobKey.getName());
-        bakLog.setBakTime(DateTimeUtil.now());
+        App3BakLog app3BakLog = new App3BakLog();
+        app3BakLog.setApp3name(jobKey.getName());
+        app3BakLog.setBakTime(DateTimeUtil.now());
         log.info("执行 {} 定时任务...", jobKey.getName());
         try {
             ShellResult shellResult = executor.execScript(script);
             if (!shellResult.hasError()) {
-                bakLog.setSuccess(true);
-                bakLog.setResult(shellResult.getStdout());
+                app3BakLog.setSuccess(true);
+                app3BakLog.setResult(shellResult.getStdout());
             } else {
-                bakLog.setSuccess(false);
-                bakLog.setResult(shellResult.getStderr());
+                app3BakLog.setSuccess(false);
+                app3BakLog.setResult(shellResult.getStderr());
             }
-            mongoManager.insert(bakLog);
+            mongoManager.insert(app3BakLog);
         } catch (Exception e) {
-            bakLog.setSuccess(false);
-            bakLog.setResult(e.getMessage());
+            app3BakLog.setSuccess(false);
+            app3BakLog.setResult(e.getMessage());
         }
     }
 }

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/auth/jwt/JwtTokenFilter.java

@@ -29,7 +29,7 @@ public class JwtTokenFilter extends OncePerRequestFilter {
         String uri = request.getRequestURI();
         String method = request.getMethod();
         // TODO 不处理 OPTIONS 请求、webhook 接口和非 /api 开头的请求
-        if ("OPTIONS".equals(method) || uri.startsWith("/api/backup") || uri.startsWith("/api/monitor") || uri.startsWith("/api/vm") || !uri.startsWith("/api")) {
+        if ("OPTIONS".equals(method) || uri.startsWith("/api/app3") || uri.startsWith("/api/monitor") || uri.startsWith("/api/vm") || !uri.startsWith("/api")) {
             chain.doFilter(request, response);
             return;
         }

+ 0 - 42
dmaster/src/main/java/cn/reghao/autodop/dmaster/backup/BackupController.java

@@ -1,42 +0,0 @@
-package cn.reghao.autodop.dmaster.backup;
-
-import cn.reghao.autodop.common.result.WebResult;
-import cn.reghao.autodop.common.utils.text.TextFile;
-import cn.reghao.autodop.dmaster.backup.entity.BakService;
-import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.io.File;
-
-/**
- * @author reghao
- * @date 2019-11-15 08:44:50
- */
-@Api(tags = "数据备份和还原接口")
-@RestController
-@RequestMapping("/api/backup")
-public class BackupController {
-    private BackupService backupService;
-
-    public BackupController(BackupService backupService) {
-        this.backupService = backupService;
-    }
-
-    @PostMapping("/service")
-    public String addService(BakService bakService) throws Exception {
-        String scriptPath = "/tmp/test.sh";
-        TextFile.write(new File(scriptPath), bakService.getBakScript());
-        bakService.setBakScriptPath(scriptPath);
-        backupService.backup(bakService);
-
-        return WebResult.success("ok");
-    }
-
-    @GetMapping("/service")
-    public String serviceList() {
-        return WebResult.success("ok");
-    }
-}

+ 0 - 12
dmaster/src/main/java/cn/reghao/autodop/dmaster/backup/repository/BakServiceRepository.java

@@ -1,12 +0,0 @@
-package cn.reghao.autodop.dmaster.backup.repository;
-
-import cn.reghao.autodop.dmaster.backup.entity.BakService;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-/**
- * @author reghao
- * @date 2020-01-21 14:53:03
- */
-public interface BakServiceRepository extends JpaRepository<BakService, Long> {
-
-}

+ 8 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/common/mongo/MongoManager.java

@@ -1,8 +1,13 @@
 package cn.reghao.autodop.dmaster.common.mongo;
 
+import cn.reghao.autodop.dmaster.app3.entity.App3BakLog;
 import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+
 /**
  * @author reghao
  * @date 2020-11-10 18:10:22
@@ -19,8 +24,9 @@ public class MongoManager {
         mongoTemplate.save(object);
     }
 
-    public void query() {
-
+    public List<App3BakLog> query(String serviceName) {
+        Query query = Query.query(Criteria.where("service_name").is(serviceName));
+        return mongoTemplate.find(query, App3BakLog.class);
     }
 
     public void update() {