feat: 跟踪任务HLR免登录接口
This commit is contained in:
@@ -10,14 +10,15 @@ import (
|
|||||||
|
|
||||||
"be.ems/src/framework/logger"
|
"be.ems/src/framework/logger"
|
||||||
"be.ems/src/framework/utils/fetch"
|
"be.ems/src/framework/utils/fetch"
|
||||||
|
"be.ems/src/modules/network_element/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
// HLRTraceStart HLR跟踪任务开始
|
// HLRTraceStart HLR跟踪任务开始
|
||||||
//
|
//
|
||||||
// data参数 {traceID:"跟踪任务ID", imsi:"IMSI和MSISDN必填一个,都带的话以IMSI为准", msisdn:""}
|
// 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)
|
// 网元参数配置新增(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)
|
resBytes, err := fetch.PostJSON(neUrl, data, nil)
|
||||||
var resData map[string]string
|
var resData map[string]string
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -42,9 +43,9 @@ func HLRTraceStart(hlrIP string, data map[string]any) (string, error) {
|
|||||||
// HLRTraceStop HLR跟踪任务停止
|
// HLRTraceStop HLR跟踪任务停止
|
||||||
//
|
//
|
||||||
// data参数 {traceIDArray: ["跟踪任务ID数组"]}
|
// 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)
|
// 网元参数配置新增(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)
|
resBytes, err := fetch.PostJSON(neUrl, data, nil)
|
||||||
var resData map[string]string
|
var resData map[string]string
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -1,10 +1,15 @@
|
|||||||
package controller
|
package controller
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"be.ems/src/framework/i18n"
|
"be.ems/src/framework/i18n"
|
||||||
"be.ems/src/framework/utils/ctx"
|
"be.ems/src/framework/utils/ctx"
|
||||||
|
"be.ems/src/framework/utils/generate"
|
||||||
"be.ems/src/framework/utils/parse"
|
"be.ems/src/framework/utils/parse"
|
||||||
"be.ems/src/framework/vo/result"
|
"be.ems/src/framework/vo/result"
|
||||||
neService "be.ems/src/modules/network_element/service"
|
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))
|
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 {
|
type TraceTaskHlr struct {
|
||||||
// 查询视图对象SQL
|
// 查询视图对象SQL
|
||||||
selectSql string
|
selectSql string
|
||||||
@@ -299,3 +299,18 @@ func (r *TraceTaskHlr) DeleteByIds(ids []string) int64 {
|
|||||||
}
|
}
|
||||||
return results
|
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"
|
"path/filepath"
|
||||||
|
|
||||||
"be.ems/src/framework/utils/date"
|
"be.ems/src/framework/utils/date"
|
||||||
"be.ems/src/framework/utils/generate"
|
|
||||||
"be.ems/src/framework/utils/ssh"
|
"be.ems/src/framework/utils/ssh"
|
||||||
neFetchlink "be.ems/src/modules/network_element/fetch_link"
|
neFetchlink "be.ems/src/modules/network_element/fetch_link"
|
||||||
neModel "be.ems/src/modules/network_element/model"
|
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)
|
neInfos := r.neInfoService.SelectList(neModel.NeInfo{NeType: "UDM"}, false, false)
|
||||||
for _, r := range rows {
|
for _, r := range rows {
|
||||||
|
if r.Status == "0" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
for _, v := range neInfos {
|
for _, v := range neInfos {
|
||||||
neFetchlink.HLRTraceStop(v.IP, map[string]any{
|
neFetchlink.HLRTraceStop(v, map[string]any{
|
||||||
"traceIDArray": []string{r.TraceId},
|
"traceIDArray": []string{r.TraceId},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -81,10 +83,9 @@ func (r *TraceTaskHlr) DeleteByIds(ids []string) (int64, error) {
|
|||||||
// Start 创建任务
|
// Start 创建任务
|
||||||
func (r *TraceTaskHlr) Start(task model.TraceTaskHlr) (string, error) {
|
func (r *TraceTaskHlr) Start(task model.TraceTaskHlr) (string, error) {
|
||||||
hlrList := []map[string]any{}
|
hlrList := []map[string]any{}
|
||||||
task.TraceId = generate.Code(6)
|
traceId := r.traceTaskHlrRepository.LastID() + 1 // 生成任务ID < 65535
|
||||||
|
|
||||||
data := map[string]any{
|
data := map[string]any{
|
||||||
"traceID": task.TraceId,
|
"traceID": traceId,
|
||||||
"imsi": task.IMSI,
|
"imsi": task.IMSI,
|
||||||
"msisdn": task.MSISDN,
|
"msisdn": task.MSISDN,
|
||||||
}
|
}
|
||||||
@@ -106,7 +107,7 @@ func (r *TraceTaskHlr) Start(task model.TraceTaskHlr) (string, error) {
|
|||||||
"neId": neInfo.NeId,
|
"neId": neInfo.NeId,
|
||||||
"msg": "",
|
"msg": "",
|
||||||
}
|
}
|
||||||
msg, err := neFetchlink.HLRTraceStart(neInfo.IP, data)
|
msg, err := neFetchlink.HLRTraceStart(neInfo, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
hlrItem["err"] = err.Error()
|
hlrItem["err"] = err.Error()
|
||||||
} else {
|
} else {
|
||||||
@@ -118,6 +119,7 @@ func (r *TraceTaskHlr) Start(task model.TraceTaskHlr) (string, error) {
|
|||||||
msg, _ := json.Marshal(hlrList)
|
msg, _ := json.Marshal(hlrList)
|
||||||
task.Msg = string(msg)
|
task.Msg = string(msg)
|
||||||
task.Status = "1"
|
task.Status = "1"
|
||||||
|
task.TraceId = fmt.Sprint(traceId)
|
||||||
id := r.traceTaskHlrRepository.Insert(task)
|
id := r.traceTaskHlrRepository.Insert(task)
|
||||||
if id == "" {
|
if id == "" {
|
||||||
return "", fmt.Errorf("start task fail")
|
return "", fmt.Errorf("start task fail")
|
||||||
@@ -136,7 +138,7 @@ func (r *TraceTaskHlr) Stop(task model.TraceTaskHlr) error {
|
|||||||
"neId": neInfo.NeId,
|
"neId": neInfo.NeId,
|
||||||
"msg": "",
|
"msg": "",
|
||||||
}
|
}
|
||||||
msg, err := neFetchlink.HLRTraceStop(neInfo.IP, map[string]any{
|
msg, err := neFetchlink.HLRTraceStop(neInfo, map[string]any{
|
||||||
"traceIDArray": []string{task.TraceId},
|
"traceIDArray": []string{task.TraceId},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -171,6 +173,7 @@ func (r *TraceTaskHlr) File(traceId, dirPath string) ([]map[string]any, error) {
|
|||||||
hlrItem := map[string]any{
|
hlrItem := map[string]any{
|
||||||
"neType": neInfo.NeType,
|
"neType": neInfo.NeType,
|
||||||
"neId": neInfo.NeId,
|
"neId": neInfo.NeId,
|
||||||
|
"neName": neInfo.NeName,
|
||||||
"err": "",
|
"err": "",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,7 +187,7 @@ func (r *TraceTaskHlr) File(traceId, dirPath string) ([]map[string]any, error) {
|
|||||||
defer sshClient.Close()
|
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)
|
_, rows, err := ssh.FileList(sshClient, filepath.ToSlash(dirPath), fileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
hlrItem["err"] = "file not found"
|
hlrItem["err"] = "file not found"
|
||||||
|
|||||||
Reference in New Issue
Block a user