feat: 网元配置主从Redis客户端连接,定时扫描同步状态发告警

This commit is contained in:
TsMask
2025-09-12 17:43:41 +08:00
parent ed4ea06e2e
commit 0aeec738ba
11 changed files with 35 additions and 24 deletions

View File

@@ -26,7 +26,7 @@ func (r *Service) dataByRedis(imsi, neId string) []VoLTEUser {
source := fmt.Sprintf("UDM_%s", neId)
// 网元主机的Redis客户端
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId)
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId, 2)
if err != nil {
return arr
}

View File

@@ -28,7 +28,7 @@ func (r *IMSUserService) dataByRedis(imsi, neId string) []model.IMSUser {
source := fmt.Sprintf("UDM_%s", neId)
// 网元主机的Redis客户端
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId)
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId, 2)
if err != nil {
return arr
}

View File

@@ -28,7 +28,7 @@ func (r *VoIPAuthService) dataByRedis(userName, neId string) []model.VoIPAuth {
source := fmt.Sprintf("UDM_%s", neId)
// 网元主机的Redis客户端
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId)
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId, 2)
if err != nil {
return arr
}

View File

@@ -66,19 +66,25 @@ func (s *NeAlarmStateCheckUDMDBProcessor) Execute(data any) (any, error) {
return nil, fmt.Errorf("json params err: %v", err)
}
neList := s.neInfoService.SelectList(neModel.NeInfo{NeType: "UDM"}, true, false)
neList := s.neInfoService.SelectList(neModel.NeInfo{NeType: "UDM"}, false, false)
for _, neInfo := range neList {
warnMsg := []string{}
// 检查状态
err := s.serverState(neInfo)
if err == nil {
if err := s.serverState(neInfo.NeId, 2); err != nil {
warnMsg = append(warnMsg, err.Error())
}
if err := s.serverState(neInfo.NeId, 3); err != nil {
warnMsg = append(warnMsg, err.Error())
}
if len(warnMsg) == 0 {
continue
}
// 附加信息
addInfo := params.AddInfo
if addInfo != "" {
addInfo = addInfo + ", " + err.Error()
addInfo = addInfo + ", " + strings.Join(warnMsg, ", ")
} else {
addInfo = err.Error()
addInfo = strings.Join(warnMsg, ", ")
}
neTypeAndId := fmt.Sprintf("%s_%s", neInfo.NeType, neInfo.NeId)
@@ -128,12 +134,12 @@ func (s *NeAlarmStateCheckUDMDBProcessor) Execute(data any) (any, error) {
}
// serverState 网元状态
func (s NeAlarmStateCheckUDMDBProcessor) serverState(neInfo neModel.NeInfo) error {
func (s NeAlarmStateCheckUDMDBProcessor) serverState(neId string, num int) error {
// 网元主机的Redis客户端
source := fmt.Sprintf("UDM_%s", neInfo.NeId)
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neInfo.NeId)
source := fmt.Sprintf("UDM_%s", neId)
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId, num)
if err != nil {
return err
return nil
}
defer func() {
redisClient.Close()

View File

@@ -256,7 +256,7 @@ func (r CDREventIMS) CDRMOSHour(rmUID string, timestamp int64) []map[string]any
"timeGroup": fmt.Sprintf("%d", hour),
"total": sums["total"],
"mosSum": sums["mosSum"],
"mosAvg": sums["mosAvg"] / sums["total"],
"mosAvg": float64(int(sums["mosSum"]/sums["total"]*100)) / 100,
})
}
return data
@@ -328,7 +328,7 @@ func (r CDREventIMS) CDRCCTHour(rmUID string, timestamp int64) []map[string]any
"timeGroup": fmt.Sprintf("%d", hour),
"total": sums["total"],
"cctSum": sums["cctSum"],
"cctAvg": sums["cctSum"] / sums["total"],
"cctAvg": float64(int(sums["cctSum"]/sums["total"]*100)) / 100,
})
}
return data

View File

@@ -31,7 +31,7 @@ func (r *UDMAuthUser) dataByRedis(imsi, neId string) []model.UDMAuthUser {
source := fmt.Sprintf("UDM_%s", neId)
// 网元主机的Redis客户端
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId)
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId, 2)
if err != nil {
return arr
}

