Browse Source

编写获取应用日志功能

reghao 5 years ago
parent
commit
bc95b13939
18 changed files with 294 additions and 99 deletions
  1. 3 2
      common/src/main/java/cn/reghao/autodop/common/dagent/app/api/data/log/AppLogArgs.java
  2. 38 13
      common/src/main/java/cn/reghao/autodop/common/dockerc/Docker.java
  3. 1 1
      common/src/main/java/cn/reghao/autodop/common/dockerc/api/ContainerOps.java
  4. 67 2
      dagent/src/main/java/cn/reghao/autodop/dagent/app/App.java
  5. 2 1
      dagent/src/main/java/cn/reghao/autodop/dagent/app/AppService.java
  6. 25 4
      dagent/src/main/java/cn/reghao/autodop/dagent/app/DockerAppServiceImpl.java
  7. 7 1
      dagent/src/main/java/cn/reghao/autodop/dagent/app/ZipAppServiceImpl.java
  8. 1 1
      dagent/src/main/java/cn/reghao/autodop/dagent/app/deploy/DockerAppLogServiceImpl.java
  9. 11 4
      dagent/src/main/resources/application-test.yml
  10. 15 10
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/StatusController.java
  11. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/RunningConfig.java
  12. 91 50
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/AppStatusService.java
  13. 23 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/RemoteCallService.java
  14. 1 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/LogFile.java
  15. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/AppVO.java
  16. 1 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/amqp/MachineDispatcher.java
  17. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/amqp/RabbitConsumer.java
  18. 5 5
      scripts/build_and_deploy.sh

+ 3 - 2
common/src/main/java/cn/reghao/autodop/common/dagent/app/api/data/log/AppLogArgs.java

@@ -12,6 +12,7 @@ public class AppLogArgs {
     private String logType;
     private String logLevel;
     private String appId;
-    private String logDirPath;
-    private String logFilePath;
+    private boolean isLogFile;
+    // 根据 isLogFile 判断是日志目录或文件路径
+    private String logPath;
 }

+ 38 - 13
common/src/main/java/cn/reghao/autodop/common/dockerc/Docker.java

