|
|
@@ -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();
|