feat: 更新框架工具库
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
|||||||
"runtime"
|
"runtime"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"nms_cxy/src/framework/config"
|
||||||
"nms_cxy/src/framework/constants/common"
|
"nms_cxy/src/framework/constants/common"
|
||||||
"nms_cxy/src/framework/logger"
|
"nms_cxy/src/framework/logger"
|
||||||
"nms_cxy/src/framework/utils/cmd"
|
"nms_cxy/src/framework/utils/cmd"
|
||||||
@@ -68,7 +69,8 @@ func codeFileRead() (map[string]any, error) {
|
|||||||
}
|
}
|
||||||
content := string(bytes)
|
content := string(bytes)
|
||||||
// 解密
|
// 解密
|
||||||
contentDe, err := crypto.StringDecryptByAES(content)
|
hostKey := config.Get("aes.hostKey").(string)
|
||||||
|
contentDe, err := crypto.AESDecryptBase64(content, hostKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("CodeFileRead decrypt: %v", err.Error())
|
logger.Errorf("CodeFileRead decrypt: %v", err.Error())
|
||||||
return mapData, fmt.Errorf("decrypt fail")
|
return mapData, fmt.Errorf("decrypt fail")
|
||||||
@@ -86,7 +88,8 @@ func codeFileRead() (map[string]any, error) {
|
|||||||
func codeFileWrite(data map[string]any) error {
|
func codeFileWrite(data map[string]any) error {
|
||||||
jsonByte, _ := json.Marshal(data)
|
jsonByte, _ := json.Marshal(data)
|
||||||
// 加密
|
// 加密
|
||||||
contentEn, err := crypto.StringEncryptByAES(string(jsonByte))
|
hostKey := config.Get("aes.hostKey").(string)
|
||||||
|
contentEn, err := crypto.AESEncryptBase64(string(jsonByte), hostKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("insert encrypt: %v", err.Error())
|
logger.Errorf("insert encrypt: %v", err.Error())
|
||||||
return fmt.Errorf("encrypt fail")
|
return fmt.Errorf("encrypt fail")
|
||||||
@@ -160,11 +163,11 @@ func Reset() error {
|
|||||||
// return fmt.Errorf("not support window")
|
// return fmt.Errorf("not support window")
|
||||||
} else {
|
} else {
|
||||||
// 重置数据库
|
// 重置数据库
|
||||||
if _, err := cmd.Execf("sudo /usr/local/omc/bin/setomc.sh -m install"); err != nil {
|
if _, err := cmd.Execf("/usr/local/omc/bin/setomc.sh -m install"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// 重启服务
|
// 重启服务
|
||||||
if _, err := cmd.Execf("nohup sh -c \"sleep 1s && %s\" > /dev/null 2>&1 &", "sudo systemctl restart omc"); err != nil {
|
if _, err := cmd.Execf("nohup sh -c \"sleep 1s && %s\" > /dev/null 2>&1 &", "sudo systemctl restart restagent"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,13 @@ func (s *SSHClientSFTP) Close() {
|
|||||||
|
|
||||||
// CopyDirRemoteToLocal 复制目录-远程到本地
|
// CopyDirRemoteToLocal 复制目录-远程到本地
|
||||||
func (s *SSHClientSFTP) CopyDirRemoteToLocal(remoteDir, localDir string) error {
|
func (s *SSHClientSFTP) CopyDirRemoteToLocal(remoteDir, localDir string) error {
|
||||||
|
// 创建本地目录
|
||||||
|
err := os.MkdirAll(localDir, 0775)
|
||||||
|
if err != nil {
|
||||||
|
logger.Errorf("CopyDirRemoteToLocal failed to creating local directory %s: => %s", localDir, err.Error())
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// 列出远程目录中的文件和子目录
|
// 列出远程目录中的文件和子目录
|
||||||
remoteFiles, err := s.Client.ReadDir(remoteDir)
|
remoteFiles, err := s.Client.ReadDir(remoteDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -31,13 +38,6 @@ func (s *SSHClientSFTP) CopyDirRemoteToLocal(remoteDir, localDir string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建本地目录
|
|
||||||
err = os.MkdirAll(localDir, 0775)
|
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("CopyDirRemoteToLocal failed to creating local directory %s: => %s", localDir, err.Error())
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// 遍历远程文件和子目录并复制到本地
|
// 遍历远程文件和子目录并复制到本地
|
||||||
for _, remoteFile := range remoteFiles {
|
for _, remoteFile := range remoteFiles {
|
||||||
remotePath := filepath.ToSlash(filepath.Join(remoteDir, remoteFile.Name()))
|
remotePath := filepath.ToSlash(filepath.Join(remoteDir, remoteFile.Name()))
|
||||||
@@ -63,56 +63,33 @@ func (s *SSHClientSFTP) CopyDirRemoteToLocal(remoteDir, localDir string) error {
|
|||||||
|
|
||||||
// CopyDirRemoteToLocal 复制目录-本地到远程
|
// CopyDirRemoteToLocal 复制目录-本地到远程
|
||||||
func (s *SSHClientSFTP) CopyDirLocalToRemote(localDir, remoteDir string) error {
|
func (s *SSHClientSFTP) CopyDirLocalToRemote(localDir, remoteDir string) error {
|
||||||
// 创建远程目录
|
|
||||||
err := s.Client.MkdirAll(remoteDir)
|
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("CopyDirLocalToRemote failed to creating remote directory %s: => %s", remoteDir, err.Error())
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// 遍历本地目录中的文件和子目录并复制到远程
|
// 遍历本地目录中的文件和子目录并复制到远程
|
||||||
err = filepath.Walk(localDir, func(localPath string, info os.FileInfo, err error) error {
|
err := filepath.Walk(localDir, func(localPath string, info os.FileInfo, err error) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 生成远程路径
|
// 生成远程路径
|
||||||
remotePath := filepath.Join(remoteDir, localPath[len(localDir):])
|
remotePath := filepath.ToSlash(filepath.Join(remoteDir, localPath[len(localDir):]))
|
||||||
|
|
||||||
if info.IsDir() {
|
if info.IsDir() {
|
||||||
// 如果是子目录,则创建远程目录
|
// 如果是子目录,则创建远程目录
|
||||||
err := s.Client.MkdirAll(remotePath)
|
if err := s.Client.MkdirAll(remotePath); err != nil {
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("CopyDirLocalToRemote failed to creating remote directory %s: => %s", remotePath, err.Error())
|
logger.Errorf("CopyDirLocalToRemote failed to creating remote directory %s: => %s", remotePath, err.Error())
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 如果是文件,则复制文件内容
|
// 如果是文件,则复制文件内容
|
||||||
localFile, err := os.Open(localPath)
|
if err := s.CopyFileLocalToRemote(localPath, remotePath); err != nil {
|
||||||
if err != nil {
|
logger.Errorf("CopyDirLocalToRemote failed to copying remote file %s: => %s", localPath, err.Error())
|
||||||
logger.Errorf("CopyDirLocalToRemote failed to opening local file %s: => %s", localPath, err.Error())
|
return err
|
||||||
return nil
|
|
||||||
}
|
|
||||||
defer localFile.Close()
|
|
||||||
|
|
||||||
remoteFile, err := s.Client.Create(remotePath)
|
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("CopyDirLocalToRemote failed to creating remote file %s: => %s", remotePath, err.Error())
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
defer remoteFile.Close()
|
|
||||||
|
|
||||||
_, err = io.Copy(remoteFile, localFile)
|
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("CopyDirLocalToRemote failed to copying file contents from %s to %s: => %s", localPath, remotePath, err.Error())
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("CopyDirLocalToRemote failed to walking local directory: => %s", err.Error())
|
logger.Errorf("CopyDirLocalToRemote failed to walking remote directory: => %s", err.Error())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -141,8 +118,7 @@ func (s *SSHClientSFTP) CopyFileRemoteToLocal(remotePath, localPath string) erro
|
|||||||
defer localFile.Close()
|
defer localFile.Close()
|
||||||
|
|
||||||
// 复制文件内容
|
// 复制文件内容
|
||||||
_, err = io.Copy(localFile, remoteFile)
|
if _, err = io.Copy(localFile, remoteFile); err != nil {
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("CopyFileRemoteToLocal failed to copying contents: => %s", err.Error())
|
logger.Errorf("CopyFileRemoteToLocal failed to copying contents: => %s", err.Error())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -159,6 +135,12 @@ func (s *SSHClientSFTP) CopyFileLocalToRemote(localPath, remotePath string) erro
|
|||||||
}
|
}
|
||||||
defer localFile.Close()
|
defer localFile.Close()
|
||||||
|
|
||||||
|
// 创建远程目录
|
||||||
|
// if err := s.Client.MkdirAll(filepath.Dir(remotePath)); err != nil {
|
||||||
|
// logger.Errorf("CopyFileLocalToRemote failed to creating remote directory %s: => %s", remotePath, err.Error())
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
|
||||||
// 创建远程文件
|
// 创建远程文件
|
||||||
remoteFile, err := s.Client.Create(remotePath)
|
remoteFile, err := s.Client.Create(remotePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -168,8 +150,7 @@ func (s *SSHClientSFTP) CopyFileLocalToRemote(localPath, remotePath string) erro
|
|||||||
defer remoteFile.Close()
|
defer remoteFile.Close()
|
||||||
|
|
||||||
// 复制文件内容
|
// 复制文件内容
|
||||||
_, err = io.Copy(remoteFile, localFile)
|
if _, err = io.Copy(remoteFile, localFile); err != nil {
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("CopyFileLocalToRemote failed to copying contents: => %s", err.Error())
|
logger.Errorf("CopyFileLocalToRemote failed to copying contents: => %s", err.Error())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,6 +101,7 @@ func (c *ConnSSH) RunCMD(cmd string) (string, error) {
|
|||||||
defer session.Close()
|
defer session.Close()
|
||||||
buf, err := session.CombinedOutput(cmd)
|
buf, err := session.CombinedOutput(cmd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
logger.Infof("RunCMD failed run command: => %s", cmd)
|
||||||
logger.Errorf("RunCMD failed run command: => %s", err.Error())
|
logger.Errorf("RunCMD failed run command: => %s", err.Error())
|
||||||
}
|
}
|
||||||
c.LastResult = string(buf)
|
c.LastResult = string(buf)
|
||||||
|
|||||||
@@ -50,10 +50,12 @@ func (c *ConnTelnet) NewClient() (*ConnTelnet, error) {
|
|||||||
// fmt.Fprintln(client, c.User)
|
// fmt.Fprintln(client, c.User)
|
||||||
// fmt.Fprintln(client, c.Password)
|
// fmt.Fprintln(client, c.Password)
|
||||||
|
|
||||||
c.Client = &client
|
|
||||||
|
|
||||||
// 调整窗口大小 (120 列 x 128 行)
|
// 调整窗口大小 (120 列 x 128 行)
|
||||||
requestPty(c.Client, 120, 128)
|
// 需要确保接收方理解并正确处理发送窗口大小设置命令
|
||||||
|
client.Write([]byte{255, 251, 31})
|
||||||
|
client.Write([]byte{255, 250, 31, byte(120 >> 8), byte(120 & 0xFF), byte(128 >> 8), byte(128 & 0xFF), 255, 240})
|
||||||
|
|
||||||
|
c.Client = &client
|
||||||
|
|
||||||
// 排空连接登录的信息
|
// 排空连接登录的信息
|
||||||
c.RunCMD("")
|
c.RunCMD("")
|
||||||
@@ -111,20 +113,9 @@ func (c *ConnTelnet) NewClientSession(cols, rows int) (*TelnetClientSession, err
|
|||||||
if c.Client == nil {
|
if c.Client == nil {
|
||||||
return nil, fmt.Errorf("telnet client not connected")
|
return nil, fmt.Errorf("telnet client not connected")
|
||||||
}
|
}
|
||||||
requestPty(c.Client, cols, rows)
|
s := &TelnetClientSession{
|
||||||
return &TelnetClientSession{
|
|
||||||
Client: *c.Client,
|
Client: *c.Client,
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// requestPty 调整终端窗口大小
|
|
||||||
func requestPty(client *net.Conn, cols, rows int) error {
|
|
||||||
if client == nil {
|
|
||||||
return fmt.Errorf("telnet client not connected")
|
|
||||||
}
|
}
|
||||||
conn := *client
|
s.WindowChange(cols, rows)
|
||||||
// 需要确保接收方理解并正确处理发送窗口大小设置命令
|
return s, nil
|
||||||
conn.Write([]byte{255, 251, 31})
|
|
||||||
conn.Write([]byte{255, 250, 31, byte(cols >> 8), byte(cols & 0xFF), byte(rows >> 8), byte(rows & 0xFF), 255, 240})
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,17 @@ func (s *TelnetClientSession) Close() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WindowChange informs the remote host about a terminal window dimension change to h rows and w columns.
|
||||||
|
func (s *TelnetClientSession) WindowChange(h, w int) error {
|
||||||
|
if s.Client == nil {
|
||||||
|
return fmt.Errorf("client is nil to content write failed")
|
||||||
|
}
|
||||||
|
// 需要确保接收方理解并正确处理发送窗口大小设置命令
|
||||||
|
s.Client.Write([]byte{255, 251, 31})
|
||||||
|
s.Client.Write([]byte{255, 250, 31, byte(w >> 8), byte(w & 0xFF), byte(h >> 8), byte(h & 0xFF), 255, 240})
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Write 写入命令 不带回车(\n)也会执行根据客户端情况
|
// Write 写入命令 不带回车(\n)也会执行根据客户端情况
|
||||||
func (s *TelnetClientSession) Write(cmd string) (int, error) {
|
func (s *TelnetClientSession) Write(cmd string) (int, error) {
|
||||||
if s.Client == nil {
|
if s.Client == nil {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package result
|
package result
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"nms_cxy/src/framework/constants/result"
|
constResult "nms_cxy/src/framework/constants/result"
|
||||||
)
|
)
|
||||||
|
|
||||||
// CodeMsg 响应结果
|
// CodeMsg 响应结果
|
||||||
@@ -15,8 +15,8 @@ func CodeMsg(code int, msg string) map[string]any {
|
|||||||
// 响应成功结果 map[string]any{}
|
// 响应成功结果 map[string]any{}
|
||||||
func Ok(v map[string]any) map[string]any {
|
func Ok(v map[string]any) map[string]any {
|
||||||
args := make(map[string]any)
|
args := make(map[string]any)
|
||||||
args["code"] = result.CODE_SUCCESS
|
args["code"] = constResult.CODE_SUCCESS
|
||||||
args["msg"] = result.MSG_SUCCESS
|
args["msg"] = constResult.MSG_SUCCESS
|
||||||
// v合并到args
|
// v合并到args
|
||||||
for key, value := range v {
|
for key, value := range v {
|
||||||
args[key] = value
|
args[key] = value
|
||||||
@@ -27,7 +27,7 @@ func Ok(v map[string]any) map[string]any {
|
|||||||
// 响应成功结果信息
|
// 响应成功结果信息
|
||||||
func OkMsg(msg string) map[string]any {
|
func OkMsg(msg string) map[string]any {
|
||||||
args := make(map[string]any)
|
args := make(map[string]any)
|
||||||
args["code"] = result.CODE_SUCCESS
|
args["code"] = constResult.CODE_SUCCESS
|
||||||
args["msg"] = msg
|
args["msg"] = msg
|
||||||
return args
|
return args
|
||||||
}
|
}
|
||||||
@@ -35,8 +35,8 @@ func OkMsg(msg string) map[string]any {
|
|||||||
// 响应成功结果数据
|
// 响应成功结果数据
|
||||||
func OkData(data any) map[string]any {
|
func OkData(data any) map[string]any {
|
||||||
args := make(map[string]any)
|
args := make(map[string]any)
|
||||||
args["code"] = result.CODE_SUCCESS
|
args["code"] = constResult.CODE_SUCCESS
|
||||||
args["msg"] = result.MSG_SUCCESS
|
args["msg"] = constResult.MSG_SUCCESS
|
||||||
args["data"] = data
|
args["data"] = data
|
||||||
return args
|
return args
|
||||||
}
|
}
|
||||||
@@ -44,8 +44,8 @@ func OkData(data any) map[string]any {
|
|||||||
// 响应失败结果 map[string]any{}
|
// 响应失败结果 map[string]any{}
|
||||||
func Err(v map[string]any) map[string]any {
|
func Err(v map[string]any) map[string]any {
|
||||||
args := make(map[string]any)
|
args := make(map[string]any)
|
||||||
args["code"] = result.CODE_ERROR
|
args["code"] = constResult.CODE_ERROR
|
||||||
args["msg"] = result.MSG_ERROR
|
args["msg"] = constResult.MSG_ERROR
|
||||||
// v合并到args
|
// v合并到args
|
||||||
for key, value := range v {
|
for key, value := range v {
|
||||||
args[key] = value
|
args[key] = value
|
||||||
@@ -56,7 +56,7 @@ func Err(v map[string]any) map[string]any {
|
|||||||
// 响应失败结果信息
|
// 响应失败结果信息
|
||||||
func ErrMsg(msg string) map[string]any {
|
func ErrMsg(msg string) map[string]any {
|
||||||
args := make(map[string]any)
|
args := make(map[string]any)
|
||||||
args["code"] = result.CODE_ERROR
|
args["code"] = constResult.CODE_ERROR
|
||||||
args["msg"] = msg
|
args["msg"] = msg
|
||||||
return args
|
return args
|
||||||
}
|
}
|
||||||
@@ -64,8 +64,8 @@ func ErrMsg(msg string) map[string]any {
|
|||||||
// 响应失败结果数据
|
// 响应失败结果数据
|
||||||
func ErrData(data any) map[string]any {
|
func ErrData(data any) map[string]any {
|
||||||
args := make(map[string]any)
|
args := make(map[string]any)
|
||||||
args["code"] = result.CODE_ERROR
|
args["code"] = constResult.CODE_ERROR
|
||||||
args["msg"] = result.MSG_ERROR
|
args["msg"] = constResult.MSG_ERROR
|
||||||
args["data"] = data
|
args["data"] = data
|
||||||
return args
|
return args
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user