Bladeren bron

日志管理功能代码提交

jingyuanchao 1 jaar geleden
bovenliggende
commit
de6f07ed5e

+ 8 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteFileService.java

@@ -2,6 +2,7 @@ package com.xunmei.system.api;
 
 import com.xunmei.common.core.constant.ServiceNameConstants;
 import com.xunmei.common.core.domain.R;
+import com.xunmei.common.core.domain.file.dto.FileUploadByByteDto;
 import com.xunmei.common.core.domain.registerbook.dto.CoreRegisterBookPdfExportDto;
 import com.xunmei.common.core.domain.registerbook.dto.ExportPdfDto;
 import com.xunmei.system.api.domain.AccessPdf;
@@ -14,6 +15,7 @@ import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -103,4 +105,10 @@ public interface RemoteFileService {
 
     @PostMapping(value = "/file/deleted")
     void deletedFile(@RequestBody Map<String,String> data);
+
+    @PostMapping(value = "/file/uploadFileByte")
+    void uploadFileByte(@RequestBody FileUploadByByteDto fileUploadByByteDto);
+
+    @GetMapping(value = "/file/checkFileExit")
+    List<String> checkFileExit(@RequestParam("serverName") String serverName);
 }

+ 13 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteFileFallbackFactory.java

@@ -2,6 +2,7 @@ package com.xunmei.system.api.factory;
 
 import com.alibaba.fastjson2.JSON;
 import com.xunmei.common.core.domain.R;
+import com.xunmei.common.core.domain.file.dto.FileUploadByByteDto;
 import com.xunmei.common.core.domain.registerbook.dto.CoreRegisterBookPdfExportDto;
 import com.xunmei.common.core.domain.registerbook.dto.ExportPdfDto;
 import com.xunmei.system.api.RemoteFileService;
@@ -15,6 +16,8 @@ import org.springframework.cloud.openfeign.FallbackFactory;
 import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -106,6 +109,16 @@ public class RemoteFileFallbackFactory implements FallbackFactory<RemoteFileServ
             public void deletedFile(Map<String, String> data) {
 
             }
+
+            @Override
+            public void uploadFileByte(FileUploadByByteDto fileUploadByByteDto) {
+
+            }
+
+            @Override
+            public List<String> checkFileExit(String serverName) {
+                return new ArrayList<>();
+            }
         };
     }
 }

+ 18 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/file/dto/FileUploadByByteDto.java

@@ -0,0 +1,18 @@
+package com.xunmei.common.core.domain.file.dto;
+
+import lombok.Data;
+
+/**
+ * @author jingyuanchao
+ * @date 2024/10/11 10:05
+ */
+@Data
+public class FileUploadByByteDto {
+    private byte[] fileByte;
+
+    private String fileName;
+
+    private String filePath;
+
+    private String serverName;
+}

+ 13 - 0
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/controller/SysFileController.java

@@ -2,6 +2,7 @@ package com.xunmei.file.controller;
 
 import cn.hutool.core.util.ObjectUtil;
 import com.xunmei.common.core.domain.R;
+import com.xunmei.common.core.domain.file.dto.FileUploadByByteDto;
 import com.xunmei.common.core.domain.registerbook.dto.CoreRegisterBookPdfExportDto;
 import com.xunmei.common.core.domain.registerbook.dto.ExportPdfDto;
 import com.xunmei.common.core.utils.file.FileUtils;
@@ -21,6 +22,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
@@ -246,4 +248,15 @@ public class SysFileController {
         }
         sysFileService.deletedFileByPath(filePath);
     }
+
+    @PostMapping(value = "/uploadFileByte")
+    void uploadFileByte(@RequestBody FileUploadByByteDto fileUploadByByteDto){
+        sysFileService.uploadFileByte(fileUploadByByteDto);
+    }
+
+    @GetMapping(value = "/checkFileExit")
+    List<String> checkFileExit(@RequestParam("serverName") String serverName){
+        return sysFileService.checkFileExit(serverName);
+    }
+
 }

+ 5 - 0
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/ISysFileService.java

@@ -1,5 +1,6 @@
 package com.xunmei.file.service;
 
+import com.xunmei.common.core.domain.file.dto.FileUploadByByteDto;
 import com.xunmei.common.core.domain.registerbook.dto.CoreRegisterBookPdfExportDto;
 import com.xunmei.common.core.domain.registerbook.dto.ExportPdfDto;
 import com.xunmei.file.vo.FileBase64Vo;
