upgrade orion kit version.

This commit is contained in:
lijiahang
2022-05-24 08:39:08 +08:00
parent 63a4525ae0
commit cbe1b6f52d
31 changed files with 272 additions and 226 deletions
@@ -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;
@@ -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;
@@ -13,7 +13,7 @@ import com.orion.ops.entity.domain.ApplicationMachineDO;
*/
public interface ApplicationMachineDAO extends BaseMapper<ApplicationMachineDO> {
/**NO_SUCH_FILE
/**
* 更新版本
*
* @param update update
@@ -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;
@@ -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));
}
@@ -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<E extends BaseExecutor> 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);
}
}
@@ -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);
}
}
@@ -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();
}
}
@@ -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<CommandExecutor> {
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<Comm
String scpCommand = Strings.def(action.getActionCommand(), CommandConst.SCP_TRANSFER_DEFAULT);
Map<String, String> 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<Comm
this.session = machineInfoService.openSessionStore(Const.HOST_MACHINE_ID);
// 打开executor
this.executor = session.getCommandExecutor(Strings.replaceCRLF(scpCommand));
executor.inherit()
.sync()
.transfer(appender)
.connect()
.exec();
// 执行命令
CommandExecutors.syncExecCommand(executor, appender);
this.exitCode = executor.getExitCode();
this.appendLog(Const.LF);
if (!ExitCode.SUCCESS.getCode().equals(exitCode)) {
if (!ExitCode.isSuccess(exitCode)) {
throw Exceptions.execute("*** 命令执行失败 exitCode: " + exitCode);
}
}
@Override
public void terminate() {
super.terminate();
// 关闭宿主机session
Streams.close(session);
}
@Override
public void write(String command) {
executor.write(command);
}
@Override
public void terminate() {
super.terminate();
// 关闭executor
Streams.close(executor);
// 关闭宿主机session
Streams.close(session);
}
@Override
public void close() {
super.close();
// 关闭executor
Streams.close(executor);
// 关闭宿主机session
Streams.close(session);
}
@@ -1,15 +1,16 @@
package com.orion.ops.handler.app.action;
import com.orion.net.remote.channel.sftp.SftpExecutor;
import com.orion.ops.consts.Const;
import com.orion.ops.consts.StainCode;
import com.orion.ops.consts.system.SystemEnvAttr;
import com.orion.ops.service.api.MachineEnvService;
import com.orion.ops.utils.Utils;
import com.orion.remote.channel.sftp.SftpExecutor;
import com.orion.spring.SpringHolder;
import com.orion.utils.Exceptions;
import com.orion.utils.collect.Maps;
import com.orion.utils.io.Files1;
import com.orion.utils.io.Streams;
import java.io.File;
import java.util.List;
@@ -24,10 +25,14 @@ import java.util.Map;
* @see com.orion.ops.consts.app.TransferMode#SFTP
* @since 2022/4/26 23:57
*/
public class SftpTransferActionHandler extends AbstractTransferActionHandler<SftpExecutor> {
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<Sft
// 删除远程文件
String transferPath = store.getTransferPath();
executor.rm(transferPath);
String space = " ";
String bundleAbsolutePath = bundleFile.getAbsolutePath();
// 拼接头文件
StringBuilder headerLog = new StringBuilder(Const.LF)
.append(space)
.append(SPACE)
.append(Utils.getStainKeyWords("source: ", StainCode.GLOSS_GREEN))
.append(Utils.getStainKeyWords(bundleAbsolutePath, StainCode.GLOSS_BLUE))
.append(Const.LF)
.append(space)
.append(SPACE)
.append(Utils.getStainKeyWords("target: ", StainCode.GLOSS_GREEN))
.append(Utils.getStainKeyWords(transferPath, StainCode.GLOSS_BLUE))
.append(Const.LF_2);
headerLog.append(StainCode.prefix(StainCode.GLOSS_GREEN))
.append(space)
.append(SPACE)
.append("类型")
.append(space)
.append(SPACE)
.append(" target")
.append(StainCode.SUFFIX)
.append(Const.LF);
@@ -74,9 +78,9 @@ public class SftpTransferActionHandler extends AbstractTransferActionHandler<Sft
String remoteFile = entity.getValue();
// 文件夹则创建
if (localFile.isDirectory()) {
StringBuilder createDirLog = new StringBuilder(space)
StringBuilder createDirLog = new StringBuilder(SPACE)
.append(Utils.getStainKeyWords("mkdir", StainCode.GLOSS_GREEN))
.append(space)
.append(SPACE)
.append(Utils.getStainKeyWords(remoteFile, StainCode.GLOSS_BLUE))
.append(Const.LF);
this.appendLog(createDirLog.toString());
@@ -84,9 +88,9 @@ public class SftpTransferActionHandler extends AbstractTransferActionHandler<Sft
continue;
}
// 文件则传输
StringBuilder transferLog = new StringBuilder(space)
StringBuilder transferLog = new StringBuilder(SPACE)
.append(Utils.getStainKeyWords("touch", StainCode.GLOSS_GREEN))
.append(space)
.append(SPACE)
.append(Utils.getStainKeyWords(remoteFile, StainCode.GLOSS_BLUE))
.append(StainCode.prefix(StainCode.GLOSS_BLUE))
.append(" (")
@@ -123,4 +127,18 @@ public class SftpTransferActionHandler extends AbstractTransferActionHandler<Sft
return map;
}
@Override
public void terminate() {
super.terminate();
// 关闭executor
Streams.close(executor);
}
@Override
public void close() {
super.close();
// 关闭executor
Streams.close(executor);
}
}
@@ -2,6 +2,7 @@ package com.orion.ops.handler.app.machine;
import com.alibaba.fastjson.JSON;
import com.orion.able.Executable;
import com.orion.net.remote.channel.SessionStore;
import com.orion.ops.consts.Const;
import com.orion.ops.consts.SchedulerPools;
import com.orion.ops.consts.StainCode;
@@ -23,7 +24,6 @@ import com.orion.ops.service.api.ApplicationEnvService;
import com.orion.ops.service.api.MachineInfoService;
import com.orion.ops.service.api.WebSideMessageService;
import com.orion.ops.utils.Utils;
import com.orion.remote.channel.SessionStore;
import com.orion.spring.SpringHolder;
import com.orion.utils.Exceptions;
import com.orion.utils.Strings;
@@ -1,6 +1,7 @@
package com.orion.ops.handler.app.machine;
import com.alibaba.fastjson.JSON;
import com.orion.net.remote.channel.SessionStore;
import com.orion.ops.consts.Const;
import com.orion.ops.consts.StainCode;
import com.orion.ops.consts.app.ActionStatus;
@@ -13,7 +14,6 @@ import com.orion.ops.handler.app.action.MachineActionStore;
import com.orion.ops.service.api.ApplicationActionLogService;
import com.orion.ops.service.api.MachineInfoService;
import com.orion.ops.utils.Utils;
import com.orion.remote.channel.SessionStore;
import com.orion.spring.SpringHolder;
import com.orion.utils.Exceptions;
import com.orion.utils.io.Streams;
@@ -1,6 +1,11 @@
package com.orion.ops.handler.exec;
import com.orion.constant.Letters;
import com.orion.exception.DisableException;
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.SchedulerPools;
import com.orion.ops.consts.StainCode;
@@ -15,9 +20,6 @@ import com.orion.ops.handler.tail.TailSessionHolder;
import com.orion.ops.service.api.MachineInfoService;
import com.orion.ops.service.api.WebSideMessageService;
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;
@@ -104,12 +106,8 @@ public class CommandExecHandler implements IExecHandler {
// 打开executor
this.sessionStore = machineInfoService.openSessionStore(machine);
this.executor = sessionStore.getCommandExecutor(Strings.replaceCRLF(record.getExecCommand()));
// 开始执行
executor.inherit()
.sync()
.transfer(logOutputStream)
.connect()
.exec();
// 执行命令
CommandExecutors.syncExecCommand(executor, logOutputStream);
} catch (Exception e) {
ex = e;
}
@@ -117,13 +115,15 @@ public class CommandExecHandler implements IExecHandler {
try {
if (terminated) {
// 停止回调
log.info("execHandler-执行停止 execId: {}", execId);
this.terminatedCallback();
} else if (ex == null) {
// 完成回调
this.completeCallback();
} else if (ex instanceof DisableException) {
// 机器未启用回调
this.machineDisableCallback();
} else {
// 失败回调
// 执行失败回调
this.exceptionCallback(ex);
}
} finally {
@@ -217,6 +217,7 @@ public class CommandExecHandler implements IExecHandler {
* 停止回调
*/
private void terminatedCallback() {
log.info("execHandler-执行停止 execId: {}", execId);
// 更新状态
this.updateStatus(ExecStatus.TERMINATED);
// 拼接日志
@@ -243,7 +244,7 @@ public class CommandExecHandler implements IExecHandler {
.append(Utils.getStainKeyWords("# 命令执行完毕", StainCode.GLOSS_GREEN))
.append(Letters.LF);
sb.append("exitcode: ")
.append(ExitCode.SUCCESS.getCode().equals(exitCode)
.append(ExitCode.isSuccess(exitCode)
? Utils.getStainKeyWords(exitCode, StainCode.GLOSS_BLUE)
: Utils.getStainKeyWords(exitCode, StainCode.GLOSS_RED))
.append(Letters.LF);
@@ -265,6 +266,23 @@ public class CommandExecHandler implements IExecHandler {
webSideMessageService.addMessage(MessageType.EXEC_SUCCESS, record.getUserId(), record.getUserName(), params);
}
/**
* 机器未启用回调
*/
private void machineDisableCallback() {
log.info("execHandler-机器停用停止 execId: {}", execId);
// 更新状态
this.updateStatus(ExecStatus.TERMINATED);
// 拼接日志
StringBuilder log = new StringBuilder()
.append(Const.LF)
.append(Utils.getStainKeyWords("# 命令执行机器未启用", StainCode.GLOSS_YELLOW))
.append(Letters.TAB)
.append(Utils.getStainKeyWords(Dates.format(endTime), StainCode.GLOSS_BLUE))
.append(Const.LF);
this.appendLog(log.toString());
}
/**
* 异常回调
*
@@ -1,6 +1,11 @@
package com.orion.ops.handler.scheduler.machine;
import com.orion.constant.Letters;
import com.orion.exception.DisableException;
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.scheduler.SchedulerTaskMachineStatus;
@@ -10,9 +15,6 @@ import com.orion.ops.entity.domain.SchedulerTaskMachineRecordDO;
import com.orion.ops.handler.tail.TailSessionHolder;
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;
@@ -89,11 +91,7 @@ public class TaskMachineHandler implements ITaskMachineHandler {
// 获取执行器
this.executor = sessionStore.getCommandExecutor(Strings.replaceCRLF(machineRecord.getExecCommand()));
// 开始执行
executor.inherit()
.sync()
.transfer(logOutputStream)
.connect()
.exec();
CommandExecutors.syncExecCommand(executor, logOutputStream);
this.exitCode = executor.getExitCode();
} catch (Exception e) {
ex = e;
@@ -106,8 +104,11 @@ public class TaskMachineHandler implements ITaskMachineHandler {
} else if (ex == null) {
// 完成回调
this.completeCallback();
} else if (ex instanceof DisableException) {
// 机器未启用回调
this.machineDisableCallback();
} else {
// 异常回调
// 执行异常回调
this.exceptionCallback(ex);
throw Exceptions.runtime(ex);
}
@@ -138,7 +139,7 @@ public class TaskMachineHandler implements ITaskMachineHandler {
*/
private void completeCallback() {
log.info("调度任务-机器操作-完成 machineRecordId: {}, exitCode: {}", machineRecordId, exitCode);
final boolean execSuccess = ExitCode.SUCCESS.getCode().equals(exitCode);
final boolean execSuccess = ExitCode.isSuccess(exitCode);
// 更新状态
if (execSuccess) {
this.updateStatus(SchedulerTaskMachineStatus.SUCCESS);
@@ -169,6 +170,23 @@ public class TaskMachineHandler implements ITaskMachineHandler {
this.appendLog(log.toString());
}
/**
* 机器未启用回调
*/
private void machineDisableCallback() {
log.error("调度任务-机器操作-机器停用停止 machineRecordId: {}", machineRecordId);
// 更新状态
this.updateStatus(SchedulerTaskMachineStatus.TERMINATED);
// 拼接日志
StringBuilder log = new StringBuilder()
.append(Const.LF)
.append(Utils.getStainKeyWords("# 调度任务执行机器未启用", StainCode.GLOSS_YELLOW))
.append(Letters.TAB)
.append(Utils.getStainKeyWords(Dates.format(endTime), StainCode.GLOSS_BLUE))
.append(Const.LF);
this.appendLog(log.toString());
}
/**
* 异常回调
*/
@@ -1,5 +1,7 @@
package com.orion.ops.handler.sftp;
import com.orion.net.remote.channel.SessionStore;
import com.orion.net.remote.channel.sftp.SftpExecutor;
import com.orion.ops.consts.SchedulerPools;
import com.orion.ops.consts.sftp.SftpTransferStatus;
import com.orion.ops.dao.FileTransferLogDAO;
@@ -7,8 +9,6 @@ import com.orion.ops.entity.domain.FileTransferLogDO;
import com.orion.ops.entity.dto.FileTransferNotifyDTO;
import com.orion.ops.service.api.MachineEnvService;
import com.orion.ops.service.api.MachineInfoService;
import com.orion.remote.channel.SessionStore;
import com.orion.remote.channel.sftp.SftpExecutor;
import com.orion.spring.SpringHolder;
import com.orion.support.progress.ByteTransferProgress;
import com.orion.support.progress.ByteTransferRateProgress;
@@ -78,7 +78,7 @@ public abstract class FileTransferProcessor implements IFileTransferProcessor {
// 检查是否可以用文件系统传输
if (SftpSupport.checkUseFileSystem(executor)) {
// 直接拷贝
this.usingFsCopy();
SftpSupport.usingFsCopy(this);
} else {
// 处理
this.handler();
@@ -111,11 +111,6 @@ public abstract class FileTransferProcessor implements IFileTransferProcessor {
*/
protected abstract void handler();
/**
* 使用fileSystem 拷贝文件
*/
protected abstract void usingFsCopy();
/**
* 初始化进度条
*/
@@ -1,5 +1,7 @@
package com.orion.ops.handler.sftp;
import com.orion.net.remote.channel.SessionStore;
import com.orion.net.remote.channel.sftp.SftpExecutor;
import com.orion.ops.consts.Const;
import com.orion.ops.consts.event.EventKeys;
import com.orion.ops.consts.event.EventParamsHolder;
@@ -7,8 +9,6 @@ import com.orion.ops.entity.domain.MachineInfoDO;
import com.orion.ops.service.api.MachineEnvService;
import com.orion.ops.service.api.MachineInfoService;
import com.orion.ops.service.api.SftpService;
import com.orion.remote.channel.SessionStore;
import com.orion.remote.channel.sftp.SftpExecutor;
import com.orion.utils.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
@@ -1,9 +1,12 @@
package com.orion.ops.handler.sftp;
import com.orion.id.UUIds;
import com.orion.net.remote.channel.sftp.SftpExecutor;
import com.orion.ops.consts.sftp.SftpTransferStatus;
import com.orion.ops.consts.system.SystemEnvAttr;
import com.orion.remote.channel.sftp.SftpExecutor;
import com.orion.ops.handler.sftp.impl.UploadFileProcessor;
import com.orion.utils.io.Files1;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
@@ -14,6 +17,7 @@ import java.io.File;
* @version 1.0.0
* @since 2021/12/13 11:05
*/
@Slf4j
public class SftpSupport {
private SftpSupport() {
@@ -37,4 +41,31 @@ public class SftpSupport {
return exist;
}
/**
* 使用 file system copy
*
* @param processor processor
*/
public static void usingFsCopy(FileTransferProcessor processor) {
// upload
String remoteFile = processor.record.getRemoteFile();
String localFile = processor.record.getLocalFile();
String localAbsolutePath = Files1.getPath(SystemEnvAttr.SWAP_PATH.getValue(), localFile);
log.info("sftp文件传输-使用FSC fileToken: {}, machineId: {}, local: {}, remote: {}",
processor.fileToken, processor.machineId, localAbsolutePath, remoteFile);
// 复制
File sourceFile;
if (processor instanceof UploadFileProcessor) {
sourceFile = new File(localAbsolutePath);
} else {
sourceFile = new File(remoteFile);
}
Files1.copy(sourceFile, new File(remoteFile));
// 通知进度
long fileSize = sourceFile.length();
processor.notifyProgress(Files1.getSize(fileSize), Files1.getSize(fileSize), "100");
// 通知状态
processor.updateStatusAndNotify(SftpTransferStatus.FINISH.getStatus(), 100D, fileSize);
}
}
@@ -1,12 +1,12 @@
package com.orion.ops.handler.sftp.direct;
import com.orion.able.SafeCloseable;
import com.orion.net.remote.channel.SessionStore;
import com.orion.net.remote.channel.sftp.SftpExecutor;
import com.orion.ops.consts.MessageConst;
import com.orion.ops.handler.sftp.SftpSupport;
import com.orion.ops.service.api.MachineEnvService;
import com.orion.ops.service.api.MachineInfoService;
import com.orion.remote.channel.SessionStore;
import com.orion.remote.channel.sftp.SftpExecutor;
import com.orion.spring.SpringHolder;
import com.orion.utils.Valid;
import com.orion.utils.io.Files1;
@@ -87,7 +87,7 @@ public class DirectDownloader implements SafeCloseable {
return Files1.openInputStreamFast(path);
} else {
// 不是本机获取sftp文件
return executor.getInputStream(path);
return executor.openInputStream(path);
}
} catch (IOException e) {
log.error("直接下载远程文件-执行失败 machineId: {}, path: {}, e: {}", machineId, path, e);
@@ -1,18 +1,15 @@
package com.orion.ops.handler.sftp.impl;
import com.alibaba.fastjson.JSON;
import com.orion.net.remote.channel.sftp.SftpDownloader;
import com.orion.ops.consts.SchedulerPools;
import com.orion.ops.consts.sftp.SftpTransferStatus;
import com.orion.ops.consts.system.SystemEnvAttr;
import com.orion.ops.entity.domain.FileTransferLogDO;
import com.orion.ops.handler.sftp.FileTransferProcessor;
import com.orion.remote.channel.sftp.bigfile.SftpDownload;
import com.orion.utils.Threads;
import com.orion.utils.io.Files1;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
/**
* 文件下载处理器
*
@@ -43,26 +40,9 @@ public class DownloadFileProcessor extends FileTransferProcessor {
String localAbsolutePath = Files1.getPath(SystemEnvAttr.SWAP_PATH.getValue(), localFile);
log.info("sftp文件下载-开始传输 fileToken: {}, machineId: {}, local: {}, remote: {}",
fileToken, machineId, localAbsolutePath, remoteFile);
SftpDownload download = executor.download(remoteFile, localAbsolutePath);
SftpDownloader download = executor.download(remoteFile, localAbsolutePath);
this.initProgress(download.getProgress());
download.run();
}
@Override
public void usingFsCopy() {
String remoteFile = record.getRemoteFile();
String localFile = record.getLocalFile();
String localAbsolutePath = Files1.getPath(SystemEnvAttr.SWAP_PATH.getValue(), localFile);
log.info("sftp文件上传-使用FSC fileToken: {}, machineId: {}, local: {}, remote: {}",
fileToken, machineId, localAbsolutePath, remoteFile);
// 复制
File sourceFile = new File(remoteFile);
Files1.copy(sourceFile, new File(localAbsolutePath));
// 通知进度
long fileSize = sourceFile.length();
super.notifyProgress(Files1.getSize(fileSize), Files1.getSize(fileSize), "100");
// 通知状态
super.updateStatusAndNotify(SftpTransferStatus.FINISH.getStatus(), 100D, fileSize);
}
}
@@ -1,18 +1,15 @@
package com.orion.ops.handler.sftp.impl;
import com.alibaba.fastjson.JSON;
import com.orion.net.remote.channel.sftp.SftpUploader;
import com.orion.ops.consts.SchedulerPools;
import com.orion.ops.consts.sftp.SftpTransferStatus;
import com.orion.ops.consts.system.SystemEnvAttr;
import com.orion.ops.entity.domain.FileTransferLogDO;
import com.orion.ops.handler.sftp.FileTransferProcessor;
import com.orion.remote.channel.sftp.bigfile.SftpUpload;
import com.orion.utils.Threads;
import com.orion.utils.io.Files1;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
/**
* 文件上传处理器
*
@@ -43,26 +40,9 @@ public class UploadFileProcessor extends FileTransferProcessor {
String localAbsolutePath = Files1.getPath(SystemEnvAttr.SWAP_PATH.getValue(), localFile);
log.info("sftp文件上传-开始传输 fileToken: {}, machineId: {}, local: {}, remote: {}",
fileToken, machineId, localAbsolutePath, remoteFile);
SftpUpload upload = executor.upload(remoteFile, localAbsolutePath);
SftpUploader upload = executor.upload(remoteFile, localAbsolutePath);
this.initProgress(upload.getProgress());
upload.run();
}
@Override
public void usingFsCopy() {
String remoteFile = record.getRemoteFile();
String localFile = record.getLocalFile();
String localAbsolutePath = Files1.getPath(SystemEnvAttr.SWAP_PATH.getValue(), localFile);
log.info("sftp文件上传-使用FSC fileToken: {}, machineId: {}, local: {}, remote: {}",
fileToken, machineId, localAbsolutePath, remoteFile);
// 复制
File sourceFile = new File(localAbsolutePath);
Files1.copy(sourceFile, new File(remoteFile));
// 通知进度
long fileSize = sourceFile.length();
super.notifyProgress(Files1.getSize(fileSize), Files1.getSize(fileSize), "100");
// 通知状态
super.updateStatusAndNotify(SftpTransferStatus.FINISH.getStatus(), 100D, fileSize);
}
}
@@ -1,6 +1,9 @@
package com.orion.ops.handler.tail.impl;
import com.alibaba.fastjson.JSON;
import com.orion.net.base.ssh.IRemoteExecutor;
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.SchedulerPools;
import com.orion.ops.consts.ws.WsCloseCode;
@@ -8,9 +11,6 @@ import com.orion.ops.handler.tail.ITailHandler;
import com.orion.ops.handler.tail.TailFileHint;
import com.orion.ops.service.api.MachineInfoService;
import com.orion.ops.utils.WebSockets;
import com.orion.remote.channel.SessionStore;
import com.orion.remote.channel.ssh.BaseRemoteExecutor;
import com.orion.remote.channel.ssh.CommandExecutor;
import com.orion.spring.SpringHolder;
import com.orion.utils.Strings;
import com.orion.utils.io.Streams;
@@ -73,12 +73,12 @@ public class ExecTailFileHandler implements ITailHandler {
}
// 打开 command
this.executor = sessionStore.getCommandExecutor(Strings.replaceCRLF(hint.getCommand()));
executor.inherit()
.scheduler(SchedulerPools.TAIL_SCHEDULER)
.callback(this::callback)
.streamHandler(this::handler)
.connect()
.exec();
executor.inherit();
executor.scheduler(SchedulerPools.TAIL_SCHEDULER);
executor.callback(this::callback);
executor.streamHandler(this::handler);
executor.connect();
executor.exec();
log.info("tail EXEC_TAIL 监听文件开始 token: {}", token);
}
@@ -98,7 +98,7 @@ public class ExecTailFileHandler implements ITailHandler {
* @param executor executor
*/
@SneakyThrows
private void callback(BaseRemoteExecutor executor) {
private void callback(IRemoteExecutor executor) {
log.info("tail EXEC_TAIL 监听文件结束 token: {}", token);
if (session.isOpen()) {
session.close(WsCloseCode.EOF_CALLBACK.close());
@@ -1,6 +1,7 @@
package com.orion.ops.handler.terminal;
import com.orion.lang.wrapper.Tuple;
import com.orion.net.remote.channel.SessionStore;
import com.orion.ops.consts.KeyConst;
import com.orion.ops.consts.terminal.TerminalOperate;
import com.orion.ops.consts.ws.WsCloseCode;
@@ -14,7 +15,6 @@ import com.orion.ops.service.api.MachineInfoService;
import com.orion.ops.service.api.MachineTerminalService;
import com.orion.ops.service.api.PassportService;
import com.orion.ops.utils.WebSockets;
import com.orion.remote.channel.SessionStore;
import com.orion.utils.Strings;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
@@ -1,5 +1,8 @@
package com.orion.ops.handler.terminal;
import com.orion.net.base.ssh.IRemoteExecutor;
import com.orion.net.remote.channel.SessionStore;
import com.orion.net.remote.channel.ssh.ShellExecutor;
import com.orion.ops.consts.Const;
import com.orion.ops.consts.SchedulerPools;
import com.orion.ops.consts.system.SystemEnvAttr;
@@ -11,9 +14,6 @@ import com.orion.ops.entity.domain.MachineTerminalLogDO;
import com.orion.ops.entity.dto.TerminalSizeDTO;
import com.orion.ops.service.api.MachineTerminalService;
import com.orion.ops.utils.PathBuilders;
import com.orion.remote.channel.SessionStore;
import com.orion.remote.channel.ssh.BaseRemoteExecutor;
import com.orion.remote.channel.ssh.ShellExecutor;
import com.orion.spring.SpringHolder;
import com.orion.utils.Arrays1;
import com.orion.utils.Strings;
@@ -115,11 +115,11 @@ public class TerminalOperateHandler implements IOperateHandler {
@Override
public void connect() {
executor.connect()
.scheduler(SchedulerPools.TERMINAL_SCHEDULER)
.callback(this::callback)
.streamHandler(this::streamHandler)
.exec();
executor.connect();
executor.scheduler(SchedulerPools.TERMINAL_SCHEDULER);
executor.callback(this::callback);
executor.streamHandler(this::streamHandler);
executor.exec();
}
/**
@@ -127,7 +127,7 @@ public class TerminalOperateHandler implements IOperateHandler {
*
* @param executor executor
*/
private void callback(BaseRemoteExecutor executor) {
private void callback(IRemoteExecutor executor) {
if (close) {
return;
}
@@ -1,7 +1,7 @@
package com.orion.ops.runner;
import com.orion.net.remote.channel.SessionHolder;
import com.orion.ops.service.api.MachineKeyService;
import com.orion.remote.channel.SessionHolder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
@@ -1,11 +1,11 @@
package com.orion.ops.service.api;
import com.orion.lang.wrapper.DataGrid;
import com.orion.net.remote.channel.SessionStore;
import com.orion.ops.consts.machine.MachineProperties;
import com.orion.ops.entity.domain.MachineInfoDO;
import com.orion.ops.entity.request.MachineInfoRequest;
import com.orion.ops.entity.vo.MachineInfoVO;
import com.orion.remote.channel.SessionStore;
import java.util.List;
@@ -2,6 +2,7 @@ package com.orion.ops.service.impl;
import com.alibaba.fastjson.JSON;
import com.orion.id.UUIds;
import com.orion.net.remote.channel.sftp.SftpExecutor;
import com.orion.ops.consts.Const;
import com.orion.ops.consts.KeyConst;
import com.orion.ops.consts.event.EventKeys;
@@ -27,7 +28,6 @@ import com.orion.ops.handler.sftp.hint.FileTransferHint;
import com.orion.ops.service.api.BatchUploadService;
import com.orion.ops.service.api.MachineInfoService;
import com.orion.ops.utils.Currents;
import com.orion.remote.channel.sftp.SftpExecutor;
import com.orion.utils.Strings;
import com.orion.utils.collect.Lists;
import com.orion.utils.collect.Maps;
@@ -4,7 +4,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.orion.exception.AuthenticationException;
import com.orion.exception.ConnectionRuntimeException;
import com.orion.lang.wrapper.DataGrid;
import com.orion.lang.wrapper.HttpWrapper;
import com.orion.net.remote.CommandExecutors;
import com.orion.net.remote.channel.SessionHolder;
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.MessageConst;
import com.orion.ops.consts.event.EventKeys;
@@ -26,9 +29,6 @@ import com.orion.ops.utils.DataQuery;
import com.orion.ops.utils.Utils;
import com.orion.ops.utils.ValueMix;
import com.orion.process.Processes;
import com.orion.remote.channel.SessionHolder;
import com.orion.remote.channel.SessionStore;
import com.orion.remote.channel.ssh.CommandExecutor;
import com.orion.utils.Exceptions;
import com.orion.utils.Strings;
import com.orion.utils.Valid;
@@ -89,16 +89,19 @@ public class MachineInfoServiceImpl implements MachineInfoService {
public Long addMachine(MachineInfoRequest request) {
// 检查proxyId
this.checkProxy(request.getProxyId());
// 检查名称
this.checkNamePresent(null, request.getName());
// 检查唯一标识
this.checkTagPresent(null, request.getTag());
MachineInfoDO entity = new MachineInfoDO();
String password = request.getPassword();
this.copyProperties(request, entity);
// 添加机器
entity.setMachineStatus(Const.ENABLE);
machineInfoDAO.insert(entity);
String password = request.getPassword();
if (Strings.isNotBlank(password)) {
entity.setPassword(ValueMix.encrypt(password));
machineInfoDAO.updateById(entity);
}
machineInfoDAO.insert(entity);
Long id = entity.getId();
// 初始化环境变量
machineEnvService.initEnv(id);
@@ -110,11 +113,16 @@ public class MachineInfoServiceImpl implements MachineInfoService {
@Override
@Transactional(rollbackFor = Exception.class)
public Integer updateMachine(MachineInfoRequest request) {
Long id = request.getId();
// 检查proxyId
this.checkProxy(request.getProxyId());
// 检查名称
this.checkNamePresent(id, request.getName());
// 检查唯一标识
this.checkTagPresent(id, request.getTag());
MachineInfoDO entity = new MachineInfoDO();
String password = request.getPassword();
this.copyProperties(request, entity);
String password = request.getPassword();
if (Strings.isNotBlank(password)) {
entity.setPassword(ValueMix.encrypt(password));
}
@@ -208,11 +216,15 @@ public class MachineInfoServiceImpl implements MachineInfoService {
MachineInfoDO machine = machineInfoDAO.selectById(id);
Valid.notNull(machine, MessageConst.INVALID_MACHINE);
String sourceMachineName = machine.getMachineName();
String targetMachineName = sourceMachineName + Utils.getCopySuffix();
String sourceMachineTag = machine.getMachineTag();
String copySuffix = Utils.getCopySuffix();
String targetMachineName = sourceMachineName + copySuffix;
String targetMachineTag = sourceMachineTag + copySuffix;
machine.setId(null);
machine.setCreateTime(null);
machine.setUpdateTime(null);
machine.setMachineName(targetMachineName);
machine.setMachineTag(targetMachineTag);
machineInfoDAO.insert(machine);
Long insertId = machine.getId();
// 复制环境变量
@@ -275,7 +287,7 @@ public class MachineInfoServiceImpl implements MachineInfoService {
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);
}
Long id = machine.getId();
// 查询超时间
@@ -291,7 +303,7 @@ public class MachineInfoServiceImpl implements MachineInfoService {
} catch (Exception e) {
ex = e;
if (e instanceof ConnectionRuntimeException) {
// retry
log.info("远程机器建立连接-连接失败");
} else if (e instanceof AuthenticationException) {
msg = MessageConst.AUTH_EXCEPTION_MESSAGE;
break;
@@ -302,7 +314,7 @@ public class MachineInfoServiceImpl implements MachineInfoService {
}
String errorMessage = "机器 " + machine.getMachineHost() + " " + msg;
log.error(errorMessage, ex);
throw Exceptions.codeArgument(HttpWrapper.HTTP_ERROR_CODE, errorMessage, ex);
throw Exceptions.app(errorMessage, ex);
}
/**
@@ -320,7 +332,7 @@ public class MachineInfoServiceImpl implements MachineInfoService {
session = SessionHolder.getSession(machine.getMachineHost(), machine.getSshPort(), machine.getUsername());
String password = machine.getPassword();
if (Strings.isNotBlank(password)) {
session.setPassword(ValueMix.decrypt(password));
session.password(ValueMix.decrypt(password));
}
MachineProxyDO proxy = null;
if (proxyId != null) {
@@ -333,13 +345,13 @@ public class MachineInfoServiceImpl implements MachineInfoService {
proxyPassword = ValueMix.decrypt(proxyPassword);
}
if (ProxyType.HTTP.equals(proxyType)) {
session.setHttpProxy(proxy.getProxyHost(), proxy.getProxyPort(), proxy.getProxyUsername(), proxyPassword);
session.httpProxy(proxy.getProxyHost(), proxy.getProxyPort(), proxy.getProxyUsername(), proxyPassword);
} else if (ProxyType.SOCKET4.equals(proxyType)) {
session.setSocket4Proxy(proxy.getProxyHost(), proxy.getProxyPort(), proxy.getProxyUsername(), proxyPassword);
session.socket4Proxy(proxy.getProxyHost(), proxy.getProxyPort(), proxy.getProxyUsername(), proxyPassword);
} else if (ProxyType.SOCKET5.equals(proxyType)) {
session.setSocket5Proxy(proxy.getProxyHost(), proxy.getProxyPort(), proxy.getProxyUsername(), proxyPassword);
session.socket5Proxy(proxy.getProxyHost(), proxy.getProxyPort(), proxy.getProxyUsername(), proxyPassword);
}
session.setHttpProxy(proxy.getProxyHost(), proxy.getProxyPort(), proxy.getProxyUsername(), proxyPassword);
session.httpProxy(proxy.getProxyHost(), proxy.getProxyPort(), proxy.getProxyUsername(), proxyPassword);
}
session.connect(timeout);
log.info("远程机器建立连接-成功 {}@{}:{}", machine.getUsername(), machine.getMachineHost(), machine.getSshPort());
@@ -352,7 +364,7 @@ public class MachineInfoServiceImpl implements MachineInfoService {
@Override
public String getPropertiesResultSync(Long id, MachineProperties property) {
return getCommandResultSync(id, property.getCommand());
return this.getCommandResultSync(id, property.getCommand());
}
@Override
@@ -401,7 +413,7 @@ public class MachineInfoServiceImpl implements MachineInfoService {
session = this.openSessionStore(id);
executor = session.getCommandExecutor(Strings.replaceCRLF(command));
executor.connect();
String res = SessionStore.getCommandOutputResultString(executor);
String res = CommandExecutors.getCommandOutputResultString(executor);
log.info("执行机器命令-成功 {} {} {}", id, command, res);
return res;
} catch (Exception e) {
@@ -431,6 +443,36 @@ public class MachineInfoServiceImpl implements MachineInfoService {
Valid.notNull(proxy, MessageConst.INVALID_PROXY);
}
/**
* 检查 name 是否存在
*
* @param id id
* @param name name
*/
private void checkNamePresent(Long id, String name) {
LambdaQueryWrapper<MachineInfoDO> presentWrapper = new LambdaQueryWrapper<MachineInfoDO>()
.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<MachineInfoDO> presentWrapper = new LambdaQueryWrapper<MachineInfoDO>()
.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);
}
/**
* 复制属性
*/
@@ -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;
@@ -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();
@@ -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 {
// 删除本地文件
@@ -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;