diff --git a/src/modules/network_data/controller/udm_auth.go b/src/modules/network_data/controller/udm_auth.go index dbaeb3ec..e4dd1fe1 100644 --- a/src/modules/network_data/controller/udm_auth.go +++ b/src/modules/network_data/controller/udm_auth.go @@ -46,7 +46,6 @@ func (s *UDMAuthController) ResetData(c *gin.Context) { return } - neId = "" data := s.udmAuthService.ResetData(neId) c.JSON(200, result.OkData(data)) } @@ -56,7 +55,6 @@ func (s *UDMAuthController) ResetData(c *gin.Context) { // GET /list func (s *UDMAuthController) List(c *gin.Context) { querys := ctx.QueryMap(c) - querys["neId"] = "" data := s.udmAuthService.SelectPage(querys) c.JSON(200, result.Ok(data)) } @@ -100,7 +98,6 @@ func (s *UDMAuthController) Info(c *gin.Context) { return } - neId = "" // 解析返回的数据 u := s.udmAuthService.ParseInfo(imsi, neId, data) s.udmAuthService.Insert(neId, u) @@ -150,7 +147,6 @@ func (s *UDMAuthController) Add(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { - neId = "" s.udmAuthService.Insert(neId, body) } c.JSON(200, result.OkData(data)) @@ -200,8 +196,7 @@ func (s *UDMAuthController) Adds(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { - neId = "" - go s.udmAuthService.LoadData(neId, body.IMSI, num) + s.udmAuthService.LoadData(neId, body.IMSI, num) } c.JSON(200, result.OkData(data)) } @@ -249,7 +244,6 @@ func (s *UDMAuthController) Edit(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { - neId = "" s.udmAuthService.Insert(neId, body) } c.JSON(200, result.OkData(data)) @@ -300,7 +294,6 @@ func (s *UDMAuthController) Remove(c *gin.Context) { } // 命令ok时 if strings.Contains(data, "ok") { - neId = "" s.udmAuthService.Delete(imsi, neId) } resultData[imsi] = data @@ -346,8 +339,7 @@ func (s *UDMAuthController) Removes(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { - neId = "" - go s.udmAuthService.LoadData(neId, imsi, num) + s.udmAuthService.LoadData(neId, imsi, num) } c.JSON(200, result.OkData(data)) } diff --git a/src/modules/network_data/controller/udm_sub.go b/src/modules/network_data/controller/udm_sub.go index cec49570..10718b2d 100644 --- a/src/modules/network_data/controller/udm_sub.go +++ b/src/modules/network_data/controller/udm_sub.go @@ -45,7 +45,6 @@ func (s *UDMSubController) ResetData(c *gin.Context) { return } - neId = "" data := s.udmSubService.ResetData(neId) c.JSON(200, result.OkData(data)) } @@ -55,7 +54,6 @@ func (s *UDMSubController) ResetData(c *gin.Context) { // GET /list func (s *UDMSubController) List(c *gin.Context) { querys := ctx.QueryMap(c) - querys["neId"] = "" data := s.udmSubService.SelectPage(querys) c.JSON(200, result.Ok(data)) } @@ -99,7 +97,6 @@ func (s *UDMSubController) Info(c *gin.Context) { return } - neId = "" // 解析返回的数据 u := s.udmSubService.ParseInfo(imsi, neId, data) s.udmSubService.Insert(neId, u) @@ -149,7 +146,6 @@ func (s *UDMSubController) Add(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { - neId = "" body.NeId = neId s.udmSubService.Insert(neId, body) } @@ -204,8 +200,7 @@ func (s *UDMSubController) Adds(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { - neId = "" - go s.udmSubService.LoadData(neId, body.IMSI, num, body.Remark) + s.udmSubService.LoadData(neId, body.IMSI, num, body.Remark) } c.JSON(200, result.OkData(data)) } @@ -253,7 +248,6 @@ func (s *UDMSubController) Edit(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { - neId = "" body.NeId = neId s.udmSubService.Insert(neId, body) } @@ -305,7 +299,6 @@ func (s *UDMSubController) Remove(c *gin.Context) { } // 命令ok时 if strings.Contains(data, "ok") { - neId = "" s.udmSubService.Delete(neId, imsi) } resultData[imsi] = data @@ -351,9 +344,7 @@ func (s *UDMSubController) Removes(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { - neId = "" - go s.udmSubService.LoadData(neId, imsi, num, "-(Deleted)-") - + s.udmSubService.LoadData(neId, imsi, num, "-(Deleted)-") } c.JSON(200, result.OkData(data)) } diff --git a/src/modules/network_data/repository/udm_auth.go b/src/modules/network_data/repository/udm_auth.go index 25f46684..b1429a4b 100644 --- a/src/modules/network_data/repository/udm_auth.go +++ b/src/modules/network_data/repository/udm_auth.go @@ -53,7 +53,8 @@ func (r *UDMAuthUser) convertResultRows(rows []map[string]any) []model.UDMAuthUs // ClearAndInsert 清空ne_id后新增实体 func (r *UDMAuthUser) ClearAndInsert(neId string, uArr []model.UDMAuthUser) int64 { // 不指定neID时,用 TRUNCATE 清空表快 - _, err := datasource.ExecDB("", "TRUNCATE TABLE u_auth_user", nil) + // _, err := datasource.ExecDB("", "TRUNCATE TABLE u_auth_user", nil) + _, err := datasource.ExecDB("", "DELETE FROM u_auth_user WHERE ne_id = ?", []any{neId}) if err != nil { logger.Errorf("TRUNCATE err => %v", err) } diff --git a/src/modules/network_data/repository/udm_sub.go b/src/modules/network_data/repository/udm_sub.go index 72e6ed26..d1025a33 100644 --- a/src/modules/network_data/repository/udm_sub.go +++ b/src/modules/network_data/repository/udm_sub.go @@ -82,9 +82,10 @@ func (r *UDMSubUser) convertResultRows(rows []map[string]any) []model.UDMSubUser } // ClearAndInsert 清空ne_id后新增实体 -func (r *UDMSubUser) ClearAndInsert(neID string, u []model.UDMSubUser) int64 { +func (r *UDMSubUser) ClearAndInsert(neId string, u []model.UDMSubUser) int64 { // 不指定neID时,用 TRUNCATE 清空表快 - _, err := datasource.ExecDB("", "TRUNCATE TABLE u_sub_user", nil) + // _, err := datasource.ExecDB("", "TRUNCATE TABLE u_sub_user", nil) + _, err := datasource.ExecDB("", "DELETE FROM u_sub_user WHERE ne_id = ?", []any{neId}) if err != nil { logger.Errorf("TRUNCATE err => %v", err) } diff --git a/src/modules/network_data/service/udm_auth.go b/src/modules/network_data/service/udm_auth.go index 7b11e62b..069c6730 100644 --- a/src/modules/network_data/service/udm_auth.go +++ b/src/modules/network_data/service/udm_auth.go @@ -8,6 +8,7 @@ import ( "be.ems/src/framework/redis" "be.ems/src/modules/network_data/model" "be.ems/src/modules/network_data/repository" + neService "be.ems/src/modules/network_element/service" ) // 实例化服务层 UDMAuthUser 结构体 @@ -25,12 +26,25 @@ type UDMAuthUser struct { func (r *UDMAuthUser) dataByRedis(imsi, neId string) []model.UDMAuthUser { arr := []model.UDMAuthUser{} key := fmt.Sprintf("ausf:%s", imsi) - ausfArr, err := redis.GetKeys("udmuser", key) + source := fmt.Sprintf("UDM_%s", neId) + + // 网元主机的Redis客户端 + redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId) + if err != nil { + return arr + } + defer func() { + redisClient.Close() + redis.ConnectPush(source, nil) + }() + redis.ConnectPush(source, redisClient.Client) + + ausfArr, err := redis.GetKeys(source, key) if err != nil { return arr } for _, key := range ausfArr { - m, err := redis.GetHash("udmuser", key) + m, err := redis.GetHash(source, key) if err != nil { continue } diff --git a/src/modules/network_data/service/udm_sub.go b/src/modules/network_data/service/udm_sub.go index 2f217cb2..ce97cf72 100644 --- a/src/modules/network_data/service/udm_sub.go +++ b/src/modules/network_data/service/udm_sub.go @@ -8,6 +8,7 @@ import ( "be.ems/src/framework/redis" "be.ems/src/modules/network_data/model" "be.ems/src/modules/network_data/repository" + neService "be.ems/src/modules/network_element/service" ) // 实例化服务层 UDMSubUser 结构体 @@ -18,22 +19,33 @@ var NewUDMSub = &UDMSubUser{ // UDM签约信息 服务层处理 type UDMSubUser struct { - // UDM签约信息数据信息 - udmSubRepository *repository.UDMSubUser - // UDM用户IMSI信息数据信息 - udmUserInfoRepository *repository.UDMUserInfo + udmSubRepository *repository.UDMSubUser // UDM签约信息数据信息 + udmUserInfoRepository *repository.UDMUserInfo // UDM用户IMSI信息数据信息 } // dataByRedis UDM签约用户 db:0 中 udm-sd:* func (r *UDMSubUser) dataByRedis(imsi, neId string) []model.UDMSubUser { arr := []model.UDMSubUser{} key := fmt.Sprintf("udm-sd:%s", imsi) - udmsdArr, err := redis.GetKeys("udmuser", key) + source := fmt.Sprintf("UDM_%s", neId) + + // 网元主机的Redis客户端 + redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId) + if err != nil { + return arr + } + defer func() { + redisClient.Close() + redis.ConnectPush(source, nil) + }() + redis.ConnectPush(source, redisClient.Client) + + udmsdArr, err := redis.GetKeys(source, key) if err != nil { return arr } for _, key := range udmsdArr { - m, err := redis.GetHash("udmuser", key) + m, err := redis.GetHash(source, key) if err != nil { continue } diff --git a/src/modules/network_element/service/ne_info.go b/src/modules/network_element/service/ne_info.go index 2c70a697..cdde10e1 100644 --- a/src/modules/network_element/service/ne_info.go +++ b/src/modules/network_element/service/ne_info.go @@ -27,8 +27,7 @@ var NewNeInfo = &NeInfo{ // 网元信息 服务层处理 type NeInfo struct { - // 网元信息数据信息 - neInfoRepository *repository.NeInfo + neInfoRepository *repository.NeInfo // 网元信息数据信息 Para5GData map[string]string } @@ -226,6 +225,7 @@ func (r *NeInfo) Insert(neInfo model.NeInfo) string { for _, host := range neInfo.Hosts { host.Title = fmt.Sprintf("%s_%s_%d", strings.ToUpper(neInfo.NeType), neInfo.NeId, host.Port) host.GroupID = "1" + host.CreateBy = neInfo.CreateBy hostId := NewNeHost.Insert(host) if hostId != "" { hostIDs = append(hostIDs, hostId) @@ -250,6 +250,7 @@ func (r *NeInfo) Update(neInfo model.NeInfo) int64 { if host.HostID != "" { host.Title = fmt.Sprintf("%s_%s_%d", strings.ToUpper(neInfo.NeType), neInfo.NeId, host.Port) host.GroupID = "1" + host.UpdateBy = neInfo.UpdateBy NewNeHost.Update(host) } } @@ -371,7 +372,7 @@ func (r *NeInfo) NeRunSSHCmd(neType, neId, cmd string) (string, error) { } // NeRunTelnetClient 网元主机的Telnet客户端-为创建相关连接,注意结束后 Close() -// num 是网元主机telnet 1:4100 2:5200 +// num 是网元主机telnet 1:4100 2:5200(UPF标准版) func (r *NeInfo) NeRunTelnetClient(neType, neId string, num int) (*telnet.ConnTelnet, error) { neInfo := r.SelectNeInfoByNeTypeAndNeID(neType, neId) if neInfo.NeId != neId { @@ -406,6 +407,42 @@ func (r *NeInfo) NeRunTelnetClient(neType, neId string, num int) (*telnet.ConnTe return telnetClient, nil } +// NeRunRedisClient 网元主机的Redis客户端-为创建相关连接,注意结束后 Close() +// 暂时只有UDM有Redis配置项 +func (r *NeInfo) NeRunRedisClient(neType, neId string) (*redis.ConnRedis, error) { + neInfo := r.SelectNeInfoByNeTypeAndNeID(neType, neId) + if neInfo.NeId != neId { + logger.Errorf("NeRunRedisClient NeType:%s NeID:%s not found", neType, neId) + return nil, fmt.Errorf("neinfo not found") + } + // 取主机信息 + if neInfo.HostIDs == "" { + logger.Errorf("NeRunRedisClient NeType:%s NeID:%s hostId not found", neType, neId) + return nil, fmt.Errorf("neinfo hostId not found") + } + hostIds := strings.Split(neInfo.HostIDs, ",") + if len(hostIds) <= 2 { + logger.Errorf("NeRunRedisClient hosts id %s not found", neInfo.HostIDs) + return nil, fmt.Errorf("neinfo host id not found") + } + hostId := hostIds[2] + neHost := NewNeHost.SelectById(hostId) + if neHost.HostID == "" || neHost.HostID != hostId { + logger.Errorf("NeRunRedisClient Hosts %s not found", neInfo.HostIDs) + return nil, fmt.Errorf("neinfo host not found") + } + + // 创建链接Redis客户端 + var connRedis redis.ConnRedis + neHost.CopyTo(&connRedis) + redisClient, err := connRedis.NewClient() + if err != nil { + logger.Errorf("NeRunRedisClient NewClient err => %s", err.Error()) + return nil, fmt.Errorf("neinfo redis client new err") + } + return redisClient, nil +} + // NeConfOAMReadSync 网元OAM配置文件读取 func (r *NeInfo) NeConfOAMReadSync(neType, neId string) (map[string]any, error) { oamData, err := r.neConfOAMRead(neType, neId, true)