diff --git a/src/modules/nms_cxy/controller/system.go b/src/modules/nms_cxy/controller/system.go index 615762c..9379401 100644 --- a/src/modules/nms_cxy/controller/system.go +++ b/src/modules/nms_cxy/controller/system.go @@ -8,6 +8,7 @@ import ( "nms_cxy/src/framework/utils/date" "nms_cxy/src/framework/utils/ping" "nms_cxy/src/framework/vo/result" + neModel "nms_cxy/src/modules/network_element/model" neService "nms_cxy/src/modules/network_element/service" "nms_cxy/src/modules/nms_cxy/service" "nms_cxy/src/modules/nms_cxy/utils/common" @@ -67,7 +68,7 @@ func (s *SystemController) SoftwareVersionInfo(c *gin.Context) { return } - neVersion := s.neVersionService.SelectByTypeAndID(neInfo.NeType, neInfo.NeId) + neVersion := s.neVersionService.SelectByNeTypeAndNeID(neInfo.NeType, neInfo.NeId) if neVersion.ID == "" { c.JSON(200, map[string]any{ "requestId": body.RequestId, @@ -98,17 +99,22 @@ func (s *SystemController) SoftwareDownloadCheck(c *gin.Context) { return } - neSoftware := s.neSoftwareService.SelectByVersionAndPath(body.SoftwareVersion, body.DownloadPath) - if neSoftware.Version != body.SoftwareVersion { - c.JSON(500, map[string]any{ - "requestId": body.RequestId, - "errorInfo": "NE not exist", - }) - return + list := s.neSoftwareService.SelectList(neModel.NeSoftware{ + Version: body.SoftwareVersion, + Path: body.DownloadPath, + }) + if len(list) > 0 { + neSoftware := list[0] + if neSoftware.Version == body.SoftwareVersion { + c.JSON(200, map[string]any{ + "requestId": body.RequestId, + }) + return + } } - - c.JSON(200, map[string]any{ + c.JSON(500, map[string]any{ "requestId": body.RequestId, + "errorInfo": "NE not exist", }) } @@ -164,7 +170,7 @@ func (s *SystemController) SoftwareUpdateVersion(c *gin.Context) { return } - neVersion := s.neVersionService.SelectByTypeAndID(neInfo.NeType, neInfo.NeId) + neVersion := s.neVersionService.SelectByNeTypeAndNeID(neInfo.NeType, neInfo.NeId) if neVersion.ID == "" { c.JSON(200, map[string]any{ "requestId": body.RequestId, diff --git a/src/modules/nms_cxy/service/config.impl.go b/src/modules/nms_cxy/service/config.impl.go index ffc462e..b8b5cdf 100644 --- a/src/modules/nms_cxy/service/config.impl.go +++ b/src/modules/nms_cxy/service/config.impl.go @@ -3,19 +3,18 @@ package service import ( "encoding/json" "fmt" - "nms_cxy/lib/core/utils/date" "nms_cxy/src/framework/constants/uploadsubpath" "nms_cxy/src/framework/logger" - "nms_cxy/src/framework/utils/cmd" + "nms_cxy/src/framework/utils/date" "nms_cxy/src/framework/utils/file" - "nms_cxy/src/framework/utils/ssh" neModel "nms_cxy/src/modules/network_element/model" neService "nms_cxy/src/modules/network_element/service" "nms_cxy/src/modules/nms_cxy/model" "nms_cxy/src/modules/nms_cxy/utils/common" - "path/filepath" "strings" "time" + + neFetchlink "nms_cxy/src/modules/network_element/fetch_link" ) // 实例化数据层 ConfigImpl 结构体 @@ -45,13 +44,29 @@ func (s *ConfigImpl) ConfigUploadOSS(neType string) error { return fmt.Errorf("no ne info") } + // 网元主机的SSH客户端 + sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId) + if err != nil { + logger.Errorf("ConfigUploadOSS NeRunSSHClient %s", err.Error()) + return fmt.Errorf("ne info ssh client err") + } + defer sshClient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshClient.NewClientSFTP() + if err != nil { + logger.Errorf("ConfigUploadOSS NewClientSFTP %s", err.Error()) + return fmt.Errorf("ne info sftp client err") + + } + defer sftpClient.Close() + // 配置文件目录 nePath := fmt.Sprintf("/usr/local/etc/%s/*.yaml", strings.ToLower(neType)) localPath := fmt.Sprintf("/usr/local/omc/etc/%s/", strings.ToLower(neType)) - err := ssh.FileSCPNeToLocal(neInfo.IP, nePath, localPath) - if err != nil { - logger.Errorf("ConfigUploadOSS scp err %s", err.Error()) - return err + // 复制到本地 + if err = sftpClient.CopyDirRemoteToLocal(nePath, localPath); err != nil { + logger.Errorf("%s : please check if scp remote copy is allowed", neInfo.NeType) + return fmt.Errorf("copy config err") } // 文件名 @@ -74,7 +89,7 @@ func (s *ConfigImpl) ConfigUploadOSS(neType string) error { func (s *ConfigImpl) ConfigParamQuery(neInfo neModel.NeInfo, operPara []string) map[string]any { resultMap := map[string]any{} - neState, err := neService.NeState(neInfo) + neState, err := neFetchlink.NeState(neInfo) if err != nil { return resultMap } @@ -492,28 +507,33 @@ func (s *ConfigImpl) paramModifyBase(neInfo neModel.NeInfo, operPara map[string] // 重启 if v, ok := operPara["Reboot"]; ok && v != nil { if v.(bool) { - cmdStr := fmt.Sprintf("sleep 5s && sudo service %s restart", strings.ToLower(neInfo.NeType)) - if neInfo.NeType == "IMS" { - cmdStr = "sleep 5s && sudo ims-start restart" + neTypeLower := strings.ToLower(neInfo.NeType) + cmdStr := fmt.Sprintf("sudo service %s restart", neTypeLower) + if neTypeLower == "omc" { + cmdStr = "nohup sh -c \"sudo systemctl stop restagent && sleep 5s && sudo systemctl restart restagent\" > /dev/null 2>&1 &" + } else if neTypeLower == "ims" { + cmdStr = "ims-stop || true && ims-start" + } + _, err := s.neInfoService.NeRunSSHCmd(neInfo.NeType, neInfo.NeId, cmdStr) + if err != nil { + logger.Errorf("NE service reboot error %s \n", err.Error()) } - go func() { - _, err := cmd.ExecWithCheck("nohup", "sh", "-c", cmdStr, "> /dev/null 2>&1 &\n") - if err != nil { - logger.Errorf("NE service reboot error %s \n", err.Error()) - } - }() } } // 回退 if v, ok := operPara["BackupSoftwareActivateEnable"]; ok && v != nil { if v.(bool) { - neVersion := s.neVersionService.SelectByTypeAndID(neInfo.NeType, neInfo.NeId) + neVersion := s.neVersionService.SelectByNeTypeAndNeID(neInfo.NeType, neInfo.NeId) if neVersion.NeId == neInfo.NeId { - ssh.FileSCPLocalToNe(neInfo.IP, "/usr/local/omc/bin/rbkpkg.sh", "/tmp/") - ssh.FileSCPLocalToNe(neInfo.IP, neVersion.PreFile, "/tmp/") - cmdStr := fmt.Sprintf("chmod +x /tmp/rbkpkg.sh \n sudo /tmp/rbkpkg.sh '/tmp/%s' %s", filepath.Base(neVersion.PreFile), neInfo.NeType) - _, err := cmd.ExecWithCheck("ssh", cmdStr) + preinput := map[string]string{} + if neInfo.NeType == "IMS" { + preinput["pisCSCF"] = "y" + preinput["updateMFetc"] = "No" + preinput["updateMFshare"] = "No" + } + // 进行相关命令操作 + _, err := s.neVersionService.Operate("rollback", neVersion, preinput) if err != nil { logger.Errorf("NE service backupSoftwareActivateEnable error %s \n", err.Error()) } @@ -522,12 +542,12 @@ func (s *ConfigImpl) paramModifyBase(neInfo neModel.NeInfo, operPara map[string] } // 获取网元状态是否正常 - _, err := neService.NeState(neInfo) + _, err := neFetchlink.NeState(neInfo) if err != nil { neInfo.Status = "1" } else { // 下发网管配置信息给网元 - _, err = neService.NeConfigOMC(neInfo) + _, err = neFetchlink.NeConfigOMC(neInfo) if err == nil { neInfo.Status = "0" } else { diff --git a/src/modules/nms_cxy/service/log.impl.go b/src/modules/nms_cxy/service/log.impl.go index b435064..0770277 100644 --- a/src/modules/nms_cxy/service/log.impl.go +++ b/src/modules/nms_cxy/service/log.impl.go @@ -37,7 +37,7 @@ func (s *LogImpl) OperateLogToFile(language, startTime, endTime string) (int64, "endTime": endTime, "pageNum": pageNum, "pageSize": pageSize, - }) + }, "") total := parse.Number(pageData["total"]) rows, ok := pageData["rows"].([]systemModel.SysLogOperate) @@ -61,7 +61,7 @@ func (s *LogImpl) OperateLogToFile(language, startTime, endTime string) (int64, "endTime": endTime, "pageNum": pageNum, "pageSize": pageSize, - }) + }, "") rows, ok := pageData["rows"].([]systemModel.SysLogOperate) if !ok || len(rows) <= 0 { return int64(len(dataArr)), "" @@ -100,7 +100,7 @@ func (s *LogImpl) SecurityLogToFile(language, startTime, endTime string) (int64, "endTime": endTime, "pageNum": pageNum, "pageSize": pageSize, - }) + }, "") total := parse.Number(pageData["total"]) rows, ok := pageData["rows"].([]systemModel.SysLogLogin) @@ -125,7 +125,7 @@ func (s *LogImpl) SecurityLogToFile(language, startTime, endTime string) (int64, "endTime": endTime, "pageNum": pageNum, "pageSize": pageSize, - }) + }, "") rows, ok := pageData["rows"].([]systemModel.SysLogLogin) if !ok || len(rows) <= 0 { return int64(len(dataArr)), ""