From 7661b11f5e60ff03b691a9d2f17bf41c74857a04 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 2 Sep 2025 17:22:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B0=83=E5=BA=A6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=91=8A=E8=AD=A6-UDM=20DB=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_dict_data1_i18n_zh.sql | 2 + database/install/sys_dict_data2_i18n_en.sql | 2 + database/install/sys_job.sql | 1 + .../upgrade/upg_sys_dict_data1_i18n_zh.sql | 2 + .../upgrade/upg_sys_dict_data2_i18n_en.sql | 2 + database/upgrade/upg_sys_job.sql | 1 + src/framework/constants/alarm.go | 2 + .../ne_alarm_state_check_udmdb_sync.go | 248 ++++++++++++++++++ src/modules/crontask/processor/processor.go | 3 + 9 files changed, 263 insertions(+) create mode 100644 src/modules/crontask/processor/ne_alarm_state_check_udmdb_sync/ne_alarm_state_check_udmdb_sync.go diff --git a/database/install/sys_dict_data1_i18n_zh.sql b/database/install/sys_dict_data1_i18n_zh.sql index 372cc527..84dc3eca 100644 --- a/database/install/sys_dict_data1_i18n_zh.sql +++ b/database/install/sys_dict_data1_i18n_zh.sql @@ -765,6 +765,8 @@ INSERT INTO `sys_dict_data` VALUES (2254, 2254, "job.delete_alarm_record", "删 INSERT INTO `sys_dict_data` VALUES (2255, 2255, "job.delete_alarm_record_remark", "storeDays:表示保留最近天数的数据记录", 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2256, 2256, "job.delete_ne_config_backup", "删除-过期配置文件备份", 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2257, 2257, "job.delete_ne_config_backup_remark", "storeDays:表示保留最近天数的数据记录\r\nstoreNum:保留数量,默认保留7个", 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2258, 2258, 'job.ne_alarm_state_check_udmdb_sync', '网元告警-UDM DB同步状态检查', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2259, 2259, 'job.ne_alarm_state_check_udmdb_sync_remark', '检查网元UDM的DB是否同步状态是否正常,在出现过关闭时发出警报。非master模式下有效', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); -- multi-tenancy INSERT INTO `sys_dict_data` VALUES (11000, 11000, 'menu.security.tenant', '租户管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); diff --git a/database/install/sys_dict_data2_i18n_en.sql b/database/install/sys_dict_data2_i18n_en.sql index a767411b..62bed5c2 100644 --- a/database/install/sys_dict_data2_i18n_en.sql +++ b/database/install/sys_dict_data2_i18n_en.sql @@ -765,6 +765,8 @@ INSERT INTO `sys_dict_data` VALUES (4254, 4254, "job.delete_alarm_record", "Dele INSERT INTO `sys_dict_data` VALUES (4255, 4255, "job.delete_alarm_record_remark", "storeDays: indicates that the most recent days of data records are kept.", 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4256, 4256, "job.delete_ne_config_backup", "Delete-Expired Configuration File Backups", 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4257, 4257, "job.delete_ne_config_backup_remark", "storeDays: indicates that the most recent days of data records are kept.\r\nstoreNum: the number of reservations, the default reservation is 7.", 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4258, 4258, 'job.ne_alarm_state_check_udmdb_sync', 'NE Alarm-UDM DB Sync Check', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4259, 4259, 'job.ne_alarm_state_check_udmdb_sync_remark', 'Check whether the UDM network element is database is in a normal synchronized state and issue an alert if it has been shut down. Effective in non-master mode.', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); -- 多租户 INSERT INTO `sys_dict_data` VALUES (14000, 14000, 'menu.security.tenant', 'Tenant Management', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); diff --git a/database/install/sys_job.sql b/database/install/sys_job.sql index 0154be22..cec981b4 100644 --- a/database/install/sys_job.sql +++ b/database/install/sys_job.sql @@ -56,6 +56,7 @@ INSERT INTO `sys_job` VALUES (14, 'job.delete_uenb_record', 'SYSTEM', 'delete_ue INSERT INTO `sys_job` VALUES (20, 'job.ne_alarm_state_check', 'SYSTEM', 'ne_alarm_state_check', '{\"alarmTitle\":\"NE State Check Alarm\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\":\"Major\",\"specificProblem\":\"alarm cause: the system state of target NE has not been received\",\"specificProblemId\":\"AC10000\",\"addInfo\":\"\"}', '0/30 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_remark'); INSERT INTO `sys_job` VALUES (21, 'job.ne_alarm_state_check_cmd', 'SYSTEM', 'ne_alarm_state_check_cmd', '{\"alarmTitle\":\"NE State Check Alarm CPU/Menory/Disk\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\":\"Major\",\"specificProblem\":\"Alarm Cause: CPU/Menory/Disk status received from target NE reaches the threshold\",\"specificProblemId\":\"AC10100\",\"addInfo\":\"\",\"cpuUseGt\":70,\"memUseGt\":70,\"diskUseGt\":70}', '0/15 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_cmd_remark'); INSERT INTO `sys_job` VALUES (22, 'job.ne_alarm_state_check_license', 'SYSTEM', 'ne_alarm_state_check_license', '{\"alarmTitle\":\"NE State Check Alarm License\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\":\"Major\",\"specificProblem\":\"Alarm Cause: License received from target NE is about to expire\",\"specificProblemId\":\"AC10200\",\"addInfo\":\"\",\"dayLt\":7}', '0 5 0 * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_license_remark'); +INSERT INTO `sys_job` VALUES (23, 'job.ne_alarm_state_check_udmdb_sync', 'SYSTEM', 'ne_alarm_state_check_udmdb_sync', '{\"alarmTitle\":\"NE State Check Alarm UDM DB Sync\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\":\"Major\",\"specificProblem\":\"Alarm Cause: UDM DB Sync Failed\",\"specificProblemId\":\"AC10300\",\"addInfo\":\"\"}', '0 0/15 * * * ?', '3', '0', '0', '0', 'system', 1698478134839, 'admin', 1756804687256, 'job.ne_alarm_state_check_udmdb_sync_remark'); INSERT INTO `sys_job` VALUES (30, 'job.backup_remove_file', 'SYSTEM', 'backup_remove_file', '[{\"backupPath\":\"/u_auth_user\",\"storeDays\":30},{\"backupPath\":\"/u_sub_user\",\"storeDays\":30},{\"backupPath\":\"/u_voip_auth\",\"storeDays\":30},{\"backupPath\":\"/u_ims_user\",\"storeDays\":30},{\"backupPath\":\"/ims_cdr\",\"storeDays\":30},{\"backupPath\":\"/smsc_cdr\",\"storeDays\":30},{\"backupPath\":\"/smf_cdr\",\"storeDays\":30},{\"backupPath\":\"/sgwc_cdr\",\"storeDays\":30},{\"backupPath\":\"/operate_log\",\"storeDays\":30,\"storeNum\":7},{\"backupPath\":\"/log/login_log\",\"storeDays\":30,\"storeNum\":7}]', '0 10 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.backup_remove_file_remark'); INSERT INTO `sys_job` VALUES (31, 'job.backup_export_udm', 'SYSTEM', 'backup_export_udm', '{\"dataType\":[\"auth\",\"sub\",\"voip\",\"volte\"],\"fileType\":\"txt\"}', '0 35 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'supervisor', 1745481169354, 'job.backup_export_udm_remark'); diff --git a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql index 61a14e02..864d91f8 100644 --- a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql @@ -772,6 +772,8 @@ REPLACE INTO `sys_dict_data` VALUES (2254, 2254, "job.delete_alarm_record", "删 REPLACE INTO `sys_dict_data` VALUES (2255, 2255, "job.delete_alarm_record_remark", "storeDays:表示保留最近天数的数据记录", 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2256, 2256, "job.delete_ne_config_backup", "删除-过期配置文件备份", 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2257, 2257, "job.delete_ne_config_backup_remark", "storeDays:表示保留最近天数的数据记录\r\nstoreNum:保留数量,默认保留7个", 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2258, 2258, 'job.ne_alarm_state_check_udmdb_sync', '网元告警-UDM DB同步状态检查', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2259, 2259, 'job.ne_alarm_state_check_udmdb_sync_remark', '检查网元UDM的DB是否同步状态是否正常,在出现过关闭时发出警报。非master模式下有效', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); -- multi-tenancy REPLACE INTO `sys_dict_data` VALUES (11000, 11000, 'menu.security.tenant', '租户管理', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); diff --git a/database/upgrade/upg_sys_dict_data2_i18n_en.sql b/database/upgrade/upg_sys_dict_data2_i18n_en.sql index e6f901e6..66787b64 100644 --- a/database/upgrade/upg_sys_dict_data2_i18n_en.sql +++ b/database/upgrade/upg_sys_dict_data2_i18n_en.sql @@ -773,6 +773,8 @@ REPLACE INTO `sys_dict_data` VALUES (4254, 4254, "job.delete_alarm_record", "Del REPLACE INTO `sys_dict_data` VALUES (4255, 4255, "job.delete_alarm_record_remark", "storeDays: indicates that the most recent days of data records are kept.", 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4256, 4256, "job.delete_ne_config_backup", "Delete-Expired Configuration File Backups", 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4257, 4257, "job.delete_ne_config_backup_remark", "storeDays: indicates that the most recent days of data records are kept.\r\nstoreNum: the number of reservations, the default reservation is 7.", 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4258, 4258, 'job.ne_alarm_state_check_udmdb_sync', 'NE Alarm-UDM DB Sync Check', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4259, 4259, 'job.ne_alarm_state_check_udmdb_sync_remark', 'Check whether the UDM network element is database is in a normal synchronized state and issue an alert if it has been shut down. Effective in non-master mode.', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); -- 多租户 REPLACE INTO `sys_dict_data` VALUES (14000, 14000, 'menu.security.tenant', 'Tenant Management', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); diff --git a/database/upgrade/upg_sys_job.sql b/database/upgrade/upg_sys_job.sql index dc391a0d..25233b3e 100644 --- a/database/upgrade/upg_sys_job.sql +++ b/database/upgrade/upg_sys_job.sql @@ -60,6 +60,7 @@ REPLACE INTO `sys_job` VALUES (14, 'job.delete_uenb_record', 'SYSTEM', 'delete_u REPLACE INTO `sys_job` VALUES (20, 'job.ne_alarm_state_check', 'SYSTEM', 'ne_alarm_state_check', '{\"alarmTitle\":\"NE State Check Alarm\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\":\"Major\",\"specificProblem\":\"alarm cause: the system state of target NE has not been received\",\"specificProblemId\":\"AC10000\",\"addInfo\":\"\"}', '0/30 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_remark'); REPLACE INTO `sys_job` VALUES (21, 'job.ne_alarm_state_check_cmd', 'SYSTEM', 'ne_alarm_state_check_cmd', '{\"alarmTitle\":\"NE State Check Alarm CPU/Menory/Disk\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\":\"Major\",\"specificProblem\":\"Alarm Cause: CPU/Menory/Disk status received from target NE reaches the threshold\",\"specificProblemId\":\"AC10100\",\"addInfo\":\"\",\"cpuUseGt\":70,\"memUseGt\":70,\"diskUseGt\":70}', '0/15 * * * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_cmd_remark'); REPLACE INTO `sys_job` VALUES (22, 'job.ne_alarm_state_check_license', 'SYSTEM', 'ne_alarm_state_check_license', '{\"alarmTitle\":\"NE State Check Alarm License\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\":\"Major\",\"specificProblem\":\"Alarm Cause: License received from target NE is about to expire\",\"specificProblemId\":\"AC10200\",\"addInfo\":\"\",\"dayLt\":7}', '0 5 0 * * ?', '3', '0', '1', '0', 'system', 1698478134839, 'system', 1698478134839, 'job.ne_alarm_state_check_license_remark'); +REPLACE INTO `sys_job` VALUES (23, 'job.ne_alarm_state_check_udmdb_sync', 'SYSTEM', 'ne_alarm_state_check_udmdb_sync', '{\"alarmTitle\":\"NE State Check Alarm UDM DB Sync\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\":\"Major\",\"specificProblem\":\"Alarm Cause: UDM DB Sync Failed\",\"specificProblemId\":\"AC10300\",\"addInfo\":\"\"}', '0 0/15 * * * ?', '3', '0', '0', '0', 'system', 1698478134839, 'admin', 1756804687256, 'job.ne_alarm_state_check_udmdb_sync_remark'); REPLACE INTO `sys_job` VALUES (30, 'job.backup_remove_file', 'SYSTEM', 'backup_remove_file', '[{\"backupPath\":\"/u_auth_user\",\"storeDays\":30},{\"backupPath\":\"/u_sub_user\",\"storeDays\":30},{\"backupPath\":\"/u_voip_auth\",\"storeDays\":30},{\"backupPath\":\"/u_ims_user\",\"storeDays\":30},{\"backupPath\":\"/ims_cdr\",\"storeDays\":30},{\"backupPath\":\"/smsc_cdr\",\"storeDays\":30},{\"backupPath\":\"/smf_cdr\",\"storeDays\":30},{\"backupPath\":\"/sgwc_cdr\",\"storeDays\":30},{\"backupPath\":\"/operate_log\",\"storeDays\":30,\"storeNum\":7},{\"backupPath\":\"/log/login_log\",\"storeDays\":30,\"storeNum\":7}]', '0 10 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, 'job.backup_remove_file_remark'); REPLACE INTO `sys_job` VALUES (31, 'job.backup_export_udm', 'SYSTEM', 'backup_export_udm', '{\"dataType\":[\"auth\",\"sub\",\"voip\",\"volte\"],\"fileType\":\"txt\"}', '0 35 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'supervisor', 1745481169354, 'job.backup_export_udm_remark'); diff --git a/src/framework/constants/alarm.go b/src/framework/constants/alarm.go index f22c8e2d..c3ce9dd2 100644 --- a/src/framework/constants/alarm.go +++ b/src/framework/constants/alarm.go @@ -10,4 +10,6 @@ const ( ALARM_CMD_CHECK = 10001 // ALARM_LICENSE_CHECK 告警-网元License到期检查 ALARM_LICENSE_CHECK = 10002 + // ALARM_UDM_DB_SYNC 告警-UDM DB同步检查 + ALARM_UDM_DB_SYNC = 10003 ) diff --git a/src/modules/crontask/processor/ne_alarm_state_check_udmdb_sync/ne_alarm_state_check_udmdb_sync.go b/src/modules/crontask/processor/ne_alarm_state_check_udmdb_sync/ne_alarm_state_check_udmdb_sync.go new file mode 100644 index 00000000..99a0aee9 --- /dev/null +++ b/src/modules/crontask/processor/ne_alarm_state_check_udmdb_sync/ne_alarm_state_check_udmdb_sync.go @@ -0,0 +1,248 @@ +package ne_alarm_state_check_udmdb_sync + +import ( + "context" + "encoding/json" + "fmt" + "strings" + "time" + + "be.ems/src/framework/constants" + "be.ems/src/framework/cron" + "be.ems/src/framework/database/redis" + "be.ems/src/framework/logger" + + neDataModel "be.ems/src/modules/network_data/model" + neDataService "be.ems/src/modules/network_data/service" + neModel "be.ems/src/modules/network_element/model" + neService "be.ems/src/modules/network_element/service" + wsService "be.ems/src/modules/ws/service" +) + +var NewProcessor = &NeAlarmStateCheckUDMDBProcessor{ + neConfigBackupService: neService.NewNeConfigBackup, + neInfoService: neService.NewNeInfo, + alarmService: neDataService.NewAlarm, + wsSendService: wsService.NewWSSend, + count: 0, +} + +// NeAlarmStateCheckUDMDBProcessor 告警-UDM DB同步检查 +type NeAlarmStateCheckUDMDBProcessor struct { + neConfigBackupService *neService.NeConfigBackup // 网元配置文件备份记录服务 + neInfoService *neService.NeInfo // 网元信息服务 + alarmService *neDataService.Alarm // 告警信息服务 + wsSendService *wsService.WSSend // ws发送服务 + count int // 执行次数 +} + +// alarmParams 告警参数 +type alarmParams struct { + AlarmTitle string `json:"alarmTitle"` // NE State Check Alarm UDM DB Sync + AlarmType string `json:"alarmType"` // EquipmentAlarm=2 + OrigSeverity string `json:"origSeverity"` // Major=2 + SpecificProblem string `json:"specificProblem"` // Alarm Cause: UDM DB Sync Failed + SpecificProblemID string `json:"specificProblemId"` // AC10300 + AddInfo string `json:"addInfo"` // 告警补充信息 + + // === 非参数字段 === + AlarmId string // 告警ID +} + +func (s *NeAlarmStateCheckUDMDBProcessor) Execute(data any) (any, error) { + s.count++ // 执行次数加一 + options := data.(cron.JobData) + sysJob := options.SysJob + logger.Infof("重复:%v 任务ID:%s 执行次数:%d", options.Repeat, sysJob.JobID, s.count) + // 返回结果,用于记录执行结果 + result := map[string]any{ + "count": s.count, + } + + // 读取参数值 + var params alarmParams + err := json.Unmarshal([]byte(sysJob.TargetParams), ¶ms) + if err != nil { + return nil, fmt.Errorf("json params err: %v", err) + } + + neList := s.neInfoService.SelectList(neModel.NeInfo{NeType: "UDM"}, true, false) + for _, neInfo := range neList { + // 检查状态 + err := s.serverState(neInfo) + if err == nil { + continue + } + if params.AddInfo != "" { + params.AddInfo = params.AddInfo + ", " + err.Error() + } else { + params.AddInfo = err.Error() + } + + neTypeAndId := fmt.Sprintf("%s_%s", neInfo.NeType, neInfo.NeId) + // 告警ID + params.AlarmId = fmt.Sprintf("%d%d", constants.ALARM_UDM_DB_SYNC, neInfo.CreateTime) + // 检查网元告警ID是否唯一 + alarmIdArr := s.alarmService.Find(neDataModel.Alarm{ + NeType: neInfo.NeType, + NeId: neInfo.RmUID, + AlarmId: params.AlarmId, + }) + // 告警状态, 存在的需要手动清除 + alarmStatus := "" + if len(alarmIdArr) > 0 { + alarmStatus = fmt.Sprint(alarmIdArr[0].AlarmStatus) + } + // 活动告警进行清除 + if alarmStatus == "1" { + clearAlarm, err := s.alarmClear(neInfo, alarmIdArr[0]) + if err != nil { + result[neTypeAndId] = err.Error() + continue + } + groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM, neInfo.NeType, neInfo.NeId) + s.wsSendService.ByGroupID(groupID, clearAlarm) + result[neTypeAndId] = "alarm clear" + alarmStatus = "" // 标记为未记录再次发起新告警 + } + // 未记录 + if alarmStatus == "" { + addInfo := params.AddInfo + if params.AddInfo != "" { + params.AddInfo = params.AddInfo + ", " + err.Error() + } else { + params.AddInfo = err.Error() + } + // 进行新增 + newAlarm, err := s.alarmNew(neInfo, params) + params.AddInfo = addInfo // 恢复附加信息 + if err != nil { + result[neTypeAndId] = err.Error() + continue + } + groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM, neInfo.NeType, neInfo.NeId) + s.wsSendService.ByGroupID(groupID, newAlarm) + result[neTypeAndId] = "alarm new" + } + } + + // 返回结果,用于记录执行结果 + return result, nil +} + +// serverState 网元状态 +func (s NeAlarmStateCheckUDMDBProcessor) serverState(neInfo neModel.NeInfo) error { + // 网元主机的Redis客户端 + source := fmt.Sprintf("UDM_%s", neInfo.NeId) + redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neInfo.NeId) + if err != nil { + return err + } + defer func() { + redisClient.Close() + redis.ConnectPush(source, nil) + }() + redis.ConnectPush(source, redisClient.Client) + + // 数据源 + rdb := redis.RDB(source) + if rdb == nil { + return fmt.Errorf("redis not client") + } + + ctx := context.Background() + replication, err := rdb.Info(ctx, "replication").Result() + if err != nil { + logger.Errorf("redis info replication err:%s", err.Error()) + return fmt.Errorf("redis info replication err") + } + + master_host := "master_host:" + master_port := "master_port:" + lines := strings.SplitSeq(replication, "\r\n") + for line := range lines { + if line == "role:master" { + return nil + } + // "role:active-replica" + if line == "master_link_status:up" { + return nil + } + + if strings.HasPrefix(line, master_host) { + arr := strings.Split(line, ":") + if len(arr) == 2 { + master_host = arr[1] + } + continue + } + if strings.HasPrefix(line, master_port) { + arr := strings.Split(line, ":") + if len(arr) == 2 { + master_port = arr[1] + } + continue + } + } + + return fmt.Errorf("host:%s, port:%s, status down", master_host, master_port) +} + +// alarmClear 清除告警 +func (s NeAlarmStateCheckUDMDBProcessor) alarmClear(neInfo neModel.NeInfo, v neDataModel.Alarm) (neDataModel.Alarm, error) { + // 变更告警ID为告警清除ID + v.AlarmId = fmt.Sprintf("%s%d", v.AlarmCode, v.EventTime.UnixMilli()) + v.AlarmStatus = "0" + // 告警清除 + clearTime := time.UnixMilli(neInfo.UpdateTime) + v.ClearType = "1" + v.ClearTime = &clearTime + v.ClearUser = "system" + rows := s.alarmService.Update(v) + if rows > 0 { + return v, nil + } + return neDataModel.Alarm{}, fmt.Errorf("clear alarm fail") +} + +// alarmNew 新增告警 +func (s NeAlarmStateCheckUDMDBProcessor) alarmNew(neInfo neModel.NeInfo, v alarmParams) (neDataModel.Alarm, error) { + // seq 告警序号 + lastSeq := s.alarmService.FindAlarmSeqLast(neInfo.NeType, neInfo.RmUID) + lastTime := neInfo.UpdateTime // 网元最后更新时间 + if lastTime < neInfo.CreateTime { + lastTime = time.Now().UnixMilli() + } + alarm := neDataModel.Alarm{ + NeType: neInfo.NeType, + NeId: neInfo.RmUID, // neInfo.NeId, + NeName: neInfo.NeName, + Province: neInfo.Province, + PvFlag: neInfo.PvFlag, + AlarmSeq: fmt.Sprint(lastSeq + 1), + AlarmId: v.AlarmId, + AlarmTitle: v.AlarmTitle, + AlarmCode: fmt.Sprint(constants.ALARM_LICENSE_CHECK), + EventTime: time.UnixMilli(lastTime), + AlarmType: v.AlarmType, + OrigSeverity: v.OrigSeverity, + PerceivedSeverity: v.OrigSeverity, + ObjectUid: neInfo.RmUID, + ObjectName: "UDM DB Sync", + ObjectType: "db_sync", + LocationInfo: "UDM DB Sync Cheack", + AlarmStatus: "1", // 活动告警 + SpecificProblem: v.SpecificProblem, + SpecificProblemId: v.SpecificProblemID, + AddInfo: v.AddInfo, + Counter: "0", + AckState: "0", + ClearType: "0", + } + insertId := s.alarmService.InsertAndForword(alarm) + if insertId != "" { + alarm.ID = insertId + return alarm, nil + } + return neDataModel.Alarm{}, fmt.Errorf("new alarm fail") +} diff --git a/src/modules/crontask/processor/processor.go b/src/modules/crontask/processor/processor.go index 3c1ca76e..188af2e1 100644 --- a/src/modules/crontask/processor/processor.go +++ b/src/modules/crontask/processor/processor.go @@ -22,6 +22,7 @@ import ( processorNeAlarmStateCheck "be.ems/src/modules/crontask/processor/ne_alarm_state_check" processorNeAlarmStateCheckCMD "be.ems/src/modules/crontask/processor/ne_alarm_state_check_cmd" processorNeAlarmStateCheckLicense "be.ems/src/modules/crontask/processor/ne_alarm_state_check_license" + processorNeAlarmStateCheckUDMDB "be.ems/src/modules/crontask/processor/ne_alarm_state_check_udmdb_sync" processorNeConfigBackup "be.ems/src/modules/crontask/processor/ne_config_backup" processorNeDataUDM "be.ems/src/modules/crontask/processor/ne_data_udm" "be.ems/src/modules/crontask/processor/removeFile" @@ -62,6 +63,8 @@ func InitCronQueue() { cron.CreateQueue("ne_alarm_state_check_cmd", processorNeAlarmStateCheckCMD.NewProcessor) // 网元告警-License到期检查 cron.CreateQueue("ne_alarm_state_check_license", processorNeAlarmStateCheckLicense.NewProcessor) + // 网元告警-UDMDB同步检查 + cron.CreateQueue("ne_alarm_state_check_udmdb_sync", processorNeAlarmStateCheckUDMDB.NewProcessor) // 备份-删除备份目录下文件 cron.CreateQueue("backup_remove_file", processorBackupRemoveFile.NewProcessor)