From 24e684856ed03bc84377bd759ef1c4ea00029976 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 9 May 2025 18:37:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A1=A5=E5=85=85=E5=91=8A=E8=AD=A6?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=96=B0=E5=A2=9E/=E7=A1=AE=E8=AE=A4/?= =?UTF-8?q?=E6=B8=85=E9=99=A4=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_config.sql | 1 + database/upgrade/upg_sys_config.sql | 1 + src/framework/constants/alarm.go | 8 +- .../network_data/repository/all_alarm.go | 86 +++++++++++++++++- src/modules/network_data/service/all_alarm.go | 88 +++++++++++++++++++ src/modules/ws/service/ws_send.go | 4 +- 6 files changed, 184 insertions(+), 4 deletions(-) diff --git a/database/install/sys_config.sql b/database/install/sys_config.sql index b0d42f39..4049e75c 100644 --- a/database/install/sys_config.sql +++ b/database/install/sys_config.sql @@ -43,6 +43,7 @@ INSERT INTO `sys_config` VALUES (109, 'config.sys.i18nDefault', 'sys.i18n.defaul INSERT INTO `sys_config` VALUES (110, 'config.sys.lockTime', 'sys.lockTime', '0', 'Y', 'supervisor', 1704960008300, 'admin', 1706838764703, 'config.sys.lockTimeRemark'); INSERT INTO `sys_config` VALUES (111, 'config.sys.homePage', 'sys.homePage', 'dashboard/overview/index', 'Y', 'supervisor', 1704960008300, 'admin', 1706838764703, 'config.sys.homePageRemark'); INSERT INTO `sys_config` VALUES (112, 'config.sys.exportTable', 'sys.exportTable', 'B1n9hW6Z2S2wZw4MVPAX6Q4wCuyWKdMk+qH1ZKqpLJxwvq2FBRgAT6WWw+j6O+ExHIJhpJ3XCpMBoiNN/RkW6EPurmqM82gnXWUIf/s6gk7OWrhdvQDD2jjNVBkLCmPLEH3ZLdgnQOZOePA7WyUdXA==', 'Y', 'supervisor', 1737355823940, 'supervisor', 1737363302083, 'config.sys.exportTableRemark'); +INSERT INTO `sys_config` VALUES (113, 'config.neData.backupDataFTP', 'neData.backupDataFTP', 'VXEECeDMoYhX29pqsb753ecJOnPfxB6XrEa9QdUrRqwKI7EmJei5HlvehvL+wL0Osjo3Y2Qs7ADA6eL3SrisiVXAVVXv38KMhvcSU9eaAzl/jrY4ahsq6a/eSbzxFDgE21US7/YnsyDRG7eGAc7W5Q==', 'Y', 'system', 1704960008300, 'system', 1704960008300, 'config.neData.backupDataFTPRemark'); UNLOCK TABLES; diff --git a/database/upgrade/upg_sys_config.sql b/database/upgrade/upg_sys_config.sql index 77e5a005..5e77b299 100644 --- a/database/upgrade/upg_sys_config.sql +++ b/database/upgrade/upg_sys_config.sql @@ -38,5 +38,6 @@ INSERT IGNORE INTO `sys_config` VALUES (109, 'config.sys.i18nDefault', 'sys.i18n INSERT IGNORE INTO `sys_config` VALUES (110, 'config.sys.lockTime', 'sys.lockTime', '0', 'Y', 'supervisor', 1704960008300, 'admin', 1706838764703, 'config.sys.lockTimeRemark'); INSERT IGNORE INTO `sys_config` VALUES (111, 'config.sys.homePage', 'sys.homePage', 'dashboard/overview/index', 'Y', 'supervisor', 1704960008300, 'admin', 1706838764703, 'config.sys.homePageRemark'); INSERT IGNORE INTO `sys_config` VALUES (112, 'config.sys.exportTable', 'sys.exportTable', 'B1n9hW6Z2S2wZw4MVPAX6Q4wCuyWKdMk+qH1ZKqpLJxwvq2FBRgAT6WWw+j6O+ExHIJhpJ3XCpMBoiNN/RkW6EPurmqM82gnXWUIf/s6gk7OWrhdvQDD2jjNVBkLCmPLEH3ZLdgnQOZOePA7WyUdXA==', 'Y', 'supervisor', 1737355823940, 'supervisor', 1737363302083, 'config.sys.exportTableRemark'); +INSERT IGNORE INTO `sys_config` VALUES (113, 'config.neData.backupDataFTP', 'neData.backupDataFTP', 'VXEECeDMoYhX29pqsb753ecJOnPfxB6XrEa9QdUrRqwKI7EmJei5HlvehvL+wL0Osjo3Y2Qs7ADA6eL3SrisiVXAVVXv38KMhvcSU9eaAzl/jrY4ahsq6a/eSbzxFDgE21US7/YnsyDRG7eGAc7W5Q==', 'Y', 'system', 1704960008300, 'system', 1704960008300, 'config.neData.backupDataFTPRemark'); SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/src/framework/constants/alarm.go b/src/framework/constants/alarm.go index e07f5067..f22c8e2d 100644 --- a/src/framework/constants/alarm.go +++ b/src/framework/constants/alarm.go @@ -2,8 +2,12 @@ package constants // 告警 alarmCode 常量 const ( - // ALARM_STATE_CHECK 告警-状态检查 - ALARM_STATE_CHECK = 10000 // ALARM_EVENT_REBOOT 事件-网元重启 ALARM_EVENT_REBOOT = 9000 + // ALARM_STATE_CHECK 告警-状态检查 + ALARM_STATE_CHECK = 10000 + // ALARM_RAM_CPU_CHECK 告警-内存/CPU/磁盘检查 + ALARM_CMD_CHECK = 10001 + // ALARM_LICENSE_CHECK 告警-网元License到期检查 + ALARM_LICENSE_CHECK = 10002 ) diff --git a/src/modules/network_data/repository/all_alarm.go b/src/modules/network_data/repository/all_alarm.go index 754c0cb0..ff9a99d6 100644 --- a/src/modules/network_data/repository/all_alarm.go +++ b/src/modules/network_data/repository/all_alarm.go @@ -2,6 +2,7 @@ package repository import ( "strings" + "time" "be.ems/src/framework/datasource" "be.ems/src/framework/logger" @@ -72,6 +73,45 @@ func (r Alarm) SelectByPage(querys model.AlarmQuery) ([]model.Alarm, int64) { return rows, total } +// Select 查询集合 +func (r Alarm) Select(param model.Alarm) []model.Alarm { + tx := datasource.DB("").Model(&model.Alarm{}) + // 查询条件拼接 + if param.NeType != "" { + tx = tx.Where("ne_type = ?", param.NeType) + } + if param.NeId != "" { + tx = tx.Where("ne_id = ?", param.NeId) + } + if param.NeName != "" { + tx = tx.Where("ne_name = ?", param.NeName) + } + if param.AlarmCode != "" { + tx = tx.Where("alarm_code = ?", param.AlarmCode) + } + if param.AlarmType != "" { + tx = tx.Where("alarm_type = ?", param.AlarmType) + } + if param.AlarmId != "" { + tx = tx.Where("alarm_id = ?", param.AlarmId) + } + if param.OrigSeverity != "" { + eventTypes := strings.Split(param.OrigSeverity, ",") + tx = tx.Where("orig_severity in (%s)", eventTypes) + } + if param.PvFlag != "" { + tx = tx.Where("pv_flag = ?", param.PvFlag) + } + + // 查询数据 + rows := []model.Alarm{} + if err := tx.Find(&rows).Error; err != nil { + logger.Errorf("query find err => %v", err.Error()) + return rows + } + return rows +} + // SelectByIds 通过ID查询 func (r *Alarm) SelectByIds(ids []string) []model.Alarm { rows := []model.Alarm{} @@ -89,8 +129,38 @@ func (r *Alarm) SelectByIds(ids []string) []model.Alarm { return rows } +// Insert 新增信息 返回新增数据ID +func (r Alarm) Insert(param model.Alarm) string { + if param.Timestamp.IsZero() { + param.Timestamp = time.Now() + } + // 执行插入 + if err := datasource.DB("").Create(¶m).Error; err != nil { + logger.Errorf("insert err => %v", err.Error()) + return "" + } + return param.ID +} + +// Update 修改信息 返回受影响的行数 +func (r Alarm) Update(param model.Alarm) int64 { + if param.ID == "" { + return 0 + } + tx := datasource.DB("").Model(&model.Alarm{}) + // 构建查询条件 + tx = tx.Where("id = ?", param.ID) + tx = tx.Omit("id", "timestamp") + // 执行更新 + if err := tx.Updates(param).Error; err != nil { + logger.Errorf("update err => %v", err.Error()) + return 0 + } + return tx.RowsAffected +} + // DeleteByIds 批量删除信息 -func (r *Alarm) DeleteByIds(ids []string) int64 { +func (r Alarm) DeleteByIds(ids []string) int64 { if len(ids) <= 0 { return 0 } @@ -101,3 +171,17 @@ func (r *Alarm) DeleteByIds(ids []string) int64 { } return tx.RowsAffected } + +// SelectAlarmSeqLast 查询网元告警最后一条序号 +func (r Alarm) SelectAlarmSeqLast(neType, neId string) int64 { + tx := datasource.DB("").Model(&model.Alarm{}) + tx = tx.Where("ne_type=? and ne_id=?", neType, neId) + tx = tx.Select("alarm_seq").Order("alarm_seq DESC") + // 查询数据 + var alarmSeq int64 = 0 + if err := tx.Limit(1).Find(&alarmSeq).Error; err != nil { + logger.Errorf("query find err => %v", err.Error()) + return alarmSeq + } + return alarmSeq +} diff --git a/src/modules/network_data/service/all_alarm.go b/src/modules/network_data/service/all_alarm.go index 2729e674..04c6d546 100644 --- a/src/modules/network_data/service/all_alarm.go +++ b/src/modules/network_data/service/all_alarm.go @@ -2,7 +2,10 @@ package service import ( "fmt" + "time" + "be.ems/src/framework/constants" + "be.ems/src/framework/utils/parse" "be.ems/src/modules/network_data/model" "be.ems/src/modules/network_data/repository" ) @@ -37,3 +40,88 @@ func (r *Alarm) DeleteByIds(ids []string) (int64, error) { // 删除信息失败! return 0, fmt.Errorf("delete fail") } + +// Find 查询 +func (r Alarm) Find(param model.Alarm) []model.Alarm { + return r.alarmRepository.Select(param) +} + +// Insert 新增信息 +func (s Alarm) Insert(param model.Alarm) string { + return s.alarmRepository.Insert(param) +} + +// Update 修改信息 +func (s Alarm) Update(param model.Alarm) int64 { + return s.alarmRepository.Update(param) +} + +// FindAlarmSeqLast 查询网元告警最后一条序号 +func (s Alarm) FindAlarmSeqLast(neType, neId string) int64 { + return s.alarmRepository.SelectAlarmSeqLast(neType, neId) +} + +// AlarmClearByIds 批量清除告警信息 +func (r Alarm) AlarmClearByIds(ids []string, clearUser string) (int64, error) { + // 检查是否存在 + arr := r.alarmRepository.SelectByIds(ids) + if len(arr) <= 0 { + return 0, fmt.Errorf("no data") + } + + if len(arr) == len(ids) { + var rows int64 = 0 + for _, v := range arr { + // 状态检查AlarmCode变更告警ID + alarmCode := parse.Number(v.AlarmCode) + if alarmCode == constants.ALARM_STATE_CHECK || alarmCode == constants.ALARM_CMD_CHECK || alarmCode == constants.ALARM_LICENSE_CHECK { + v.AlarmId = fmt.Sprintf("%s%d", v.AlarmCode, v.EventTime.UnixMilli()) + } + v.AlarmStatus = "0" + // 告警清除 + v.ClearType = "2" + v.ClearTime = time.Now() + v.ClearUser = clearUser + rows += r.alarmRepository.Update(v) + } + return rows, nil + } + // 清除失败! + return 0, fmt.Errorf("clear fail") +} + +// AlarmAckByIds 批量确认清除告警信息 +func (r Alarm) AlarmAckByIds(ids []string, ackUser string, ackState bool) (int64, error) { + // 检查是否存在 + arr := r.alarmRepository.SelectByIds(ids) + if len(arr) <= 0 { + return 0, fmt.Errorf("no data") + } + + if len(arr) == len(ids) { + var rows int64 = 0 + for _, v := range arr { + // 确认清除 + if ackState { + v.AckState = "1" + } else { + v.AckState = "0" + } + v.AckTime = time.Now() + v.AckUser = ackUser + rows += r.alarmRepository.Update(v) + } + return rows, nil + } + // 清除失败! + return 0, fmt.Errorf("ack fail") +} + +// InsertAndForword 新增信息并转发通知 +func (s Alarm) InsertAndForword(param model.Alarm) string { + insertId := s.alarmRepository.Insert(param) + if insertId != "" { + // 转发通知 TODO + } + return insertId +} diff --git a/src/modules/ws/service/ws_send.go b/src/modules/ws/service/ws_send.go index c32a7e04..b2393ef8 100644 --- a/src/modules/ws/service/ws_send.go +++ b/src/modules/ws/service/ws_send.go @@ -16,6 +16,8 @@ const ( GROUP_TRACE_NE = "2" // 组号-信令跟踪Packet 4_taskNo GROUP_TRACE_PACKET = "4" + // 组号-网元状态 8_neType_neId + GROUP_NE_STATE = "8" // 组号-指标通用 10_neType_neId GROUP_KPI = "10" // 组号-指标UPF 12_neId @@ -36,7 +38,7 @@ const ( GROUP_MME_UE = "1011" // 组号-告警 2000_neType_neId GROUP_ALARM = "2000" - // 组号-告警事件 2000_neType_neId + // 组号-告警事件 2002_neType_neId GROUP_ALARM_EVENT = "2002" )