From cbe1b6f52d1bca4e38df5926accbfa6f8c7be58b Mon Sep 17 00:00:00 2001 From: lijiahang Date: Tue, 24 May 2022 08:39:08 +0800 Subject: [PATCH] upgrade orion kit version. --- .../controller/MachineTerminalController.java | 2 +- .../orion/ops/controller/SftpController.java | 6 +- .../orion/ops/dao/ApplicationMachineDAO.java | 2 +- .../ops/entity/vo/sftp/FileDetailVO.java | 2 +- .../app/action/AbstractActionHandler.java | 4 +- .../action/AbstractTransferActionHandler.java | 36 --------- .../app/action/CommandActionHandler.java | 14 ++-- .../app/action/MachineActionStore.java | 15 ++-- .../app/action/ScpTransferActionHandler.java | 40 +++++----- .../app/action/SftpTransferActionHandler.java | 40 +++++++--- .../app/machine/BuildMachineProcessor.java | 2 +- .../app/machine/ReleaseMachineProcessor.java | 2 +- .../ops/handler/exec/CommandExecHandler.java | 42 +++++++--- .../scheduler/machine/TaskMachineHandler.java | 38 ++++++--- .../handler/sftp/FileTransferProcessor.java | 11 +-- .../handler/sftp/SftpBasicExecutorHolder.java | 4 +- .../orion/ops/handler/sftp/SftpSupport.java | 33 +++++++- .../handler/sftp/direct/DirectDownloader.java | 6 +- .../sftp/impl/DownloadFileProcessor.java | 24 +----- .../sftp/impl/UploadFileProcessor.java | 24 +----- .../tail/impl/ExecTailFileHandler.java | 20 ++--- .../terminal/TerminalMessageHandler.java | 2 +- .../terminal/TerminalOperateHandler.java | 18 ++--- .../ops/runner/LoadSecretMachineKey.java | 2 +- .../ops/service/api/MachineInfoService.java | 2 +- .../service/impl/BatchUploadServiceImpl.java | 2 +- .../service/impl/MachineInfoServiceImpl.java | 80 ++++++++++++++----- .../service/impl/MachineKeyServiceImpl.java | 2 +- .../impl/MachineTerminalServiceImpl.java | 5 +- .../ops/service/impl/SftpServiceImpl.java | 16 ++-- .../ops/service/impl/SystemServiceImpl.java | 2 +- 31 files changed, 272 insertions(+), 226 deletions(-) delete mode 100644 orion-ops-service/src/main/java/com/orion/ops/handler/app/action/AbstractTransferActionHandler.java diff --git a/orion-ops-service/src/main/java/com/orion/ops/controller/MachineTerminalController.java b/orion-ops-service/src/main/java/com/orion/ops/controller/MachineTerminalController.java index 3c961f83..b5da9e31 100644 --- a/orion-ops-service/src/main/java/com/orion/ops/controller/MachineTerminalController.java +++ b/orion-ops-service/src/main/java/com/orion/ops/controller/MachineTerminalController.java @@ -2,6 +2,7 @@ package com.orion.ops.controller; import com.orion.lang.wrapper.DataGrid; import com.orion.lang.wrapper.Wrapper; +import com.orion.net.remote.TerminalType; import com.orion.ops.annotation.EventLog; import com.orion.ops.annotation.RequireRole; import com.orion.ops.annotation.RestWrapper; @@ -19,7 +20,6 @@ import com.orion.ops.entity.vo.TerminalAccessVO; import com.orion.ops.handler.terminal.manager.TerminalSessionManager; import com.orion.ops.service.api.MachineTerminalService; import com.orion.ops.utils.Valid; -import com.orion.remote.TerminalType; import com.orion.utils.Strings; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; diff --git a/orion-ops-service/src/main/java/com/orion/ops/controller/SftpController.java b/orion-ops-service/src/main/java/com/orion/ops/controller/SftpController.java index d3864536..2f4fd418 100644 --- a/orion-ops-service/src/main/java/com/orion/ops/controller/SftpController.java +++ b/orion-ops-service/src/main/java/com/orion/ops/controller/SftpController.java @@ -1,6 +1,7 @@ package com.orion.ops.controller; import com.orion.id.ObjectIds; +import com.orion.net.base.file.sftp.SftpErrorMessage; import com.orion.ops.annotation.EventLog; import com.orion.ops.annotation.RestWrapper; import com.orion.ops.consts.Const; @@ -18,9 +19,7 @@ import com.orion.ops.service.api.SftpService; import com.orion.ops.utils.Currents; import com.orion.ops.utils.PathBuilders; import com.orion.ops.utils.Valid; -import com.orion.remote.channel.sftp.SftpErrorMessage; import com.orion.utils.Exceptions; -import com.orion.utils.Strings; import com.orion.utils.collect.Lists; import com.orion.utils.io.Files1; import org.springframework.web.bind.annotation.*; @@ -379,8 +378,7 @@ public class SftpController { * @return RuntimeException */ private RuntimeException convertError(RuntimeException e) { - if (SftpErrorMessage.NO_SUCH_FILE.getMessage().toLowerCase().contains(Strings.def(e.getMessage()).toLowerCase())) { - // if (SftpErrorMessage.NO_SUCH_FILE.isCause(e)) { + if (SftpErrorMessage.NO_SUCH_FILE.isCause(e)) { return Exceptions.argument(MessageConst.NO_SUCH_FILE); } else { return e; diff --git a/orion-ops-service/src/main/java/com/orion/ops/dao/ApplicationMachineDAO.java b/orion-ops-service/src/main/java/com/orion/ops/dao/ApplicationMachineDAO.java index 871d78e1..703827e5 100644 --- a/orion-ops-service/src/main/java/com/orion/ops/dao/ApplicationMachineDAO.java +++ b/orion-ops-service/src/main/java/com/orion/ops/dao/ApplicationMachineDAO.java @@ -13,7 +13,7 @@ import com.orion.ops.entity.domain.ApplicationMachineDO; */ public interface ApplicationMachineDAO extends BaseMapper { - /**NO_SUCH_FILE + /** * 更新版本 * * @param update update diff --git a/orion-ops-service/src/main/java/com/orion/ops/entity/vo/sftp/FileDetailVO.java b/orion-ops-service/src/main/java/com/orion/ops/entity/vo/sftp/FileDetailVO.java index 4fd10c4f..7e1ce354 100644 --- a/orion-ops-service/src/main/java/com/orion/ops/entity/vo/sftp/FileDetailVO.java +++ b/orion-ops-service/src/main/java/com/orion/ops/entity/vo/sftp/FileDetailVO.java @@ -1,7 +1,7 @@ package com.orion.ops.entity.vo.sftp; +import com.orion.net.base.file.sftp.SftpFile; import com.orion.ops.consts.Const; -import com.orion.remote.channel.sftp.SftpFile; import com.orion.utils.convert.TypeStore; import com.orion.utils.io.FileType; import com.orion.utils.io.Files1; diff --git a/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/AbstractActionHandler.java b/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/AbstractActionHandler.java index 8ebe575f..8411042c 100644 --- a/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/AbstractActionHandler.java +++ b/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/AbstractActionHandler.java @@ -4,6 +4,7 @@ import com.orion.constant.Letters; import com.orion.exception.ExecuteException; import com.orion.exception.LogException; import com.orion.lang.io.OutputAppender; +import com.orion.net.remote.ExitCode; import com.orion.ops.consts.Const; import com.orion.ops.consts.StainCode; import com.orion.ops.consts.app.ActionStatus; @@ -12,7 +13,6 @@ import com.orion.ops.consts.system.SystemEnvAttr; import com.orion.ops.dao.ApplicationActionLogDAO; import com.orion.ops.entity.domain.ApplicationActionLogDO; import com.orion.ops.utils.Utils; -import com.orion.remote.ExitCode; import com.orion.spring.SpringHolder; import com.orion.utils.Exceptions; import com.orion.utils.Strings; @@ -228,7 +228,7 @@ public abstract class AbstractActionHandler implements IActionHandler { Integer exitCode = this.getExitCode(); if (exitCode != null) { log.append(" exitcode: ") - .append(ExitCode.SUCCESS.getCode().equals(exitCode) + .append(ExitCode.isSuccess(exitCode) ? Utils.getStainKeyWords(exitCode, StainCode.GLOSS_BLUE) : Utils.getStainKeyWords(exitCode, StainCode.GLOSS_RED)); } diff --git a/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/AbstractTransferActionHandler.java b/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/AbstractTransferActionHandler.java deleted file mode 100644 index 114fbc18..00000000 --- a/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/AbstractTransferActionHandler.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.orion.ops.handler.app.action; - -import com.orion.remote.channel.BaseExecutor; -import com.orion.utils.io.Streams; - -/** - * 执行操作-传输产物 - * - * @author Jiahang Li - * @version 1.0.0 - * @see com.orion.ops.consts.app.ActionType#RELEASE_TRANSFER - * @since 2022/2/11 16:01 - */ -public abstract class AbstractTransferActionHandler extends AbstractActionHandler { - - protected E executor; - - public AbstractTransferActionHandler(Long actionId, MachineActionStore store) { - super(actionId, store); - } - - @Override - public void terminate() { - super.terminate(); - // 关闭executor - Streams.close(executor); - } - - @Override - public void close() { - super.close(); - // 关闭executor - Streams.close(executor); - } - -} diff --git a/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/CommandActionHandler.java b/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/CommandActionHandler.java index 6ff3075d..b2498d21 100644 --- a/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/CommandActionHandler.java +++ b/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/CommandActionHandler.java @@ -1,9 +1,10 @@ package com.orion.ops.handler.app.action; +import com.orion.net.remote.CommandExecutors; +import com.orion.net.remote.ExitCode; +import com.orion.net.remote.channel.ssh.CommandExecutor; import com.orion.ops.consts.StainCode; import com.orion.ops.utils.Utils; -import com.orion.remote.ExitCode; -import com.orion.remote.channel.ssh.CommandExecutor; import com.orion.utils.Exceptions; import com.orion.utils.Strings; import com.orion.utils.io.Streams; @@ -34,13 +35,10 @@ public class CommandActionHandler extends AbstractActionHandler { this.appendLog(Utils.getStainKeyWords("# 开始执行\n", StainCode.GLOSS_BLUE)); // 打开executor this.executor = store.getSessionStore().getCommandExecutor(Strings.replaceCRLF(action.getActionCommand())); - executor.inherit() - .sync() - .transfer(appender) - .connect() - .exec(); + // 执行命令 + CommandExecutors.syncExecCommand(executor, appender); this.exitCode = executor.getExitCode(); - if (!ExitCode.SUCCESS.getCode().equals(exitCode)) { + if (!ExitCode.isSuccess(exitCode)) { throw Exceptions.execute("*** 命令执行失败 exitCode: " + exitCode); } } diff --git a/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/MachineActionStore.java b/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/MachineActionStore.java index 195b2f84..cc39b93a 100644 --- a/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/MachineActionStore.java +++ b/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/MachineActionStore.java @@ -1,8 +1,8 @@ package com.orion.ops.handler.app.action; -import com.beust.jcommander.internal.Maps; +import com.orion.net.remote.channel.SessionStore; import com.orion.ops.entity.domain.ApplicationActionLogDO; -import com.orion.remote.channel.SessionStore; +import com.orion.utils.collect.Maps; import lombok.Data; import java.io.OutputStream; @@ -84,27 +84,30 @@ public class MachineActionStore { /** * 构建产物文件 * - * @see AbstractTransferActionHandler + * @see SftpTransferActionHandler + * @see ScpTransferActionHandler */ private String bundlePath; /** * 产物传输路径 * - * @see AbstractTransferActionHandler + * @see SftpTransferActionHandler + * @see ScpTransferActionHandler */ private String transferPath; /** * 产物传输方式 * - * @see AbstractTransferActionHandler + * @see SftpTransferActionHandler + * @see ScpTransferActionHandler * @see com.orion.ops.consts.app.TransferMode */ private String transferMode; public MachineActionStore() { - this.actions = Maps.newLinkedHashMap(); + this.actions = Maps.newLinkedMap(); } } diff --git a/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/ScpTransferActionHandler.java b/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/ScpTransferActionHandler.java index 08148ea3..f1f01254 100644 --- a/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/ScpTransferActionHandler.java +++ b/orion-ops-service/src/main/java/com/orion/ops/handler/app/action/ScpTransferActionHandler.java @@ -1,5 +1,9 @@ package com.orion.ops.handler.app.action; +import com.orion.net.remote.CommandExecutors; +import com.orion.net.remote.ExitCode; +import com.orion.net.remote.channel.SessionStore; +import com.orion.net.remote.channel.ssh.CommandExecutor; import com.orion.ops.consts.Const; import com.orion.ops.consts.StainCode; import com.orion.ops.consts.command.CommandConst; @@ -7,9 +11,6 @@ import com.orion.ops.consts.env.EnvConst; import com.orion.ops.consts.system.SystemEnvAttr; import com.orion.ops.service.api.MachineInfoService; import com.orion.ops.utils.Utils; -import com.orion.remote.ExitCode; -import com.orion.remote.channel.SessionStore; -import com.orion.remote.channel.ssh.CommandExecutor; import com.orion.spring.SpringHolder; import com.orion.utils.Exceptions; import com.orion.utils.Strings; @@ -30,12 +31,14 @@ import java.util.Map; * @see com.orion.ops.consts.app.TransferMode#SCP * @since 2022/4/26 23:58 */ -public class ScpTransferActionHandler extends AbstractTransferActionHandler { +public class ScpTransferActionHandler extends AbstractActionHandler { protected static MachineInfoService machineInfoService = SpringHolder.getBean(MachineInfoService.class); private SessionStore session; + private CommandExecutor executor; + @Getter private Integer exitCode; @@ -55,7 +58,7 @@ public class ScpTransferActionHandler extends AbstractTransferActionHandler params = Maps.newMap(); params.put(EnvConst.BUNDLE_PATH, bundlePath); - params.put(EnvConst.TRANSFER_PATH, store.getTransferPath()); + params.put(EnvConst.TRANSFER_PATH, store.getTransferPath().replaceAll(Strings.SPACE, "\\\\\\\\ ")); params.put(EnvConst.TARGET_USERNAME, store.getMachineUsername()); params.put(EnvConst.TARGET_HOST, store.getMachineHost()); scpCommand = Strings.format(scpCommand, EnvConst.SYMBOL, params); @@ -71,33 +74,34 @@ public class ScpTransferActionHandler extends AbstractTransferActionHandler { +public class SftpTransferActionHandler extends AbstractActionHandler { + + private static final String SPACE = " "; protected static MachineEnvService machineEnvService = SpringHolder.getBean(MachineEnvService.class); + private SftpExecutor executor; + public SftpTransferActionHandler(Long actionId, MachineActionStore store) { super(actionId, store); } @@ -47,22 +52,21 @@ public class SftpTransferActionHandler extends AbstractTransferActionHandler presentWrapper = new LambdaQueryWrapper() + .ne(id != null, MachineInfoDO::getId, id) + .eq(MachineInfoDO::getMachineName, name); + boolean present = DataQuery.of(machineInfoDAO).wrapper(presentWrapper).present(); + com.orion.ops.utils.Valid.isTrue(!present, MessageConst.NAME_PRESENT); + } + + + /** + * 检查 tag 是否存在 + * + * @param id id + * @param tag tag + */ + private void checkTagPresent(Long id, String tag) { + LambdaQueryWrapper presentWrapper = new LambdaQueryWrapper() + .ne(id != null, MachineInfoDO::getId, id) + .eq(MachineInfoDO::getMachineTag, tag); + boolean present = DataQuery.of(machineInfoDAO).wrapper(presentWrapper).present(); + com.orion.ops.utils.Valid.isTrue(!present, MessageConst.TAG_PRESENT); + } + /** * 复制属性 */ diff --git a/orion-ops-service/src/main/java/com/orion/ops/service/impl/MachineKeyServiceImpl.java b/orion-ops-service/src/main/java/com/orion/ops/service/impl/MachineKeyServiceImpl.java index bb112017..741f4343 100644 --- a/orion-ops-service/src/main/java/com/orion/ops/service/impl/MachineKeyServiceImpl.java +++ b/orion-ops-service/src/main/java/com/orion/ops/service/impl/MachineKeyServiceImpl.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.orion.id.ObjectIds; import com.orion.lang.collect.LimitList; import com.orion.lang.wrapper.DataGrid; +import com.orion.net.remote.channel.SessionHolder; import com.orion.ops.consts.Const; import com.orion.ops.consts.MessageConst; import com.orion.ops.consts.event.EventKeys; @@ -18,7 +19,6 @@ import com.orion.ops.utils.DataQuery; import com.orion.ops.utils.PathBuilders; import com.orion.ops.utils.Valid; import com.orion.ops.utils.ValueMix; -import com.orion.remote.channel.SessionHolder; import com.orion.utils.Strings; import com.orion.utils.codec.Base64s; import com.orion.utils.collect.Maps; diff --git a/orion-ops-service/src/main/java/com/orion/ops/service/impl/MachineTerminalServiceImpl.java b/orion-ops-service/src/main/java/com/orion/ops/service/impl/MachineTerminalServiceImpl.java index ccf9bbf6..7bdfaac8 100644 --- a/orion-ops-service/src/main/java/com/orion/ops/service/impl/MachineTerminalServiceImpl.java +++ b/orion-ops-service/src/main/java/com/orion/ops/service/impl/MachineTerminalServiceImpl.java @@ -2,7 +2,7 @@ package com.orion.ops.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.orion.lang.wrapper.DataGrid; -import com.orion.lang.wrapper.HttpWrapper; +import com.orion.net.remote.TerminalType; import com.orion.ops.consts.Const; import com.orion.ops.consts.KeyConst; import com.orion.ops.consts.MessageConst; @@ -25,7 +25,6 @@ import com.orion.ops.utils.Currents; import com.orion.ops.utils.DataQuery; import com.orion.ops.utils.Valid; import com.orion.ops.utils.ValueMix; -import com.orion.remote.TerminalType; import com.orion.utils.Exceptions; import com.orion.utils.Strings; import com.orion.utils.convert.Converts; @@ -68,7 +67,7 @@ public class MachineTerminalServiceImpl implements MachineTerminalService { MachineInfoDO machine = machineInfoService.selectById(machineId); Valid.notNull(machine, MessageConst.INVALID_MACHINE); if (!Const.ENABLE.equals(machine.getMachineStatus())) { - throw Exceptions.codeArgument(HttpWrapper.HTTP_ERROR_CODE, MessageConst.MACHINE_NOT_ENABLE); + throw Exceptions.disable(MessageConst.MACHINE_DISABLE); } // 设置accessToken Long userId = Currents.getUserId(); diff --git a/orion-ops-service/src/main/java/com/orion/ops/service/impl/SftpServiceImpl.java b/orion-ops-service/src/main/java/com/orion/ops/service/impl/SftpServiceImpl.java index f8edd4e0..54c1a78c 100644 --- a/orion-ops-service/src/main/java/com/orion/ops/service/impl/SftpServiceImpl.java +++ b/orion-ops-service/src/main/java/com/orion/ops/service/impl/SftpServiceImpl.java @@ -5,6 +5,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.orion.id.ObjectIds; import com.orion.id.UUIds; import com.orion.lang.io.IgnoreOutputStream; +import com.orion.net.base.file.sftp.SftpFile; +import com.orion.net.remote.CommandExecutors; +import com.orion.net.remote.channel.SessionStore; +import com.orion.net.remote.channel.sftp.SftpExecutor; +import com.orion.net.remote.channel.ssh.CommandExecutor; import com.orion.ops.consts.Const; import com.orion.ops.consts.KeyConst; import com.orion.ops.consts.MessageConst; @@ -36,10 +41,6 @@ import com.orion.ops.utils.Currents; import com.orion.ops.utils.PathBuilders; import com.orion.ops.utils.Utils; import com.orion.ops.utils.Valid; -import com.orion.remote.channel.SessionStore; -import com.orion.remote.channel.sftp.SftpExecutor; -import com.orion.remote.channel.sftp.SftpFile; -import com.orion.remote.channel.ssh.CommandExecutor; import com.orion.utils.Exceptions; import com.orion.utils.Strings; import com.orion.utils.collect.Lists; @@ -390,10 +391,7 @@ public class SftpServiceImpl implements SftpService { try (SessionStore session = machineInfoService.openSessionStore(machine); CommandExecutor executor = session.getCommandExecutor(Strings.replaceCRLF(command))) { // 执行命令 - executor.sync() - .transfer(new IgnoreOutputStream()) - .connect() - .exec(); + CommandExecutors.syncExecCommand(executor, new IgnoreOutputStream()); } catch (Exception e) { throw Exceptions.app(MessageConst.EXECUTE_SFTP_ZIP_COMMAND_ERROR, e); } @@ -524,7 +522,7 @@ public class SftpServiceImpl implements SftpService { SftpExecutor executor = sftpBasicExecutorHolder.getBasicExecutor(machineId); SftpFile file = executor.getFile(transferLog.getRemoteFile()); if (file != null) { - executor.rmFile(transferLog.getRemoteFile()); + executor.removeFile(transferLog.getRemoteFile()); } } else { // 删除本地文件 diff --git a/orion-ops-service/src/main/java/com/orion/ops/service/impl/SystemServiceImpl.java b/orion-ops-service/src/main/java/com/orion/ops/service/impl/SystemServiceImpl.java index 5cddd4e8..d6622320 100644 --- a/orion-ops-service/src/main/java/com/orion/ops/service/impl/SystemServiceImpl.java +++ b/orion-ops-service/src/main/java/com/orion/ops/service/impl/SystemServiceImpl.java @@ -3,6 +3,7 @@ package com.orion.ops.service.impl; import com.alibaba.fastjson.JSON; import com.orion.location.region.LocationRegions; import com.orion.location.region.core.Region; +import com.orion.net.remote.channel.SessionHolder; import com.orion.ops.consts.Const; import com.orion.ops.consts.EnableType; import com.orion.ops.consts.MessageConst; @@ -24,7 +25,6 @@ import com.orion.ops.service.api.SystemEnvService; import com.orion.ops.service.api.SystemService; import com.orion.ops.utils.FileCleaner; import com.orion.ops.utils.Utils; -import com.orion.remote.channel.SessionHolder; import com.orion.utils.Strings; import com.orion.utils.Threads; import com.orion.utils.Valid;