Browse Source

继续编写应用状态管理接口

reghao 5 years ago
parent
commit
dbf81403d6

+ 22 - 4
common/src/main/java/cn/reghao/autodop/common/dockerc/Docker.java

@@ -384,19 +384,37 @@ public class Docker implements ImageOps, ContainerOps, AutoCloseable {
 
     @Override
     public String rootfs(String containerId) throws DockerException {
-        ContainerInfo containerInfo = inspectContainer(containerId);;
-        // TODO 可能抛出 null 异常
+        ContainerInfo containerInfo = inspectContainer(containerId);
+        // 容器停止后 mergedDir 不再存在
         return containerInfo.getGraphDriver().getData().getMergedDir();
     }
 
+    public void archive(String containerId) {
+        String uri = "http://v1.4.0/containers/32487cddf5d5/archive?path=/";
+        try {
+            FullHttpResponse response = client.get(uri, null);
+            if (response != null) {
+                String result =  response.content().toString(StandardCharsets.UTF_8);
+                System.out.println();
+            } else {
+
+            }
+        } catch (IOException | InterruptedException e) {
+
+        }
+    }
+
     public static void main(String[] args) {
         try (Docker docker = new Docker()) {
-            String appId = "user-dev";
+            docker.archive("");
+
+            String appId = "dnkt-dev";
             String containerId = docker.getIdByName(appId);
             ContainerInfo containerInfo = docker.inspectContainer(containerId);
+            String rootfs = docker.rootfs(containerId);
 
             String logLevel = LogLevel.info.name();
-            List<String> logs = docker.consoleLogs(containerId, logLevel);
+            List<String> logs = docker.fileLogs(containerId, logLevel, "");
             System.out.println();
         } catch (DockerException e) {
             e.printStackTrace();

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

@@ -105,7 +105,7 @@ public class App {
         switch (PackerType.valueOf(packerType)) {
             case docker:
                 try {
-                    appStatus = dockerAppServiceImpl.status(appId);
+                    appStatus = dockerAppServiceImpl.restart(appId);
                 } catch (DockerException e) {
                     return RpcResult.fail(ExceptionUtil.errorMsg(e));
                 }
@@ -128,7 +128,7 @@ public class App {
         switch (PackerType.valueOf(packerType)) {
             case docker:
                 try {
-                    appStatus = dockerAppServiceImpl.status(appId);
+                    appStatus = dockerAppServiceImpl.stop(appId);
                 } catch (DockerException e) {
                     return RpcResult.fail(ExceptionUtil.errorMsg(e));
                 }
@@ -151,7 +151,7 @@ public class App {
         switch (PackerType.valueOf(packerType)) {
             case docker:
                 try {
-                    appStatus = dockerAppServiceImpl.status(appId);
+                    appStatus = dockerAppServiceImpl.start(appId);
                 } catch (DockerException e) {
                     return RpcResult.fail(ExceptionUtil.errorMsg(e));
                 }

+ 21 - 18
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/StatusController.java

@@ -10,6 +10,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Map;
+
 /**
  * @author reghao
  * @date 2020-02-28 11:33:23
@@ -34,47 +36,48 @@ public class StatusController {
         return ResponseEntity.ok().body(WebResult.success(pageList));
     }
 
-    @ApiOperation(value = "获取指定主机上应用的所有日志文件")
-    @GetMapping("/logs")
-    public ResponseEntity<String> appLogs(@RequestParam("appId") String appId,
-                                          @RequestParam("host") String host) throws Exception {
+    @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("/logs/content")
-    public ResponseEntity<String> appLog(@RequestParam("appId") String appId,
-                                         @RequestParam("logType") String logType,
-                                         @RequestParam("logLevel") String logLevel,
-                                         @RequestParam("logName") String logName) throws Exception {
+    @ApiOperation(value = "获取指定主机上应用的所有日志文件")
+    @GetMapping("/log/files")
+    public ResponseEntity<String> appLogFiles(@RequestParam("appId") String appId, @RequestParam("host") String host) {
+
         return ResponseEntity.ok().body("WebResult.success(logs)");
     }
 
     @ApiOperation(value = "某个已部署应用的运行状态")
     @GetMapping("/{appId}")
     public ResponseEntity<String> appStatus(@PathVariable("appId") String appId) {
-        AppStatus appStatus = statusService.appStatus(appId);
-        return ResponseEntity.ok().body(WebResult.success(appStatus));
+        Map<String, AppStatus> map = statusService.appStatus(appId);
+        return ResponseEntity.ok().body(WebResult.success(map));
     }
 
     @ApiOperation(value = "重启应用")
     @PostMapping("/restart/{appId}")
     public ResponseEntity<String> restart(@PathVariable("appId") String appId) {
-        AppStatus appStatus = statusService.restart(appId);
-        return ResponseEntity.ok().body(WebResult.success(appStatus));
+        Map<String, AppStatus> map = statusService.restart(appId);
+        return ResponseEntity.ok().body(WebResult.success(map));
     }
 
     @ApiOperation(value = "停止应用")
     @PostMapping("/stop/{appId}")
     public ResponseEntity<String> stop(@PathVariable("appId") String appId) {
-        AppStatus appStatus = statusService.stop(appId);
-        return ResponseEntity.ok().body(WebResult.success(appStatus));
+        Map<String, AppStatus> map = statusService.stop(appId);
+        return ResponseEntity.ok().body(WebResult.success(map));
     }
 
     @ApiOperation(value = "启动应用")
     @PostMapping("/start/{appId}")
     public ResponseEntity<String> start(@PathVariable("appId") String appId) {
-        AppStatus appStatus = statusService.start(appId);
-        return ResponseEntity.ok().body(WebResult.success(appStatus));
+        Map<String, AppStatus> map = statusService.start(appId);
+        return ResponseEntity.ok().body(WebResult.success(map));
     }
 }

+ 48 - 26
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/AppStatusService.java

@@ -8,6 +8,7 @@ import cn.reghao.autodop.common.dagent.app.api.data.AppIdArgs;
 import cn.reghao.autodop.common.dagent.app.api.data.log.AppLogArgs;
 import cn.reghao.autodop.common.dagent.app.api.data.log.LogLevel;
 import cn.reghao.autodop.common.dagent.app.api.data.log.LogType;
+import cn.reghao.autodop.common.utils.serializer.JsonArrayDeserializer;
 import cn.reghao.autodop.common.utils.serializer.JsonConverter;
 import cn.reghao.autodop.dmaster.app.cache.BuildDeployCache;
 import cn.reghao.autodop.dmaster.app.entity.config.orchestration.AppOrchestration;
@@ -20,6 +21,7 @@ import cn.reghao.autodop.dmaster.common.db.PageList;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -71,76 +73,96 @@ public class AppStatusService {
         Map<String, RpcResult> rpcResultMap = callService.call(mqMessages);
         rpcResultMap.forEach((machineId, rpcResult) -> {
             if (rpcResult.getStatusCode() == 0) {
-
+                String result = rpcResult.getResult();
+                System.out.println();
             }
         });
 
         return null;
     }
 
-    public List<String> logContent(String appId) {
+    public List<String> logContent(String appId, String logType, String logLevel) {
         AppOrchestration app = cache.findByAppId(appId);
+        List<LogConfig> logs = app.getRunningConfig().getLogs();
 
         List<MqMessage> mqMessages = new ArrayList<>();
         for (DeployConfig deployConfig : app.getDeployConfigs()) {
-            AppIdArgs appIdArgs = new AppIdArgs(app.getBuildConfig().getPackerConfig().getType(), appId);
+            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.appStatusOps.name());
-            mqMessage.setPayload(JsonConverter.objectToJson(appIdArgs));
+            mqMessage.setOps(AppOps.appLogOps.name());
+            mqMessage.setPayload(JsonConverter.objectToJson(appLogArgs));
             mqMessages.add(mqMessage);
         }
 
         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();
             }
         });
 
         return null;
     }
 
-    public AppStatus appStatus(String appId) {
+    public Map<String, AppStatus> appStatus(String appId) {
+        AppOrchestration app = cache.findByAppId(appId);
+        return getAppStatusMap(app, AppOps.appStatusOps);
+    }
+
+    public Map<String, AppStatus> restart(String appId) {
+        AppOrchestration app = cache.findByAppId(appId);
+        return getAppStatusMap(app, AppOps.appRestartOps);
+    }
+
+    public Map<String, AppStatus> stop(String appId) {
+        AppOrchestration app = cache.findByAppId(appId);
+        return getAppStatusMap(app, AppOps.appStopOps);
+    }
+
+    public Map<String, AppStatus> start(String appId) {
         AppOrchestration app = cache.findByAppId(appId);
+        return getAppStatusMap(app, AppOps.appStartOps);
+    }
 
+    private Map<String, AppStatus> getAppStatusMap(AppOrchestration app, AppOps appOps) {
         List<MqMessage> mqMessages = new ArrayList<>();
         for (DeployConfig deployConfig : app.getDeployConfigs()) {
-            AppIdArgs appIdArgs = new AppIdArgs(app.getBuildConfig().getPackerConfig().getType(), appId);
+            AppIdArgs appIdArgs = new AppIdArgs(app.getBuildConfig().getPackerConfig().getType(), app.getAppId());
 
             MqMessage mqMessage = new MqMessage();
             mqMessage.setMachineId(deployConfig.getMachineId());
             mqMessage.setSendTime(System.currentTimeMillis());
             mqMessage.setRpc(true);
             mqMessage.setType(MessageType.appType.name());
-            mqMessage.setOps(AppOps.appStatusOps.name());
+            mqMessage.setOps(appOps.name());
             mqMessage.setPayload(JsonConverter.objectToJson(appIdArgs));
             mqMessages.add(mqMessage);
         }
 
+        Map<String, AppStatus> map = new HashMap<>();
         Map<String, RpcResult> rpcResultMap = callService.call(mqMessages);
-        rpcResultMap.forEach((machineId, rpcResult) -> {
+        for (Map.Entry<String, RpcResult> entry : rpcResultMap.entrySet()) {
+            String machineId = entry.getKey();
+            RpcResult rpcResult = entry.getValue();
             if (rpcResult.getStatusCode() == 0) {
-
+                AppStatus appStatus =
+                        (AppStatus) JsonConverter.jsonToObject(rpcResult.getResult(), AppStatus.class);
+                appStatus.setEnv(app.getEnv());
+                map.put(machineId, appStatus);
             }
-        });
-
-        return null;
-    }
-
-    public AppStatus restart(String appId) {
-        return null;
-    }
-
-    public AppStatus stop(String appId) {
-        return null;
-    }
-
-    public AppStatus start(String appId) {
-        return null;
+        }
+        return map;
     }
 }