@@ -330,29 +330,56 @@ public class Docker implements ImageOps, ContainerOps, AutoCloseable {
      * @date 2020-05-19 上午10:26
      */
     @Override
-    public List<String> fileLogs(String containerId, String logLevel, String logPath) throws DockerException {
+    public List<String> fileLogs(String containerId, String logLevel, String logPath, boolean isLogFile)
+            throws DockerException {
         switch (LogLevel.valueOf(logLevel)) {
             case info:
-                return appLog(containerId, logPath);
+                if (!isLogFile) {
+                    return appLogFiles(containerId, logPath);
+                } else {
+                    return appLogFileContent(containerId, logPath);
+                }
             case error:
-                return appLog(containerId, logPath);
+                if (!isLogFile) {
+                    return appLogFiles(containerId, logPath);
+                } else {
+                    return appLogFileContent(containerId, logPath);
+                }
             default:
                 throw new DockerException("日志级别 " + logLevel + " 不存在");
         }
     }
 
-    private List<String> appLog(String containerId, String filePath) throws DockerException {
-        String logdir = rootfs(containerId) + filePath;
-        File dir = new File(logdir);
-        if (!dir.exists()) {
-            throw new DockerException(logdir + " 目录不存在...");
+    private List<String> appLogFiles(String containerId, String dirPath) throws DockerException {
+        String logDirPath = rootfs(containerId) + dirPath;
+        File logDir = new File(logDirPath);
+        if (!logDir.exists()) {
+            throw new DockerException(logDirPath + " 目录不存在");
+        } else if (logDir.isFile()) {
+            throw new DockerException(logDirPath + " 是一个文件");
         } else {
-            return Arrays.stream(Objects.requireNonNull(dir.listFiles()))
+            return Arrays.stream(Objects.requireNonNull(logDir.listFiles()))
                     .map(File::getName)
                     .collect(Collectors.toList());
         }
     }
 
+    private List<String> appLogFileContent(String containerId, String filePath) throws DockerException {
+        String logFilePath = rootfs(containerId) + filePath;
+        File logFile = new File(logFilePath);
+        if (!logFile.exists()) {
+            throw new DockerException(logFilePath + " 文件不存在");
+        } else if (logFile.isDirectory()) {
+            throw new DockerException(logFilePath + " 是一个文件");
+        } else {
+            try {
+                return textFile.tailRead(logFilePath, 1000);
+            } catch (IOException e) {
+                throw new DockerException(ExceptionUtil.errorMsg(e));
+            }
+        }
+    }
+
     @Override
     public List<Container> ps(boolean isAll) throws DockerException {
         String uri = DockerApi.psGet + "?all=" + isAll;
@@ -406,15 +433,13 @@ public class Docker implements ImageOps, ContainerOps, AutoCloseable {
 
     public static void main(String[] args) {
         try (Docker docker = new Docker()) {
-            docker.archive("");
-
-            String appId = "dnkt-dev";
+            String appId = "registry";
             String containerId = docker.getIdByName(appId);
             ContainerInfo containerInfo = docker.inspectContainer(containerId);
             String rootfs = docker.rootfs(containerId);
 
             String logLevel = LogLevel.info.name();
-            List<String> logs = docker.fileLogs(containerId, logLevel, "");
+            List<String> logs = docker.fileLogs(containerId, logLevel, "", true);
             System.out.println();
         } catch (DockerException e) {
             e.printStackTrace();

+ 1 - 1
common/src/main/java/cn/reghao/autodop/common/dockerc/api/ContainerOps.java

@@ -46,7 +46,7 @@ public interface ContainerOps {
      * @return
      * @date 2020-05-19 上午10:58
      */
-    List<String> fileLogs(String containerId, String logLevel, String logPath) throws DockerException;
+    List<String> fileLogs(String containerId, String logLevel, String logPath, boolean isLogFile) throws DockerException;
 
     /**
      * 查看容器状态

+ 67 - 2
dagent/src/main/java/cn/reghao/autodop/dagent/app/App.java

@@ -55,14 +55,79 @@ public class App {
         try {
             AppLogArgs appLogArgs = (AppLogArgs) JsonConverter.jsonToObject(payload, AppLogArgs.class);
             String packerType = appLogArgs.getPackerType();
+            boolean isLogFile = appLogArgs.isLogFile();
+            /*if (!isLogFile) {
+                return logFiles(appLogArgs);
+            } else {
+                return logContent(appLogArgs);
+            }*/
 
             List<String> logs;
             switch (PackerType.valueOf(packerType)) {
                 case docker:
-                    logs = dockerAppServiceImpl.log(appLogArgs);
+                    if (!isLogFile) {
+                        logs = dockerAppServiceImpl.logFiles(appLogArgs);
+                    } else {
+                        logs = dockerAppServiceImpl.logContent(appLogArgs);
+                    }
+
+                    break;
+                case zip:
+                    if (!isLogFile) {
+                        logs = zipAppServiceImpl.logFiles(appLogArgs);
+                    } else {
+                        logs = zipAppServiceImpl.logContent(appLogArgs);
+                    }
+                    break;
+                default:
+                    return RpcResult.error("打包类型 " + appLogArgs.getPackerType() + " 不存在");
+            }
+            return RpcResult.success(JsonConverter.objectToJson(logs));
+        } catch (Exception e) {
+            return RpcResult.fail(ExceptionUtil.errorMsg(e));
+        }
+    }
+
+    /**
+     * 日志文件列表
+     *
+     * @param
+     * @return
+     * @date 2021-02-26 上午10:56
+     */
+    private RpcResult logFiles(AppLogArgs appLogArgs) throws DockerException {
+        String packerType = appLogArgs.getPackerType();
+        List<String> logs;
+        switch (PackerType.valueOf(packerType)) {
+            case docker:
+                logs = dockerAppServiceImpl.logFiles(appLogArgs);
+                break;
+            case zip:
+                logs = zipAppServiceImpl.logFiles(appLogArgs);
+                break;
+            default:
+                return RpcResult.error("打包类型 " + appLogArgs.getPackerType() + " 不存在");
+        }
+        return RpcResult.success(JsonConverter.objectToJson(logs));
+    }
+
+    /**
+     * 日志文件内容
+     *
+     * @param
+     * @return
+     * @date 2021-02-26 上午10:56
+     */
+    private RpcResult logContent(AppLogArgs appLogArgs) {
+        try {
+            String packerType = appLogArgs.getPackerType();
+            List<String> logs;
+            switch (PackerType.valueOf(packerType)) {
+                case docker:
+                    logs = dockerAppServiceImpl.logContent(appLogArgs);
                     break;
                 case zip:
-                    logs = zipAppServiceImpl.log(appLogArgs);
+                    logs = zipAppServiceImpl.logContent(appLogArgs);
                     break;
                 default:
                     return RpcResult.error("打包类型 " + appLogArgs.getPackerType() + " 不存在");

+ 2 - 1
dagent/src/main/java/cn/reghao/autodop/dagent/app/AppService.java

@@ -13,7 +13,8 @@ import java.util.List;
  */
 public interface AppService {
     AppStatus deploy(AppDeployArgs appDeployArgs) throws DockerException;
-    List<String> log(AppLogArgs appLogArgs) throws DockerException;
+    List<String> logFiles(AppLogArgs appLogArgs) throws DockerException;
+    List<String> logContent(AppLogArgs appLogArgs) throws DockerException;
     AppStatus status(String appId) throws DockerException;
     AppStatus restart(String appId) throws DockerException;
     AppStatus stop(String appId) throws DockerException;

+ 25 - 4
dagent/src/main/java/cn/reghao/autodop/dagent/app/DockerAppServiceImpl.java

@@ -56,12 +56,12 @@ public class DockerAppServiceImpl implements AppService {
     }
 
     @Override
-    public List<String> log(AppLogArgs appLogArgs) throws DockerException {
+    public List<String> logFiles(AppLogArgs appLogArgs) throws DockerException {
         String appId = appLogArgs.getAppId();
         String logType = appLogArgs.getLogType();
         String logLevel = appLogArgs.getLogLevel();
-        String logDirPath = appLogArgs.getLogDirPath();
-        String logFilePath = appLogArgs.getLogFilePath();
+        String logPath = appLogArgs.getLogPath();
+        boolean isLogFile = appLogArgs.isLogFile();
 
         try (Docker docker = new Docker()) {
             String containerId = docker.getIdByName(appId);
@@ -69,7 +69,28 @@ public class DockerAppServiceImpl implements AppService {
                 case console:
                     return docker.consoleLogs(containerId, logLevel);
                 case file:
-                    return docker.fileLogs(containerId, logLevel, "");
+                    return docker.fileLogs(containerId, logLevel, logPath, isLogFile);
+                default:
+                    throw new DockerException("日志类型 " + logType + " 不存在");
+            }
+        }
+    }
+
+    @Override
+    public List<String> logContent(AppLogArgs appLogArgs) throws DockerException {
+        String appId = appLogArgs.getAppId();
+        String logType = appLogArgs.getLogType();
+        String logLevel = appLogArgs.getLogLevel();
+        String logPath = appLogArgs.getLogPath();
+        boolean isLogFile = appLogArgs.isLogFile();
+
+        try (Docker docker = new Docker()) {
+            String containerId = docker.getIdByName(appId);
+            switch (LogType.valueOf(logType)) {
+                case console:
+                    return docker.consoleLogs(containerId, logLevel);
+                case file:
+                    return docker.fileLogs(containerId, logLevel, logPath, isLogFile);
                 default:
                     throw new DockerException("日志类型 " + logType + " 不存在");
             }

+ 7 - 1
dagent/src/main/java/cn/reghao/autodop/dagent/app/ZipAppServiceImpl.java

@@ -3,6 +3,7 @@ package cn.reghao.autodop.dagent.app;
 import cn.reghao.autodop.common.dagent.app.api.data.AppStatus;
 import cn.reghao.autodop.common.dagent.app.api.data.deploy.AppDeployArgs;
 import cn.reghao.autodop.common.dagent.app.api.data.log.AppLogArgs;
+import cn.reghao.autodop.common.dockerc.exception.DockerException;
 import lombok.extern.slf4j.Slf4j;
 
 import java.util.ArrayList;
@@ -21,11 +22,16 @@ public class ZipAppServiceImpl implements AppService {
     }
 
     @Override
-    public List<String> log(AppLogArgs appLogArgs) {
+    public List<String> logFiles(AppLogArgs appLogArgs) {
         List<String> list = new ArrayList<>();
         return list;
     }
 
+    @Override
+    public List<String> logContent(AppLogArgs appLogArgs) throws DockerException {
+        return null;
+    }
+
     @Override
     public AppStatus status(String appId) {
         return null;

+ 1 - 1
dagent/src/main/java/cn/reghao/autodop/dagent/app/deploy/DockerAppLogServiceImpl.java

@@ -28,7 +28,7 @@ public class DockerAppLogServiceImpl implements AppLogService {
                     }
                     return list;
                 case file:
-                    return docker.fileLogs(containerId, logLevel, logPath);
+                    return docker.fileLogs(containerId, logLevel, logPath, true);
                 default:
                     throw new Exception(type + " 日志类型不存在");
             }

+ 11 - 4
dagent/src/main/resources/application-test.yml

@@ -1,7 +1,14 @@
+#spring:
+#  rabbitmq:
+#    host: mq.srv.iquizoo.com
+#    port: 5672
+#    username: iquizoo-mq1
+#    password: z2pT1PXR
+#    virtual-host: /
 spring:
   rabbitmq:
-    host: mq.srv.iquizoo.com
+    host: 192.168.0.111
     port: 5672
-    username: iquizoo-mq1
-    password: z2pT1PXR
-    virtual-host: /
+    virtual-host: /
+    username: dev
+    password: Dev@12345678

+ 15 - 10
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/StatusController.java

@@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -36,21 +37,25 @@ public class StatusController {
         return ResponseEntity.ok().body(WebResult.success(pageList));
     }
 
+    @ApiOperation(value = "获取指定主机上应用的所有日志文件")
+    @GetMapping("/log/files")
+    public ResponseEntity<String> appLogFiles(@RequestParam("appId") String appId,
+                                              @RequestParam("logType") String logType,
+                                              @RequestParam("logLevel") String logLevel,
+                                              @RequestParam("machineId") String machineId) {
+        List<String> list = statusService.logFiles(appId, logType, logLevel, machineId);
+        return ResponseEntity.ok().body(WebResult.success(list));
+    }
+
     @ApiOperation(value = "获取应用日志内容")
     @GetMapping("/log/content")
     public ResponseEntity<String> appLogContent(@RequestParam("appId") String appId,
                                                 @RequestParam("logType") String logType,
                                                 @RequestParam("logLevel") String logLevel,
-                                                @RequestParam("logName") String logName) {
-        statusService.logContent(appId, logType, logLevel);
-        return ResponseEntity.ok().body("WebResult.success(logs)");
-    }
-
-    @ApiOperation(value = "获取指定主机上应用的所有日志文件")
-    @GetMapping("/log/files")
-    public ResponseEntity<String> appLogFiles(@RequestParam("appId") String appId, @RequestParam("host") String host) {
-
-        return ResponseEntity.ok().body("WebResult.success(logs)");
+                                                @RequestParam("machineId") String machineId,
+                                                @RequestParam("logFile") String logFile) {
+        List<String> logs = statusService.logContent(appId, logType, logLevel, machineId, logFile);
+        return ResponseEntity.ok().body(WebResult.success(logs));
     }
 
     @ApiOperation(value = "某个已部署应用的运行状态")

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/entity/deploy/RunningConfig.java

@@ -21,5 +21,5 @@ public class RunningConfig {
     private String healthCheck;
     @ElementCollection(targetClass = LogConfig.class)
     @LazyCollection(LazyCollectionOption.FALSE)
-    private List<LogConfig> logs;
+    private List<LogConfig> logConfigs;
 }

+ 91 - 50
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/AppStatusService.java

@@ -24,6 +24,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 应用状态管理
@@ -48,72 +49,112 @@ public class AppStatusService {
         return pageList;
     }
 
-    public List<LogFile> logFiles(String appId) {
+    /**
+     * 日志文件列表
+     *
+     * @param
+     * @return
+     * @date 2021-02-26 上午8:23
+     */
+    public List<String> logFiles(String appId, String logType, String logLevel, String machineId) {
         AppOrchestration app = cache.findByAppId(appId);
-        List<LogConfig> logs = app.getRunningConfig().getLogs();
+        List<LogConfig> list = app.getRunningConfig().getLogConfigs();
+        List<LogConfig> configs = list.stream()
+                .filter(logConfig -> logConfig.getType().equals(logType))
+                .filter(logConfig -> logConfig.getLevel().equals(logLevel))
+                .collect(Collectors.toList());
+
+        if (configs.size() != 1) {
+            return null;
+        }
 
+        LogConfig logConfig = configs.get(0);
         List<MqMessage> mqMessages = new ArrayList<>();
         for (DeployConfig deployConfig : app.getDeployConfigs()) {
-            AppLogArgs appLogArgs = new AppLogArgs();
-            appLogArgs.setPackerType(deployConfig.getPackerType());
-            appLogArgs.setAppId(appId);
-            appLogArgs.setLogType(LogType.console.name());
-            appLogArgs.setLogLevel(LogLevel.info.name());
-
-            MqMessage mqMessage = new MqMessage();
-            mqMessage.setMachineId(deployConfig.getMachineId());
-            mqMessage.setSendTime(System.currentTimeMillis());
-            mqMessage.setRpc(true);
-            mqMessage.setType(MessageType.appType.name());
-            mqMessage.setOps(AppOps.appLogOps.name());
-            mqMessage.setPayload(JsonConverter.objectToJson(appLogArgs));
-            mqMessages.add(mqMessage);
+            if (deployConfig.getMachineId().equals(machineId)) {
+                AppLogArgs appLogArgs = new AppLogArgs();
+                appLogArgs.setPackerType(deployConfig.getPackerType());
+                appLogArgs.setAppId(appId);
+                appLogArgs.setLogType(logType);
+                appLogArgs.setLogLevel(logLevel);
+                appLogArgs.setLogFile(false);
+                appLogArgs.setLogPath(logConfig.getLogPath());
+
+                MqMessage mqMessage = new MqMessage();
+                mqMessage.setMachineId(deployConfig.getMachineId());
+                mqMessage.setSendTime(System.currentTimeMillis());
+                mqMessage.setRpc(true);
+                mqMessage.setType(MessageType.appType.name());
+                mqMessage.setOps(AppOps.appLogOps.name());
+                mqMessage.setPayload(JsonConverter.objectToJson(appLogArgs));
+
+                mqMessages.add(mqMessage);
+                break;
+            }
         }
 
-        Map<String, RpcResult> rpcResultMap = callService.call(mqMessages);
-        rpcResultMap.forEach((machineId, rpcResult) -> {
-            if (rpcResult.getStatusCode() == 0) {
-                String result = rpcResult.getResult();
-                System.out.println();
-            }
-        });
+        RpcResult rpcResult = callService.call(mqMessages.get(0));
+        if (rpcResult.getStatusCode() == 0) {
+            String result = rpcResult.getResult();
+            JsonArrayDeserializer<String> deserializer = new JsonArrayDeserializer<>();
+            return deserializer.fromJsonArray(result, String.class);
+        }
 
-        return null;
+        return new ArrayList<>();
     }
 
-    public List<String> logContent(String appId, String logType, String logLevel) {
+    /**
+     * 日志内容
+     *
+     * @param
+     * @return
+     * @date 2021-02-26 上午8:23
+     */
+    public List<String> logContent(String appId, String logType, String logLevel, String machineId, String logFile) {
         AppOrchestration app = cache.findByAppId(appId);
-        List<LogConfig> logs = app.getRunningConfig().getLogs();
+        List<LogConfig> list = app.getRunningConfig().getLogConfigs();
+        List<LogConfig> configs = list.stream()
+                .filter(logConfig -> logConfig.getType().equals(logType))
+                .filter(logConfig -> logConfig.getLevel().equals(logLevel))
+                .collect(Collectors.toList());
+
+        if (configs.size() != 1) {
+            return null;
+        }
 
+        LogConfig logConfig = configs.get(0);
         List<MqMessage> mqMessages = new ArrayList<>();
         for (DeployConfig deployConfig : app.getDeployConfigs()) {
-            AppLogArgs appLogArgs = new AppLogArgs();
-            appLogArgs.setPackerType(deployConfig.getPackerType());
-            appLogArgs.setAppId(appId);
-            appLogArgs.setLogType(LogType.console.name());
-            appLogArgs.setLogLevel(LogLevel.info.name());
-
-            MqMessage mqMessage = new MqMessage();
-            mqMessage.setMachineId(deployConfig.getMachineId());
-            mqMessage.setSendTime(System.currentTimeMillis());
-            mqMessage.setRpc(true);
-            mqMessage.setType(MessageType.appType.name());
-            mqMessage.setOps(AppOps.appLogOps.name());
-            mqMessage.setPayload(JsonConverter.objectToJson(appLogArgs));
-            mqMessages.add(mqMessage);
+            if (deployConfig.getMachineId().equals(machineId)) {
+                AppLogArgs appLogArgs = new AppLogArgs();
+                appLogArgs.setPackerType(deployConfig.getPackerType());
+                appLogArgs.setAppId(appId);
+                appLogArgs.setLogType(logType);
+                appLogArgs.setLogLevel(logLevel);
+                appLogArgs.setLogFile(true);
+                appLogArgs.setLogPath(logConfig.getLogPath() + "/" + logFile);
+
+                MqMessage mqMessage = new MqMessage();
+                mqMessage.setMachineId(deployConfig.getMachineId());
+                mqMessage.setSendTime(System.currentTimeMillis());
+                mqMessage.setRpc(true);
+                mqMessage.setType(MessageType.appType.name());
+                mqMessage.setOps(AppOps.appLogOps.name());
+                mqMessage.setPayload(JsonConverter.objectToJson(appLogArgs));
+
+                mqMessages.add(mqMessage);
+                break;
+            }
         }
 
-        Map<String, RpcResult> rpcResultMap = callService.call(mqMessages);
-        rpcResultMap.forEach((machineId, rpcResult) -> {
-            if (rpcResult.getStatusCode() == 0) {
-                String result = rpcResult.getResult();
-                JsonArrayDeserializer<String> deserializer = new JsonArrayDeserializer<>();
-                List<String> list = deserializer.fromJsonArray(result, String.class);
-                System.out.println();
-            }
-        });
+        RpcResult rpcResult = callService.call(mqMessages.get(0));
+        if (rpcResult.getStatusCode() == 0) {
+            String result = rpcResult.getResult();
+            JsonArrayDeserializer<String> deserializer = new JsonArrayDeserializer<>();
+            return deserializer.fromJsonArray(result, String.class);
+        }
 
-        return null;
+        return new ArrayList<>();
     }
 
     public Map<String, AppStatus> appStatus(String appId) {

+ 23 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/RemoteCallService.java

@@ -38,6 +38,29 @@ public class RemoteCallService {
         this.machineInfoRepository = machineInfoRepository;
     }
 
+    public RpcResult call(MqMessage mqMessage) {
+        Future<RpcResult> future = threadPool.submit(new RemoteCallTask(mqMessage));
+        while (!future.isDone() && !future.isCancelled()) {
+            // 休眠等待异步任务结束
+            try {
+                Thread.sleep(1_000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+
+        String machineId = mqMessage.getMachineId();
+        try {
+            RpcResult rpcResult = future.get();
+            if (rpcResult == null) {
+                return RpcResult.fail(machineAddress(machineId) + " RPC 调用失败");
+            }
+            return rpcResult;
+        } catch (InterruptedException | ExecutionException e) {
+            return RpcResult.error(machineAddress(machineId) + " " + ExceptionUtil.errorMsg(e));
+        }
+    }
+
     public Map<String, RpcResult> call(List<MqMessage> messages) {
         Map<String, Future<RpcResult>> futureMap = new HashMap<>(messages.size());
         messages.forEach(mqMessage ->

+ 1 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/LogFile.java

@@ -8,6 +8,7 @@ import java.util.List;
  * @author reghao
  * @date 2020-06-03 21:41:21
  */
+@Deprecated
 @Data
 public class LogFile {
     private String logType;

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/vo/orchestration/AppVO.java

@@ -187,7 +187,7 @@ public class AppVO {
         logConfig1.setLevel(LogLevel.info.name());
         logConfig1.setLogPath("/Logs/Info");
         logs.add(logConfig);
-        runningConfig.setLogs(logs);
+        runningConfig.setLogConfigs(logs);
         app.setRunningConfig(runningConfig);
 
         NotifierConfig notifierConfig = new NotifierConfig();

+ 1 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/amqp/MachineDispatcher.java

@@ -40,9 +40,8 @@ public class MachineDispatcher {
                     MachineHeartbeat machineHeartbeat = (MachineHeartbeat) JsonConverter.jsonToObject(payload, MachineHeartbeat.class);
                     break;
                 case machineLogOps:
-                    log.info("dagent 日志消息...");
                     MachineLog machineLog = (MachineLog) JsonConverter.jsonToObject(payload, MachineLog.class);
-                    machineLogCrudService.addOrUpdate(machineLog);
+                    //machineLogCrudService.addOrUpdate(machineLog);
                     break;
                 default:
                     log.info("来自机器的消息...");

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/utils/amqp/RabbitConsumer.java

@@ -59,6 +59,6 @@ public class RabbitConsumer {
             exchange = @Exchange(value = "rabbit.log"))
     )
     public void logQueueConsumer(@Payload String msg) {
-        log.info("日志消息 -> {}", msg);
+        //log.info("日志消息 -> {}", msg);
     }
 }

+ 5 - 5
scripts/build_and_deploy.sh

@@ -9,15 +9,15 @@ set -e
 #sh deploy.sh autodop-dmaster 192.168.0.211 azy &
 
 # 构建
-#sh build.sh test dagent
+sh build.sh test dagent
 
 ##############################################################
 # 测试环境
 ##############################################################
 #sh deploy.sh autodop-dagent 192.168.0.171 azy &
-#sh deploy.sh autodop-dagent 192.168.0.172 azy &
+sh deploy.sh autodop-dagent 192.168.0.172 azy &
 #sh deploy.sh autodop-dagent 192.168.0.173 azy &
-#sh deploy.sh autodop-dagent 192.168.0.174 azy &
+sh deploy.sh autodop-dagent 192.168.0.174 azy &
 
 
 
@@ -25,5 +25,5 @@ set -e
 # 生产环境
 ##############################################################
 #sh deploy.sh autodop-dagent 121.40.29.55 CYsZufT56vX6rr6FLD6IF1YCXiJbwv
-sh deploy.sh autodop-dagent 121.41.79.44 YcxtZI6yQeeSDw0mDD7eeunwOEhAca &
-sh deploy.sh autodop-dagent 121.43.234.233 sjUIYQzBEaMm1!hbh9sB &
+#sh deploy.sh autodop-dagent 121.41.79.44 YcxtZI6yQeeSDw0mDD7eeunwOEhAca &
+#sh deploy.sh autodop-dagent 121.43.234.233 sjUIYQzBEaMm1!hbh9sB &