@@ -10,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -82,4 +84,7 @@ public interface ISysFileService
 
     void deletedFileByPath(String filePath);
 
+    void uploadFileByte(FileUploadByByteDto fileUploadByByteDto);
+
+    List<String> checkFileExit(String serverName);
 }

+ 45 - 9
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/LocalSysFileServiceImpl.java

@@ -14,6 +14,7 @@ import com.lowagie.text.pdf.PdfPTable;
 import com.lowagie.text.pdf.PdfWriter;
 import com.xunmei.common.core.constant.CacheConstants;
 import com.xunmei.common.core.domain.IdName;
+import com.xunmei.common.core.domain.file.dto.FileUploadByByteDto;
 import com.xunmei.common.core.domain.registerbook.dto.CoreRegisterBookPdfExportDto;
 import com.xunmei.common.core.domain.registerbook.dto.ExportPdfDto;
 import com.xunmei.common.core.domain.registerbook.vo.CoreRegisterBookPdfPageVo;
@@ -83,6 +84,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
     private static final Logger log = LoggerFactory.getLogger(LocalSysFileServiceImpl.class);
 
     public static final String TEMP_DIR_NAME = "registerBookPdfBatchExportTempDir";
+    public static final String LOGS_DIR = "/log";
 
     @Value("${file.path}")
     private String localFilePath;
@@ -167,7 +169,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
     }
 
     @Override
