Selaa lähdekoodia

fix:预警心跳

zqbao 4 kuukautta sitten
vanhempi
commit
b11367ad5e

+ 5 - 1
controllers/edb_monitor/edb_monitor.go

@@ -148,10 +148,14 @@ func (m *EdbMonitorController) Edit() {
 		br.ErrMsg = err.Error()
 		return
 	}
-	if req.EdbMonitorId <= 0 {
+	if req.EdbInfoId <= 0 {
 		br.Msg = "请选择指标"
 		return
 	}
+	if req.EdbMonitorId <= 0 {
+		br.Msg = "请选择预警"
+		return
+	}
 	if req.ClassifyId <= 0 {
 		br.Msg = "请选择分类"
 		return

+ 16 - 1
controllers/edb_monitor/edb_monitor_message.go

@@ -55,7 +55,7 @@ func (m *EdbMonitorMessageController) Connect() {
 			conn.Close()
 		}
 	}
-	err := utils.Rc.Put(connKey, "1", time.Minute*3)
+	err := utils.Rc.Put(connKey, "1", time.Minute*1)
 	if err != nil {
 		br.Msg = "系统错误"
 		br.ErrMsg = "连接失败,err:" + err.Error()
@@ -75,6 +75,21 @@ func (m *EdbMonitorMessageController) Connect() {
 		utils.Rc.Delete(connKey)
 		return nil
 	})
+
+	go func() {
+		// 心跳检测
+		for {
+			isClose, err := edbmonitor.EdbMonitorMessageHealth(sysUser.AdminId)
+			if err != nil {
+				utils.FileLog.Error("指标预警信息健康检查失败,err:%s, adminId:%d", err.Error(), sysUser.AdminId)
+				return
+			}
+			if isClose {
+				return
+			}
+		}
+	}()
+
 	messageList, err := edbmonitor.GetHistoryMessages(sysUser.AdminId)
 	if err != nil {
 		utils.FileLog.Error("获取指标预警信息历史失败,err:%s, adminId:%d", err.Error(), sysUser.AdminId)

+ 2 - 0
models/edb_monitor/edb_monitor.go

@@ -13,6 +13,8 @@ type EdbMonitorInfo struct {
 	EdbMonitorName       string    `description:"预警名称"`
 	EdbInfoId            int       `description:"指标id"`
 	EdbInfoType          int       `description:"指标类型"`
+	EdbUniqueCode        string    `description:"指标唯一标识"`
+	EdbClassifyId        int       `description:"指标id"`
 	EdbCode              string    `description:"指标编码"`
 	Source               int       `description:"指标来源"`
 	SubSource            int       `description:"指标子来源: 0-经济数据库;1-日期序列;2-高频数据"`

+ 2 - 0
models/edb_monitor/edb_monitor_message.go

@@ -11,6 +11,8 @@ type EdbMonitorMessage struct {
 	EdbMonitorMessageId int       `orm:"column(edb_monitor_message_id);pk"`
 	EdbInfoId           int       `description:"指标id"`
 	EdbInfoType         int       `description:"指标类型: 0-普通指标;1-预测指标"`
+	EdbUniqueCode       string    `description:"指标唯一标识"`
+	EdbClassifyId       int       `description:"指标id"`
 	AdminId             int       `description:"用户id"`
 	IsRead              int       `description:"是否已读: 0-未读;1-已读"`
 	Message             string    `description:"消息内容"`

+ 2 - 0
models/edb_monitor/request/edb_monitor.go

@@ -3,6 +3,8 @@ package request
 type EdbMonitorInfoSaveReq struct {
 	EdbMonitorId   int    `description:"预警ID"`
 	EdbInfoId      int    `description:"指标ID"`
+	EdbUniqueCode  string `description:"指标唯一标识"`
+	EdbClassifyId  int    `description:"指标id"`
 	MonitorType    int    `description:"突破方式:0-向上突破;1-向下突破"`
 	MonitorData    string `description:"预警值"`
 	EdbMonitorName string `description:"预警名称"`

+ 2 - 0
models/edb_monitor/response/edb_monitor.go

@@ -12,6 +12,8 @@ type EdbMonitorInfoItem struct {
 	EdbInfoId              int     `description:"指标id"`
 	EdbInfoName            string  `description:"指标名称"`
 	EdbInfoType            int     `description:"指标类型"`
+	EdbUniqueCode          string  `description:"指标唯一标识"`
+	EdbClassifyId          int     `description:"指标id"`
 	EdbCode                string  `description:"指标编码"`
 	Source                 int     `description:"指标来源" json:"-"`
 	SubSource              int     `description:"指标子来源: 0-经济数据库;1-日期序列;2-高频数据" json:"-"`

+ 8 - 2
services/edb_monitor/edb_monitor.go

@@ -186,10 +186,12 @@ func SaveEdbMonitorInfo(req request.EdbMonitorInfoSaveReq, adminId int) (msg str
 		}
 		var updateCols []string
 		if edbMonitorInfo.EdbInfoId != req.EdbInfoId {
-			updateCols = append(updateCols, []string{"edb_info_id", "edb_info_type", "edb_code", "source", "sub_source", "edb_latest_date", "edb_latest_value"}...)
+			updateCols = append(updateCols, []string{"edb_info_id", "edb_info_type", "edb_code", "edb_classify_id", "edb_unique_code", "source", "sub_source", "edb_latest_date", "edb_latest_value"}...)
 			edbMonitorInfo.EdbInfoId = req.EdbInfoId
 			edbMonitorInfo.EdbInfoType = edb.EdbInfoType
 			edbMonitorInfo.EdbCode = edb.EdbCode
+			edbMonitorInfo.EdbClassifyId = edb.ClassifyId
+			edbMonitorInfo.EdbUniqueCode = edb.UniqueCode
 			edbMonitorInfo.Source = edb.Source
 			edbMonitorInfo.SubSource = edb.SubSource
 			edbMonitorInfo.EdbLatestDate = edb.LatestDate
@@ -232,6 +234,8 @@ func SaveEdbMonitorInfo(req request.EdbMonitorInfoSaveReq, adminId int) (msg str
 		edbMonitorInfo.EdbMonitorName = req.EdbMonitorName
 		edbMonitorInfo.EdbInfoId = req.EdbInfoId
 		edbMonitorInfo.EdbInfoType = edb.EdbInfoType
+		edbMonitorInfo.EdbUniqueCode = edb.UniqueCode
+		edbMonitorInfo.EdbClassifyId = edb.ClassifyId
 		edbMonitorInfo.EdbCode = edb.EdbCode
 		edbMonitorInfo.Source = edb.Source
 		edbMonitorInfo.SubSource = edb.SubSource
@@ -298,7 +302,7 @@ func ModifyEdbMonitorState(edbMonitorInfo *edbmonitor.EdbMonitorInfo, edbCode st
 		if err != nil {
 			isRead = 0
 		}
-		err = LogMessage(edbMonitorInfo.EdbMonitorName, edbMonitorInfo.MonitorTriggerTime, edbMonitorInfo.EdbInfoId, edbMonitorInfo.EdbInfoType, edbMonitorInfo.CreateUserId, isRead)
+		err = LogMessage(edbMonitorInfo.EdbMonitorName, edbMonitorInfo.EdbUniqueCode, edbMonitorInfo.MonitorTriggerTime, edbMonitorInfo.EdbInfoId, edbMonitorInfo.EdbInfoType, edbMonitorInfo.CreateUserId, isRead, edbMonitorInfo.EdbClassifyId)
 	}
 
 	return
@@ -442,6 +446,8 @@ func toEdbMonitorInfoItems(edbmonitor []*edbmonitor.EdbMonitorInfo, userMap, cla
 		tmp.EdbMonitorClassifyName = classifyPathMap[v.EdbMonitorClassifyId]
 		tmp.EdbInfoId = v.EdbInfoId
 		tmp.EdbInfoName = infoMap[v.EdbInfoId]
+		tmp.EdbUniqueCode = v.EdbUniqueCode
+		tmp.EdbClassifyId = v.EdbClassifyId
 		tmp.EdbInfoType = v.EdbInfoType
 		tmp.EdbCode = v.EdbCode
 		tmp.Source = v.Source

+ 26 - 1
services/edb_monitor/edb_monitor_message.go

@@ -5,6 +5,7 @@ import (
 	edbmonitor "eta/eta_api/models/edb_monitor"
 	"eta/eta_api/models/edb_monitor/response"
 	"eta/eta_api/utils"
+	"strconv"
 	"time"
 
 	"github.com/gorilla/websocket"
@@ -41,10 +42,34 @@ func ReadEdbMonitorMessage(messageId, adminId int) (msg string, err error) {
 	return
 }
 
-func LogMessage(content string, triggerTime time.Time, edbInfoId, edbInfoType, adminId, isRead int) (err error) {
+func EdbMonitorMessageHealth(adminId int) (isClose bool, err error) {
+	conn := MonitorMessageConn[adminId]
+	if conn == nil {
+		err = errors.New("no connection")
+		isClose = true
+		return
+	}
+	_, msg, err := conn.ReadMessage()
+	if err != nil {
+		isClose = true
+		return
+	}
+	if string(msg) == "ping" {
+		healthKey := EDB_MONITOR_MESSAGE_CONNECT_CACHE + strconv.Itoa(adminId)
+		err = utils.Rc.Put(healthKey, "1", time.Minute*1)
+		if err != nil {
+			return
+		}
+	}
+	return
+}
+
+func LogMessage(content, uniqueCode string, triggerTime time.Time, edbInfoId, edbInfoType, adminId, isRead, classifyId int) (err error) {
 	message := &edbmonitor.EdbMonitorMessage{
 		EdbInfoId:          edbInfoId,
 		EdbInfoType:        edbInfoType,
+		EdbUniqueCode:      uniqueCode,
+		EdbClassifyId:      classifyId,
 		AdminId:            adminId,
 		IsRead:             isRead,
 		Message:            content + "触发预警",