fix 任务周期备份配置文件发送ftp备份路径去掉一层

This commit is contained in:
TsMask
2025-06-20 16:47:03 +08:00
parent ea21f73abd
commit c638ba0884
3 changed files with 39 additions and 36 deletions

View File

@@ -30,7 +30,7 @@ func (s *NeConfigBackupProcessor) Execute(data any) (any, error) {
s.count++ // 执行次数加一 s.count++ // 执行次数加一
options := data.(cron.JobData) options := data.(cron.JobData)
sysJob := options.SysJob sysJob := options.SysJob
logger.Infof("重复 %v 任务ID %s", options.Repeat, sysJob.JobID) logger.Infof("重复:%v 任务ID:%s 执行次数:%d", options.Repeat, sysJob.JobID, s.count)
// 返回结果,用于记录执行结果 // 返回结果,用于记录执行结果
result := map[string]any{ result := map[string]any{
"count": s.count, "count": s.count,
@@ -40,7 +40,7 @@ func (s *NeConfigBackupProcessor) Execute(data any) (any, error) {
for _, neInfo := range neList { for _, neInfo := range neList {
neTypeAndId := fmt.Sprintf("%s_%s", neInfo.NeType, neInfo.NeId) neTypeAndId := fmt.Sprintf("%s_%s", neInfo.NeType, neInfo.NeId)
// 将网元文件备份到本地 // 将网元文件备份到本地
zipFilePath, err := s.neConfigBackupService.NeConfigNeToLocal(neInfo) zipFilePath, err := s.neConfigBackupService.FileNeToLocal(neInfo)
if err != nil { if err != nil {
result[neTypeAndId] = err.Error() result[neTypeAndId] = err.Error()
continue continue
@@ -62,7 +62,7 @@ func (s *NeConfigBackupProcessor) Execute(data any) (any, error) {
msg := "ok" msg := "ok"
// 上传到FTP服务器 // 上传到FTP服务器
if err := s.backupService.FTPPushFile(zipFilePath, "ne_config"); err != nil { if err := s.backupService.FTPPushFile(zipFilePath, ""); err != nil {
result[neTypeAndId] = msg + ", ftp err:" + err.Error() result[neTypeAndId] = msg + ", ftp err:" + err.Error()
} }
result[neTypeAndId] = msg result[neTypeAndId] = msg

View File

@@ -1,11 +1,14 @@
package controller package controller
import ( import (
"fmt"
"os" "os"
"path/filepath" "path/filepath"
"strings" "strings"
"be.ems/src/framework/i18n" "be.ems/src/framework/i18n"
"be.ems/src/framework/reqctx"
"be.ems/src/framework/resp"
"be.ems/src/framework/utils/ctx" "be.ems/src/framework/utils/ctx"
"be.ems/src/framework/utils/file" "be.ems/src/framework/utils/file"
"be.ems/src/framework/utils/parse" "be.ems/src/framework/utils/parse"
@@ -129,27 +132,28 @@ func (s *NeConfigBackupController) Remove(c *gin.Context) {
// 网元配置文件备份导入 // 网元配置文件备份导入
// //
// POST /import // POST /import
func (s *NeConfigBackupController) Import(c *gin.Context) { func (s NeConfigBackupController) Import(c *gin.Context) {
language := ctx.AcceptLanguage(c) language := reqctx.AcceptLanguage(c)
var body struct { var body struct {
NeType string `json:"neType" binding:"required"` NeType string `json:"neType" binding:"required"`
NeId string `json:"neId" binding:"required"` NeId string `json:"neId" binding:"required"`
Type string `json:"type" binding:"required,oneof=backup upload"` // 导入类型 Type string `json:"type" binding:"required,oneof=backup upload"` // 导入类型
Path string `json:"path" binding:"required"` // 文件路径 Path string `json:"path" binding:"required"` // 文件路径
} }
if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { if err := c.ShouldBindBodyWithJSON(&body); err != nil {
c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
return return
} }
if !strings.HasSuffix(body.Path, ".zip") { if !strings.HasSuffix(body.Path, ".zip") {
c.JSON(200, result.ErrMsg("Only supports decompression of zip files")) c.JSON(200, resp.ErrMsg("Only supports decompression of zip files"))
return return
} }
// 查网元 // 查网元
neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(body.NeType, body.NeId) neInfo := s.neInfoService.FindByNeTypeAndNeID(body.NeType, body.NeId)
if neInfo.NeId != body.NeId || neInfo.IP == "" { if neInfo.NeId != body.NeId || neInfo.IP == "" {
c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
return return
} }
// 将zip文件解压到本地后复制到网元端 // 将zip文件解压到本地后复制到网元端
@@ -157,36 +161,37 @@ func (s *NeConfigBackupController) Import(c *gin.Context) {
if body.Type == "upload" { if body.Type == "upload" {
localFilePath = file.ParseUploadFilePath(body.Path) localFilePath = file.ParseUploadFilePath(body.Path)
} }
if err := s.neConfigBackupService.NeConfigLocalToNe(neInfo, localFilePath); err != nil { if err := s.neConfigBackupService.FileLocalToNe(neInfo, localFilePath); err != nil {
c.JSON(200, result.ErrMsg(err.Error())) c.JSON(200, resp.ErrMsg(err.Error()))
return return
} }
c.JSON(200, result.Ok(nil)) c.JSON(200, resp.Ok(nil))
} }
// 网元配置文件备份导出 // 网元配置文件备份导出
// //
// POST /export // POST /export
func (s *NeConfigBackupController) Export(c *gin.Context) { func (s NeConfigBackupController) Export(c *gin.Context) {
language := ctx.AcceptLanguage(c) language := reqctx.AcceptLanguage(c)
var body struct { var body struct {
NeType string `json:"neType" binding:"required"` NeType string `json:"neType" binding:"required"`
NeId string `json:"neId" binding:"required"` NeId string `json:"neId" binding:"required"`
} }
if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { if err := c.ShouldBindBodyWithJSON(&body); err != nil {
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
return return
} }
// 查网元 // 查网元
neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(body.NeType, body.NeId) neInfo := s.neInfoService.FindByNeTypeAndNeID(body.NeType, body.NeId)
if neInfo.NeId != body.NeId || neInfo.IP == "" { if neInfo.NeId != body.NeId || neInfo.IP == "" {
c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
return return
} }
// 将网元文件备份到本地 // 将网元文件备份到本地
zipFilePath, err := s.neConfigBackupService.NeConfigNeToLocal(neInfo) zipFilePath, err := s.neConfigBackupService.FileNeToLocal(neInfo)
if err != nil { if err != nil {
c.JSON(200, result.ErrMsg(err.Error())) c.JSON(200, resp.ErrMsg(err.Error()))
return return
} }
// 新增备份记录 // 新增备份记录
@@ -195,7 +200,7 @@ func (s *NeConfigBackupController) Export(c *gin.Context) {
NeId: neInfo.NeId, NeId: neInfo.NeId,
Name: filepath.Base(zipFilePath), Name: filepath.Base(zipFilePath),
Path: zipFilePath, Path: zipFilePath,
CreateBy: ctx.LoginUserToUserName(c), CreateBy: reqctx.LoginUserToUserName(c),
} }
s.neConfigBackupService.Insert(item) s.neConfigBackupService.Insert(item)
c.FileAttachment(item.Path, item.Name) c.FileAttachment(item.Path, item.Name)

View File

@@ -71,8 +71,8 @@ func (r *NeConfigBackup) DeleteByIds(ids []string) (int64, error) {
return 0, fmt.Errorf("delete fail") return 0, fmt.Errorf("delete fail")
} }
// NeConfigLocalToNe 网元配置文件复制到网元端覆盖 // FileLocalToNe 网元配置文件复制到网元端覆盖
func (r *NeConfigBackup) NeConfigLocalToNe(neInfo model.NeInfo, localFile string) error { func (s NeConfigBackup) FileLocalToNe(neInfo model.NeInfo, localFile string) error {
neTypeLower := strings.ToLower(neInfo.NeType) neTypeLower := strings.ToLower(neInfo.NeType)
// 网管本地路径 // 网管本地路径
omcPath := "/usr/local/omc/backup/ne_config" omcPath := "/usr/local/omc/backup/ne_config"
@@ -106,7 +106,8 @@ func (r *NeConfigBackup) NeConfigLocalToNe(neInfo model.NeInfo, localFile string
} }
// 配置复制到网元内 // 配置复制到网元内
if neTypeLower == "ims" { switch neTypeLower {
case "ims":
// ims目录 // ims目录
imsDirArr := [...]string{"bgcf", "icscf", "ismc", "mmtel", "mrf", "oam_manager.yaml", "pcscf", "scscf", "vars.cfg", "zlog"} imsDirArr := [...]string{"bgcf", "icscf", "ismc", "mmtel", "mrf", "oam_manager.yaml", "pcscf", "scscf", "vars.cfg", "zlog"}
for _, v := range imsDirArr { for _, v := range imsDirArr {
@@ -118,12 +119,10 @@ func (r *NeConfigBackup) NeConfigLocalToNe(neInfo model.NeInfo, localFile string
sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/etc/rtproxy && sudo cp -rf %s/rtproxy/* /usr/local/etc/rtproxy && sudo chmod 777 /usr/local/etc/rtproxy/rtproxy.conf", neDirTemp)) sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/etc/rtproxy && sudo cp -rf %s/rtproxy/* /usr/local/etc/rtproxy && sudo chmod 777 /usr/local/etc/rtproxy/rtproxy.conf", neDirTemp))
// iwf目录 // iwf目录
sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/etc/iwf && sudo cp -rf %s/iwf/* /usr/local/etc/iwf && sudo chmod 777 /usr/local/etc/iwf/*.yaml", neDirTemp)) sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/etc/iwf && sudo cp -rf %s/iwf/* /usr/local/etc/iwf && sudo chmod 777 /usr/local/etc/iwf/*.yaml", neDirTemp))
} else if neTypeLower == "omc" { case "smsc":
sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/omc/etc && sudo cp -rf %s/* /usr/local/omc/etc && sudo chmod 777 /usr/local/omc/etc/*.{yaml,conf}", neDirTemp))
} else if neTypeLower == "smsc" {
chmodFile := "sudo chmod 777 /usr/local/etc/smsc/{*sys.conf,*conf.txt,conf/is41_operation.conf}" chmodFile := "sudo chmod 777 /usr/local/etc/smsc/{*sys.conf,*conf.txt,conf/is41_operation.conf}"
sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/etc/smsc/conf && sudo cp -rf %s/* /usr/local/etc/smsc && %s", neDirTemp, chmodFile)) sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/etc/smsc/conf && sudo cp -rf %s/* /usr/local/etc/smsc && %s", neDirTemp, chmodFile))
} else { default:
neEtcPath := fmt.Sprintf("/usr/local/etc/%s", neTypeLower) neEtcPath := fmt.Sprintf("/usr/local/etc/%s", neTypeLower)
chmodFile := fmt.Sprintf("sudo chmod 777 %s/*.yaml", neEtcPath) chmodFile := fmt.Sprintf("sudo chmod 777 %s/*.yaml", neEtcPath)
if neTypeLower == "mme" { if neTypeLower == "mme" {
@@ -137,8 +136,8 @@ func (r *NeConfigBackup) NeConfigLocalToNe(neInfo model.NeInfo, localFile string
return nil return nil
} }
// NeConfigNeToLocal 网元备份文件网元端复制到本地 // FileNeToLocal 网元备份文件网元端复制到本地
func (r *NeConfigBackup) NeConfigNeToLocal(neInfo model.NeInfo) (string, error) { func (s NeConfigBackup) FileNeToLocal(neInfo model.NeInfo) (string, error) {
// 网元主机的SSH客户端 // 网元主机的SSH客户端
sshClient, err := NewNeInfo.NeRunSSHClient(neInfo.NeType, neInfo.NeId) sshClient, err := NewNeInfo.NeRunSSHClient(neInfo.NeType, neInfo.NeId)
if err != nil { if err != nil {
@@ -163,7 +162,8 @@ func (r *NeConfigBackup) NeConfigNeToLocal(neInfo model.NeInfo) (string, error)
// 网元配置文件先复制到临时目录 // 网元配置文件先复制到临时目录
sshClient.RunCMD("sudo mkdir -p /tmp/omc/ne_config && sudo chmod 777 -R /tmp/omc") sshClient.RunCMD("sudo mkdir -p /tmp/omc/ne_config && sudo chmod 777 -R /tmp/omc")
neDirTemp := fmt.Sprintf("/tmp/omc/ne_config/%s/%s", neTypeLower, neInfo.NeId) neDirTemp := fmt.Sprintf("/tmp/omc/ne_config/%s/%s", neTypeLower, neInfo.NeId)
if neTypeLower == "ims" { switch neTypeLower {
case "ims":
// ims目录 // ims目录
sshClient.RunCMD(fmt.Sprintf("mkdir -p %s/ims", neDirTemp)) sshClient.RunCMD(fmt.Sprintf("mkdir -p %s/ims", neDirTemp))
imsDirArr := [...]string{"bgcf", "icscf", "ismc", "mmtel", "mrf", "oam_manager.yaml", "pcscf", "scscf", "vars.cfg", "zlog"} imsDirArr := [...]string{"bgcf", "icscf", "ismc", "mmtel", "mrf", "oam_manager.yaml", "pcscf", "scscf", "vars.cfg", "zlog"}
@@ -176,12 +176,10 @@ func (r *NeConfigBackup) NeConfigNeToLocal(neInfo model.NeInfo) (string, error)
sshClient.RunCMD(fmt.Sprintf("mkdir -p %s/rtproxy && sudo cp -rf /usr/local/etc/rtproxy/rtproxy.conf %s/rtproxy", neDirTemp, neDirTemp)) sshClient.RunCMD(fmt.Sprintf("mkdir -p %s/rtproxy && sudo cp -rf /usr/local/etc/rtproxy/rtproxy.conf %s/rtproxy", neDirTemp, neDirTemp))
// iwf目录 // iwf目录
sshClient.RunCMD(fmt.Sprintf("mkdir -p %s/iwf && sudo cp -rf /usr/local/etc/iwf/*.yaml %s/iwf", neDirTemp, neDirTemp)) sshClient.RunCMD(fmt.Sprintf("mkdir -p %s/iwf && sudo cp -rf /usr/local/etc/iwf/*.yaml %s/iwf", neDirTemp, neDirTemp))
} else if neTypeLower == "omc" { case "smsc":
sshClient.RunCMD(fmt.Sprintf("mkdir -p %s && sudo cp -rf /usr/local/omc/etc/*.{yaml,conf} %s", neDirTemp, neDirTemp))
} else if neTypeLower == "smsc" {
sshClient.RunCMD(fmt.Sprintf("mkdir -p %s && sudo cp -rf /usr/local/etc/smsc/{*.yaml,*.conf,*conf.txt} %s", neDirTemp, neDirTemp)) sshClient.RunCMD(fmt.Sprintf("mkdir -p %s && sudo cp -rf /usr/local/etc/smsc/{*.yaml,*.conf,*conf.txt} %s", neDirTemp, neDirTemp))
sshClient.RunCMD(fmt.Sprintf("sudo cp -rf /usr/local/etc/smsc/conf %s/conf", neDirTemp)) sshClient.RunCMD(fmt.Sprintf("sudo cp -rf /usr/local/etc/smsc/conf %s/conf", neDirTemp))
} else { default:
nePath := fmt.Sprintf("/usr/local/etc/%s/*.yaml", neTypeLower) nePath := fmt.Sprintf("/usr/local/etc/%s/*.yaml", neTypeLower)
if neTypeLower == "mme" { if neTypeLower == "mme" {
nePath = fmt.Sprintf("/usr/local/etc/%s/*.{yaml,conf}", neTypeLower) nePath = fmt.Sprintf("/usr/local/etc/%s/*.{yaml,conf}", neTypeLower)