View File

@@ -30,7 +30,7 @@ func (r *UDMSubUser) dataByRedis(imsi, neId string) []model.UDMSubUser {
source := fmt.Sprintf("UDM_%s", neId)
// 网元主机的Redis客户端
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId)
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId, 2)
if err != nil {
return arr
}

View File

@@ -29,7 +29,7 @@ func (r UDMVOIPUser) dataByRedis(username, neId string) []model.UDMVOIPUser {
source := fmt.Sprintf("UDM_%s", neId)
// 网元主机的Redis客户端
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId)
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId, 2)
if err != nil {
return arr
}

View File

@@ -29,7 +29,7 @@ func (r UDMVolteIMSUser) dataByRedis(imsi, neId string) []model.UDMVolteIMSUser
source := fmt.Sprintf("UDM_%s", neId)
// 网元主机的Redis客户端
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId)
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId, 2)
if err != nil {
return arr
}

View File

@@ -411,7 +411,7 @@ func (s *NeInfoController) Add(c *gin.Context) {
c.JSON(200, result.OkData(insertId))
return
}
c.JSON(200, result.Err(nil))
c.JSON(200, result.ErrMsg("please check the neType and neId"))
}
// 网元信息修改

View File

@@ -271,9 +271,9 @@ func (r *NeInfo) SelectById(infoId string, bandHost bool) model.NeInfo {
func (r *NeInfo) Insert(neInfo model.NeInfo) string {
// 主机信息新增
if neInfo.Hosts != nil {
uuid := generate.Code(4)
var hostIDs []string
for _, host := range neInfo.Hosts {
uuid := generate.Code(4)
host.Title = fmt.Sprintf("%s_%d_%s", neInfo.NeName, host.Port, uuid)
host.GroupID = "1"
host.CreateBy = neInfo.CreateBy
@@ -297,9 +297,9 @@ func (r *NeInfo) Insert(neInfo model.NeInfo) string {
func (r *NeInfo) Update(neInfo model.NeInfo) int64 {
// 主机信息更新
if neInfo.Hosts != nil {
uuid := generate.Code(4)
for _, host := range neInfo.Hosts {
if host.HostID != "" {
uuid := generate.Code(4)
host.Title = fmt.Sprintf("%s_%d_%s", neInfo.NeName, host.Port, uuid)
host.GroupID = "1"
host.UpdateBy = neInfo.UpdateBy
@@ -461,7 +461,8 @@ func (r *NeInfo) NeRunTelnetClient(neType, neId string, num int) (*telnet.ConnTe
// NeRunRedisClient 网元主机的Redis客户端-为创建相关连接,注意结束后 Close()
// 暂时只有UDM有Redis配置项
func (r *NeInfo) NeRunRedisClient(neType, neId string) (*redis.ConnRedis, error) {
// num 是redis 2master 3slave
func (r *NeInfo) NeRunRedisClient(neType, neId string, num int) (*redis.ConnRedis, error) {
neInfo := r.SelectNeInfoByNeTypeAndNeID(neType, neId)
if neInfo.NeId != neId {
logger.Errorf("NeRunRedisClient NeType:%s NeID:%s not found", neType, neId)
@@ -474,10 +475,14 @@ func (r *NeInfo) NeRunRedisClient(neType, neId string) (*redis.ConnRedis, error)
}
hostIds := strings.Split(neInfo.HostIDs, ",")
if len(hostIds) <= 2 {
logger.Errorf("NeRunRedisClient hosts id %s not found", neInfo.HostIDs)
logger.Errorf("NeRunRedisClient hosts id %s not found %d", neInfo.HostIDs, num)
return nil, fmt.Errorf("neinfo host id not found")
}
hostId := hostIds[2]
if len(hostIds) == 3 && num == 3 {
logger.Errorf("NeRunRedisClient hosts id %s not found %d", neInfo.HostIDs, num)
return nil, fmt.Errorf("neinfo host id not found")
}
hostId := hostIds[num]
neHost := NewNeHost.SelectById(hostId)
if neHost.HostID == "" || neHost.HostID != hostId {
logger.Errorf("NeRunRedisClient Hosts %s not found", neInfo.HostIDs)