From a9b01d5e2433a1afdd9683d92ccb2f7f3b1cc9a0 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期四, 25 四月 2024 17:17:13 +0800
Subject: [PATCH] 本地日志根据修改时间排序
---
Source/UBCS/ubcs-service/ubcs-deploy/src/main/java/com/vci/ubcs/deploy/service/impl/DeployAppsServiceImpl.java | 99 +++++++++++++++++++++++++++++++++++++++----------
1 files changed, 79 insertions(+), 20 deletions(-)
diff --git a/Source/UBCS/ubcs-service/ubcs-deploy/src/main/java/com/vci/ubcs/deploy/service/impl/DeployAppsServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-deploy/src/main/java/com/vci/ubcs/deploy/service/impl/DeployAppsServiceImpl.java
index a641db4..c1f0c39 100644
--- a/Source/UBCS/ubcs-service/ubcs-deploy/src/main/java/com/vci/ubcs/deploy/service/impl/DeployAppsServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-deploy/src/main/java/com/vci/ubcs/deploy/service/impl/DeployAppsServiceImpl.java
@@ -15,10 +15,13 @@
import com.vci.ubcs.deploy.service.IDeployAppsService;
import com.vci.ubcs.deploy.vo.DeployAppsVO;
import com.vci.ubcs.starter.util.HttpUtils;
+import jodd.io.StreamGobbler;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.WebUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.client.ServiceInstance;
@@ -30,16 +33,22 @@
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
+import java.net.InetAddress;
import java.net.URL;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -167,18 +176,18 @@
if(deployAppsVO.getName().isEmpty()){
throw new ServiceException("缂哄皯蹇呬紶鍙傛暟name");
}
- DeployApps deployApps = deployAppsMapper.selectOne(Wrappers.<DeployApps>query().lambda().eq(DeployApps::getServerName, deployAppsVO.getName()));
+ List<DeployApps> deployApps = deployAppsMapper.selectList(Wrappers.<DeployApps>query().lambda().eq(DeployApps::getServerName, deployAppsVO.getName()));
if(Func.isNotEmpty(deployApps)){
- return deployApps;
+ return deployApps.get(0);
}
// 鏈粠搴撲腑鏌ヨ鍒帮紝闇�瑕佺敓鎴愭湇鍔′俊鎭繚瀛橀粯璁や俊鎭埌搴撲腑
DeployApps defaultDeployApps = new DeployApps();
- defaultDeployApps.setLogPath(PARENTPATH + "\\" + deployAppsVO.getName().replace("-","_") + LOGPATH);
+ defaultDeployApps.setLogPath(PARENTPATH + SEPARATOR + deployAppsVO.getName().replace("-","_") + LOGPATH);
defaultDeployApps.setServerName(deployAppsVO.getName());
defaultDeployApps.setStartCmd(CmdConfigEnum.START_CMD.getValue() + deployAppsVO.getName());
defaultDeployApps.setStopCmd(CmdConfigEnum.STOP_CMD.getValue() + deployAppsVO.getName());
defaultDeployApps.setRestartCmd(CmdConfigEnum.RESTART_CMD.getValue() + deployAppsVO.getName());
- defaultDeployApps.setServerPath(PARENTPATH + "\\" + deployAppsVO.getName().replace("-","_"));
+ defaultDeployApps.setServerPath(PARENTPATH + SEPARATOR + deployAppsVO.getName().replace("-","_"));
int eft = deployAppsMapper.insert(defaultDeployApps);
if (!SqlHelper.retBool(eft)) {
throw new ServiceException("鐢熸垚榛樿鏈嶅姟淇℃伅鍒板簱涓椂澶辫触锛�");
@@ -193,9 +202,12 @@
* @throws ServiceException
*/
@Override
- public boolean saveOrUpdateServiceInfo(DeployAppsVO deployAppsVO) throws ServiceException {
- boolean b = this.saveOrUpdate(deployAppsVO);
- return b;
+ public R saveOrUpdateServiceInfo(DeployAppsVO deployAppsVO) throws ServiceException {
+ boolean checkBoolean = checkCmdVer(deployAppsVO.getStartCmd()) && checkCmdVer(deployAppsVO.getStopCmd()) && checkCmdVer(deployAppsVO.getRestartCmd());
+ if(checkBoolean){
+ return R.fail("閰嶇疆鐨勫懡浠や腑鍖呭惈鍗遍櫓鍛戒护锛屽锛歳m銆乵v銆乺m -rf銆乧hmod绛夊懡浠ゅ拰鍏抽敭瀛楋紒 ");
+ }
+ return R.status(this.saveOrUpdate(deployAppsVO));
}
/**
@@ -209,6 +221,10 @@
if (Func.isBlank(deployApps.getServerName()) || Func.isBlank(deployApps.getServerPath())) {
throw new ServiceException("蹇呬紶鍙傛暟[鏈嶅姟鍚嶇О锛屾湇鍔″瓨鏀捐矾寰刔涓嶈兘涓虹┖");
}
+ List<DeployApps> deployAppsList = deployAppsMapper.selectList(Wrappers.<DeployApps>query().lambda().eq(DeployApps::getServerName, deployApps.getServerName()));
+ if (!deployAppsList.isEmpty()) {
+ throw new ServiceException("鏂板鏈嶅姟鐨勬湇鍔″悕閲嶅锛�");
+ }
return SqlHelper.retBool(deployAppsMapper.insert(deployApps));
}
@@ -219,7 +235,7 @@
* @return
*/
@Override
- public R importClassify(MultipartFile[] files, String serverName) throws ServiceException {
+ public R importJarUpdate(MultipartFile[] files, String serverName) throws ServiceException {
// 鏍规嵁鏈嶅姟鍚嶆煡鐪嬪埌鏈嶅姟鐩稿叧淇℃伅
List<DeployApps> deployAppsDB = deployAppsMapper.selectList(Wrappers.<DeployApps>query().lambda().eq(DeployApps::getServerName, serverName));
if(deployAppsDB.isEmpty()){
@@ -238,12 +254,12 @@
String backName = "";
String fileType = "file";
// 鏄帇缂╂枃浠�,鍥犱负鍙細瀛樺湪涓ょ鎯呭喌锛屾枃浠跺悕鏄帇缂╂枃浠讹紝鎴栬�呮枃浠讹紙.jar绫诲瀷鐨勬枃浠讹級
+ // 褰撳墠鏃堕棿
+ String currentDateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
if (file.getContentType().equals("application/zip") || file.getContentType().equals("application/x-zip-compressed")) {
- backName = file.getOriginalFilename().replace(".zip","_"+Func.formatDate(new Date()));
- fileType = "zip";
+ backName = file.getOriginalFilename().replace(".zip","_" + currentDateTime);
}else{
- backName = file.getOriginalFilename().replace(".","_"+Func.formatDate(new Date())+".");
- fileType = "file";
+ backName = file.getOriginalFilename().replace(".","_" + currentDateTime + ".");
}
File source = new File(deployAppsDB.get(0).getServerPath() + this.SEPARATOR + file.getOriginalFilename().replace(".zip", ""));
File destination = new File(deployAppsDB.get(0).getFileBack() + this.SEPARATOR + backName);
@@ -288,7 +304,7 @@
file1.delete();
}
}
- String output = excute(deployAppsDB.get(0),"UP");
+ String output = execute(deployAppsDB.get(0),"UP");
return R.success(output.toString());
} catch (IOException e) {
e.printStackTrace();
@@ -311,7 +327,7 @@
if(deployAppsDB.isEmpty()){
return R.fail("鍛戒护鎵ц鍑洪敊锛屽簱涓湭鎵惧埌"+ deployAppsVO.getName() +"鏈嶅姟鐩稿叧閰嶇疆锛�" );
}
- excuteRes = excute(deployAppsDB.get(0),deployAppsVO.getStatus());
+ excuteRes = execute(deployAppsDB.get(0),deployAppsVO.getStatus());
return R.success("鍛戒护鎵ц缁撴潫锛�"+excuteRes);
}catch (Exception e){
throw new ServiceException(e.getMessage());
@@ -324,7 +340,7 @@
* @return
* @throws ServiceException
*/
- private String excute(DeployApps deployApps,String type) throws ServiceException {
+ public String execute(DeployApps deployApps,String type) throws ServiceException {
// 澶勭悊涓婁紶鏂囦欢鐨勯�昏緫
StringBuilder output = new StringBuilder();
try {
@@ -337,17 +353,42 @@
if(Func.isEmpty(cmd)){
return "The executed command is empty";
}
+ if(checkCmdVer(cmd)){
+ return "閰嶇疆鐨勫懡浠や腑鍖呭惈鍗遍櫓鍛戒护锛屽锛歳m銆乵v銆乺m -rf銆乧hmod绛夊懡浠ゅ拰鍏抽敭璇嶏紒 ";
+ }
// 鎵цLinux鍛戒护
- Process process = Runtime.getRuntime().exec(cmd);
+ log.info("寮�濮嬫墽琛屽懡浠わ細"+cmd);
+ // Process process = Runtime.getRuntime().exec(cmd);
+ ProcessBuilder processBuilder = new ProcessBuilder(cmd.split("\\s"));
+ // processBuilder.command(cmd);
+ Process process = processBuilder.start();
+ // 绛夊緟鍛戒护鎵ц瀹屾垚
+ int exitCode = process.waitFor();
+
+ InputStream inputStream = process.getInputStream();
+ OutputStream outputStream = process.getOutputStream();
+ InputStream errorStream = process.getErrorStream();
// 璇诲彇鍛戒护鎵ц缁撴灉
- BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+ BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
output.append(line).append("\n");
}
- // 绛夊緟鍛戒护鎵ц瀹屾垚
- int exitCode = process.waitFor();
- log.info("鍛戒护鎵ц缁撴灉锛�" + output.toString());
+ reader.close();
+
+ // 璇诲彇鍛戒护鎵ц鐨勯敊璇緭鍑烘祦
+ BufferedReader errorReader = new BufferedReader(new InputStreamReader(errorStream));
+ StringBuilder errorOutput = new StringBuilder();
+ String errorLine;
+ while ((errorLine = errorReader.readLine()) != null) {
+ errorOutput.append(errorLine).append("\n");
+ }
+ String errorOutputString = errorOutput.toString();
+ errorReader.close();
+
+ log.info("閿欒杈撳嚭锛�" + errorOutputString);
+ int exitValue = process.exitValue();
+ log.info("鍛戒护鎵ц缁撴灉锛�" + output.toString()+":"+exitCode+","+exitValue);
return output.toString();
}catch (IOException | InterruptedException e){
e.printStackTrace();
@@ -395,4 +436,22 @@
return "8080";
}
+ /**
+ * 鍚姩銆佸仠姝€�侀噸鍚懡浠ゆ牎楠�
+ * @param cmd
+ * @return true: 鍖呭惈楂橀闄╁懡浠わ紝 false锛氫笉鍖呭惈
+ */
+ private boolean checkCmdVer(String cmd){
+ if(Func.isEmpty(cmd)){
+ return false;
+ }
+ String[] highRiskCommands = {"rm", "rmdir", "mv", "unlink", "rm -rf", "mv -rf", "dd", "chmod", "chown", "mkfs", "shutdown", "reboot", "kill"};
+ for(String highRiskCmd : highRiskCommands){
+ if(cmd.contains(highRiskCmd)){
+ return true;
+ }
+ }
+ return false;
+ }
+
}
--
Gitblit v1.9.3