feat: 跟踪任务HLR免登录接口
This commit is contained in:
@@ -10,14 +10,15 @@ import (
|
||||
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/fetch"
|
||||
"be.ems/src/modules/network_element/model"
|
||||
)
|
||||
|
||||
// HLRTraceStart HLR跟踪任务开始
|
||||
//
|
||||
// data参数 {traceID:"跟踪任务ID", imsi:"IMSI和MSISDN必填一个,都带的话以IMSI为准", msisdn:""}
|
||||
func HLRTraceStart(hlrIP string, data map[string]any) (string, error) {
|
||||
func HLRTraceStart(neInfo model.NeInfo, data map[string]any) (string, error) {
|
||||
// 网元参数配置新增(array)
|
||||
neUrl := fmt.Sprintf("http://%s:8080/trace-manage/v1/add-task", hlrIP)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/trace-manage/v1/add-task", neInfo.IP, neInfo.Port)
|
||||
resBytes, err := fetch.PostJSON(neUrl, data, nil)
|
||||
var resData map[string]string
|
||||
if err != nil {
|
||||
@@ -42,9 +43,9 @@ func HLRTraceStart(hlrIP string, data map[string]any) (string, error) {
|
||||
// HLRTraceStop HLR跟踪任务停止
|
||||
//
|
||||
// data参数 {traceIDArray: ["跟踪任务ID数组"]}
|
||||
func HLRTraceStop(hlrIP string, data map[string]any) (string, error) {
|
||||
func HLRTraceStop(neInfo model.NeInfo, data map[string]any) (string, error) {
|
||||
// 网元参数配置新增(array)
|
||||
neUrl := fmt.Sprintf("http://%s:8080/trace-manage/v1/delete-task", hlrIP)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/trace-manage/v1/delete-task", neInfo.IP, neInfo.Port)
|
||||
resBytes, err := fetch.PostJSON(neUrl, data, nil)
|
||||
var resData map[string]string
|
||||
if err != nil {
|
||||
|
||||
@@ -1,10 +1,15 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
|
||||
"be.ems/src/framework/i18n"
|
||||
"be.ems/src/framework/utils/ctx"
|
||||
"be.ems/src/framework/utils/generate"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
"be.ems/src/framework/vo/result"
|
||||
neService "be.ems/src/modules/network_element/service"
|
||||
@@ -176,3 +181,62 @@ func (s *TraceTaskHlrController) File(c *gin.Context) {
|
||||
}
|
||||
c.JSON(200, result.OkData(list))
|
||||
}
|
||||
|
||||
// 跟踪任务文件从网元到本地
|
||||
//
|
||||
// GET /filePull
|
||||
func (s *TraceTaskHlrController) FilePull(c *gin.Context) {
|
||||
language := ctx.AcceptLanguage(c)
|
||||
var querys struct {
|
||||
NeType string `form:"neType" binding:"required"`
|
||||
NeID string `form:"neId" binding:"required"`
|
||||
Path string `form:"path" binding:"required"`
|
||||
FileName string `form:"fileName" binding:"required"`
|
||||
DelTemp bool `form:"delTemp"` // 删除本地临时文件
|
||||
}
|
||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(querys.NeType, querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
// 网元主机的SSH客户端
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId)
|
||||
if err != nil {
|
||||
c.JSON(200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer sshClient.Close()
|
||||
// 网元主机的SSH客户端进行文件传输
|
||||
sftpClient, err := sshClient.NewClientSFTP()
|
||||
if err != nil {
|
||||
c.JSON(200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer sftpClient.Close()
|
||||
|
||||
nePath := filepath.ToSlash(filepath.Join(querys.Path, querys.FileName))
|
||||
fileName := generate.Code(6) + "_" + querys.FileName
|
||||
localFilePath := filepath.Join("/tmp/omc/pull", fileName)
|
||||
if runtime.GOOS == "windows" {
|
||||
localFilePath = fmt.Sprintf("C:%s", localFilePath)
|
||||
}
|
||||
// 复制到本地
|
||||
if err = sftpClient.CopyFileRemoteToLocal(nePath, localFilePath); err != nil {
|
||||
c.JSON(200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if querys.DelTemp {
|
||||
_ = os.Remove(localFilePath)
|
||||
}
|
||||
}()
|
||||
c.FileAttachment(localFilePath, fileName)
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ var NewTraceTaskHlr = &TraceTaskHlr{
|
||||
},
|
||||
}
|
||||
|
||||
// CDREventIMSImpl 跟踪_任务给HRL网元 数据层处理
|
||||
// TraceTaskHlr 跟踪_任务给HRL网元 数据层处理
|
||||
type TraceTaskHlr struct {
|
||||
// 查询视图对象SQL
|
||||
selectSql string
|
||||
@@ -299,3 +299,18 @@ func (r *TraceTaskHlr) DeleteByIds(ids []string) int64 {
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// LastID 最后一条ID
|
||||
func (r *TraceTaskHlr) LastID() int64 {
|
||||
// 查询数据
|
||||
querySql := "SELECT id as 'str' FROM trace_task_hlr ORDER BY id DESC LIMIT 1"
|
||||
results, err := datasource.RawDB("", querySql, nil)
|
||||
if err != nil {
|
||||
logger.Errorf("query err %v", err)
|
||||
return 0
|
||||
}
|
||||
if len(results) > 0 {
|
||||
return parse.Number(results[0]["str"])
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"path/filepath"
|
||||
|
||||
"be.ems/src/framework/utils/date"
|
||||
"be.ems/src/framework/utils/generate"
|
||||
"be.ems/src/framework/utils/ssh"
|
||||
neFetchlink "be.ems/src/modules/network_element/fetch_link"
|
||||
neModel "be.ems/src/modules/network_element/model"
|
||||
@@ -65,8 +64,11 @@ func (r *TraceTaskHlr) DeleteByIds(ids []string) (int64, error) {
|
||||
// 停止任务
|
||||
neInfos := r.neInfoService.SelectList(neModel.NeInfo{NeType: "UDM"}, false, false)
|
||||
for _, r := range rows {
|
||||
if r.Status == "0" {
|
||||
continue
|
||||
}
|
||||
for _, v := range neInfos {
|
||||
neFetchlink.HLRTraceStop(v.IP, map[string]any{
|
||||
neFetchlink.HLRTraceStop(v, map[string]any{
|
||||
"traceIDArray": []string{r.TraceId},
|
||||
})
|
||||
}
|
||||
@@ -81,10 +83,9 @@ func (r *TraceTaskHlr) DeleteByIds(ids []string) (int64, error) {
|
||||
// Start 创建任务
|
||||
func (r *TraceTaskHlr) Start(task model.TraceTaskHlr) (string, error) {
|
||||
hlrList := []map[string]any{}
|
||||
task.TraceId = generate.Code(6)
|
||||
|
||||
traceId := r.traceTaskHlrRepository.LastID() + 1 // 生成任务ID < 65535
|
||||
data := map[string]any{
|
||||
"traceID": task.TraceId,
|
||||
"traceID": traceId,
|
||||
"imsi": task.IMSI,
|
||||
"msisdn": task.MSISDN,
|
||||
}
|
||||
@@ -106,7 +107,7 @@ func (r *TraceTaskHlr) Start(task model.TraceTaskHlr) (string, error) {
|
||||
"neId": neInfo.NeId,
|
||||
"msg": "",
|
||||
}
|
||||
msg, err := neFetchlink.HLRTraceStart(neInfo.IP, data)
|
||||
msg, err := neFetchlink.HLRTraceStart(neInfo, data)
|
||||
if err != nil {
|
||||
hlrItem["err"] = err.Error()
|
||||
} else {
|
||||
@@ -118,6 +119,7 @@ func (r *TraceTaskHlr) Start(task model.TraceTaskHlr) (string, error) {
|
||||
msg, _ := json.Marshal(hlrList)
|
||||
task.Msg = string(msg)
|
||||
task.Status = "1"
|
||||
task.TraceId = fmt.Sprint(traceId)
|
||||
id := r.traceTaskHlrRepository.Insert(task)
|
||||
if id == "" {
|
||||
return "", fmt.Errorf("start task fail")
|
||||
@@ -136,7 +138,7 @@ func (r *TraceTaskHlr) Stop(task model.TraceTaskHlr) error {
|
||||
"neId": neInfo.NeId,
|
||||
"msg": "",
|
||||
}
|
||||
msg, err := neFetchlink.HLRTraceStop(neInfo.IP, map[string]any{
|
||||
msg, err := neFetchlink.HLRTraceStop(neInfo, map[string]any{
|
||||
"traceIDArray": []string{task.TraceId},
|
||||
})
|
||||
if err != nil {
|
||||
@@ -171,6 +173,7 @@ func (r *TraceTaskHlr) File(traceId, dirPath string) ([]map[string]any, error) {
|
||||
hlrItem := map[string]any{
|
||||
"neType": neInfo.NeType,
|
||||
"neId": neInfo.NeId,
|
||||
"neName": neInfo.NeName,
|
||||
"err": "",
|
||||
}
|
||||
|
||||
@@ -184,7 +187,7 @@ func (r *TraceTaskHlr) File(traceId, dirPath string) ([]map[string]any, error) {
|
||||
defer sshClient.Close()
|
||||
|
||||
// 获取文件列表
|
||||
fileName := fmt.Sprintf("%s_%s_%s", neInfo.NeType, neInfo.NeId, traceId)
|
||||
fileName := fmt.Sprintf("%s_%s", neInfo.NeName, traceId)
|
||||
_, rows, err := ssh.FileList(sshClient, filepath.ToSlash(dirPath), fileName)
|
||||
if err != nil {
|
||||
hlrItem["err"] = "file not found"
|
||||
|
||||
Reference in New Issue
Block a user