-    public void downloadFile(HttpServletResponse response, String filePath,String realName) {
+    public void downloadFile(HttpServletResponse response, String filePath, String realName) {
         ByteArrayOutputStream out = null;
         try {
             filePath = localFilePath + filePath;
@@ -175,7 +177,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
             out = FileDownUtils.downloadFile(filePath);
             String fileSuffix = FileDownUtils.getFileSuffix(filePath);
             String formFileName = UUID.randomUUID().toString() + fileSuffix;
-            if (StringUtils.isNotEmpty(realName)){
+            if (StringUtils.isNotEmpty(realName)) {
                 formFileName = realName;
             }
             String userAgent = request.getHeader("User-Agent");
@@ -335,11 +337,10 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         PdfUtil.createPDFCell(titleFont, table, "调阅人签字", Element.ALIGN_MIDDLE, 4, 1);
         List<String> list = new ArrayList<>();
         list.add(data.getSignImg());
-        dealImageCell(list, table, 1, 80, 30,15,1);
+        dealImageCell(list, table, 1, 80, 30, 15, 1);
 
         PdfUtil.createPDFCell(titleFont, table, data.getTaskTimes(), Element.ALIGN_MIDDLE, 19, 1);
-        PdfUtil.dealAccessTimes(document,table, tableFont, titleFont,data.getTimes());
-
+        PdfUtil.dealAccessTimes(document, table, tableFont, titleFont, data.getTimes());
 
 
         PdfUtil.createPDFCell(titleFont, table, "监控调阅情况", Element.ALIGN_MIDDLE, 19, 1);
@@ -958,17 +959,18 @@ public class LocalSysFileServiceImpl implements ISysFileService {
     @Override
     public void deletedFileByPath(String filePath) {
         File file = new File(getAbsolutePath(filePath));
-        if (file.exists()){
+        if (file.exists()) {
             file.delete();
         }
 
     }
+
     //把 /static开头的地址 转换成绝对地址
-    private String getAbsolutePath(String filePath){
-        if (ObjectUtil.isEmpty(filePath)){
+    private String getAbsolutePath(String filePath) {
+        if (ObjectUtil.isEmpty(filePath)) {
             return StringUtil.EMPTY_STRING;
         }
-        if (!filePath.startsWith(this.prefix)){
+        if (!filePath.startsWith(this.prefix)) {
             return StringUtil.EMPTY_STRING;
         }
         String path = filePath.replace(this.prefix, "");
@@ -1014,7 +1016,41 @@ public class LocalSysFileServiceImpl implements ISysFileService {
                 return r;
             }
         }
+    }
+
+
+    @Override
+    public void uploadFileByte(FileUploadByByteDto fileUploadByByteDto) {
+        final String currentServerLogDir = localFilePath + LOGS_DIR + File.separator + fileUploadByByteDto.getServerName() +  File.separator + fileUploadByByteDto.getFilePath();
+        final File file = new File(currentServerLogDir);
+        if (!file.exists()) {
+            file.mkdirs();
+        }
+        FileUtil.writeBytes(fileUploadByByteDto.getFileByte(), currentServerLogDir + File.separator + fileUploadByByteDto.getFileName());
+    }
+
+    @Override
+    public List<String> checkFileExit(String serverName) {
+        List<String> exitFileList = new ArrayList<>();
+        final String errorDir = localFilePath + LOGS_DIR + File.separator + serverName + File.separator + "error";
+        final String infoDir = localFilePath + LOGS_DIR + File.separator + serverName + File.separator + "info";
+        findFileName(exitFileList, errorDir);
 
+        findFileName(exitFileList, infoDir);
 
+
+        return exitFileList;
+    }
+
+    private void findFileName(List<String> exitFileList, String fileDir) {
+        final File file = new File(fileDir);
+        if (file.exists()) {
+            final File[] files = file.listFiles();
+            if (files != null) {
+                for (File f : files) {
+                    exitFileList.add(f.getName());
+                }
+            }
+        }
     }
 }

+ 5 - 4
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysServerController.java

@@ -7,6 +7,7 @@ import com.xunmei.common.log.annotation.Log;
 import com.xunmei.common.log.enums.BusinessType;
 import com.xunmei.system.dto.server.SysServerEditDto;
 import com.xunmei.system.dto.server.SysServerPageDto;
+import com.xunmei.system.dto.server.TransferLogDto;
 import com.xunmei.system.service.ISysServerService;
 import com.xunmei.system.vo.server.SysServerPageVo;
 import io.swagger.annotations.Api;
@@ -72,9 +73,9 @@ public class SysServerController extends BaseController {
     }
 
     @ApiOperation(value = "转存目标服务器上的日志")
-    @GetMapping("/transferLog/{serverId}/{checkId}")
-    public AjaxResult transferLog(@PathVariable Long serverId, @PathVariable Long checkId) {
-        Object logs = sysServerService.getLogList(serverId,checkId);
-        return success(logs);
+    @PostMapping("/transferLog")
+    public AjaxResult transferLog(@RequestBody TransferLogDto req) {
+        sysServerService.transferLog(req);
+        return success();
     }
 }

+ 3 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysServerService.java

@@ -5,6 +5,7 @@ import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.system.domain.SysServer;
 import com.xunmei.system.dto.server.SysServerEditDto;
 import com.xunmei.system.dto.server.SysServerPageDto;
+import com.xunmei.system.dto.server.TransferLogDto;
 import com.xunmei.system.vo.server.CheckListVo;
 import com.xunmei.system.vo.server.SysServerPageVo;
 
@@ -74,4 +75,6 @@ public interface ISysServerService extends IService<SysServer> {
      */
     Object getLogList(Long serverId,Long checkId);
     List<CheckListVo> getServerList(Long serverId);
+
+    void transferLog(TransferLogDto req);
 }

+ 57 - 18
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysServerServiceImpl.java

@@ -1,6 +1,5 @@
 package com.xunmei.system.service.impl;
 
-import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.http.HttpException;
 import cn.hutool.http.HttpRequest;
@@ -12,14 +11,17 @@ import com.alibaba.fastjson2.TypeReference;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.domain.file.dto.FileUploadByByteDto;
 import com.xunmei.common.core.thread.ThreadPoolConfig;
 import com.xunmei.common.core.util.BeanHelper;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.security.utils.SecurityUtils;
+import com.xunmei.system.api.RemoteFileService;
 import com.xunmei.system.domain.SysServer;
 import com.xunmei.system.dto.server.SysServerEditDto;
 import com.xunmei.system.dto.server.SysServerPageDto;
+import com.xunmei.system.dto.server.TransferLogDto;
 import com.xunmei.system.mapper.SysServerMapper;
 import com.xunmei.system.service.ISysServerService;
 import com.xunmei.system.vo.server.CheckListVo;
@@ -35,10 +37,12 @@ import org.springframework.transaction.annotation.Transactional;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
+import java.util.stream.Collectors;
 
 /**
  * 服务器维护Service业务层处理
@@ -51,7 +55,8 @@ public class SysServerServiceImpl extends ServiceImpl<SysServerMapper, SysServer
 
     @Autowired
     private SysServerMapper sysServerMapper;
-
+    @Autowired
+    private RemoteFileService fileService;
     @Autowired
     @Qualifier(ThreadPoolConfig.SOC_EXECUTOR)
     private ThreadPoolTaskExecutor threadPoolTaskExecutor;
@@ -121,31 +126,65 @@ public class SysServerServiceImpl extends ServiceImpl<SysServerMapper, SysServer
                 .execute();
         String serverJson = response.body();
         List<FileInfoVo> checks = JSONArray.parseArray(serverJson, FileInfoVo.class);
+        final boolean match = checks.stream().anyMatch(file -> ObjectUtil.equal(2, file.getFileType()));
+        List<FileInfoVo> res = new ArrayList<>();
+        if (match) {
+            final List<FileInfoVo> list = checks.stream().filter(file -> ObjectUtil.equal(2, file.getFileType())).collect(Collectors.toList());
+            for (FileInfoVo fileInfoVo : list) {
+                res.add(fileInfoVo);
+                fileInfoVo.setChildren(checks.stream().filter(r -> ObjectUtil.equal(fileInfoVo.getId(), r.getParentId())).collect(Collectors.toList()));
+            }
+            return res;
+        } else {
+            res.add(buildDir("info", checks));
+            res.add(buildDir("error", checks));
+            return res;
+        }
+        /*List<String> exitFileNameList = fileService.checkFileExit(server.getServerIp());
+        if (CollectionUtil.isNotEmpty(checks)) {
+            for (FileInfoVo check : checks) {
+                if (exitFileNameList.contains(check.getFileName()))
+                    check.setExit(1);
+            }
+        }*/
+    }
 
-
-        return checks;
+    private FileInfoVo buildDir(String dirName, List<FileInfoVo> list) {
+        FileInfoVo fileInfoVo = new FileInfoVo();
+        fileInfoVo.setFileName(dirName);
+        fileInfoVo.setFileSize("-");
+        fileInfoVo.setPath(dirName);
+        fileInfoVo.setFileType(2);
+        fileInfoVo.setId(UUID.randomUUID().toString());
+        fileInfoVo.setChildren(list.stream().filter(r -> r.getFileName().contains(dirName)).collect(Collectors.toList()));
+        return fileInfoVo;
     }
 
-    public static void saveRemoteLogToLocal() {
-        String path = "your_path";
-        String parentPath = "your_parent_path";
-        String rootDir = "your_root_dir";
-        String downloadUrl = "http://your_server/fileDownload?path=" + path + "&parentPath=" + parentPath + "&rootDir=" + rootDir;
+    @Override
+    public void transferLog(TransferLogDto req) {
+        final SysServer sysServer = getById(req.getServerId());
+        if (ObjectUtil.isNull(sysServer)) {
+            throw new RuntimeException("服务器信息不存在");
+        }
+
+        saveRemoteLogToLocal(sysServer, req.getPath(), req.getParentPath(), req.getRootDir());
+    }
 
+    private void saveRemoteLogToLocal(SysServer server, String path, String parentPath, String rootDir) {
+        String downloadUrl = "http://" + server.getServerIp() + ":" + server.getServerPort() + "/result/fileDownload?path=" + path + "&parentPath=" + parentPath + "&rootDir=" + rootDir;
         try {
             final HttpRequest request = HttpUtil.createGet(downloadUrl);
             HttpResponse response = request.execute();
 
-            // Check if the request was successful
             if (response.getStatus() == 200) {
-                String fileName = response.header("Content-Disposition");
-                fileName = fileName.substring(fileName.indexOf("filename=") + 10, fileName.length() - 1);
-
-                // Save the file
-                FileUtil.writeBytes(response.bodyBytes(), fileName);
-                System.out.println("File downloaded successfully: " + fileName);
-            } else {
-                System.out.println("No file to download. Server replied HTTP code: " + response.getStatus());
+                FileUploadByByteDto fileUploadByByteDto = new FileUploadByByteDto();
+                fileUploadByByteDto.setFileByte(response.bodyBytes());
+                fileUploadByByteDto.setFileName(path);
+                fileUploadByByteDto.setFilePath(parentPath.split("logs")[1]);
+                fileUploadByByteDto.setServerName(server.getServerIp());
+                //远程调用文件服务上传流 到指定目录保持为文件
+                fileService.uploadFileByte(fileUploadByByteDto);
+
             }
         } catch (Exception e) {
             e.printStackTrace();

+ 4 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/vo/server/FileInfoVo.java

@@ -5,6 +5,8 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
 
 @Data
 @AllArgsConstructor
@@ -49,5 +51,7 @@ public class FileInfoVo implements Serializable {
      * 父级id
      */
     private String createTime = "";
+
+    private List<FileInfoVo> children=new ArrayList<>();
 }