feat: 跟踪任务HLR免登录接口

This commit is contained in:
TsMask
2024-09-20 14:56:54 +08:00
parent 68ef026bee
commit ee2cff7208
4 changed files with 96 additions and 13 deletions

View File

@@ -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 {

View File

@@ -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)
}

View File

@@ -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
}

View File

@@ -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"