|
@@ -1,13 +1,16 @@
|
|
|
package edbmonitor
|
|
|
|
|
|
import (
|
|
|
+ "encoding/json"
|
|
|
"errors"
|
|
|
"eta/eta_api/global"
|
|
|
"eta/eta_api/models"
|
|
|
edbmonitor "eta/eta_api/models/edb_monitor"
|
|
|
"eta/eta_api/models/edb_monitor/response"
|
|
|
"eta/eta_api/utils"
|
|
|
+ "fmt"
|
|
|
"time"
|
|
|
+
|
|
|
"github.com/rdlucklib/rdluck_tools/paging"
|
|
|
)
|
|
|
|
|
@@ -84,9 +87,10 @@ func LogMessage(content, uniqueCode string, triggerTime time.Time, edbInfoId, ed
|
|
|
}
|
|
|
|
|
|
func SendMessages(adminId, edbInfoId, edbInfoType int, classifyId int, edbUniqueCode, message string, triggerTime string) (err error) {
|
|
|
- conn := global.MonitorMessageConn[adminId]
|
|
|
+ conn := global.AdminWebSocketConnMap[adminId]
|
|
|
if conn == nil {
|
|
|
- return errors.New("no connection")
|
|
|
+ err = errors.New("no connection")
|
|
|
+ return
|
|
|
}
|
|
|
resp := models.WebsocketMessageResponse{
|
|
|
MessageType: 0,
|
|
@@ -99,7 +103,17 @@ func SendMessages(adminId, edbInfoId, edbInfoType int, classifyId int, edbUnique
|
|
|
TriggerTime: triggerTime,
|
|
|
},
|
|
|
}
|
|
|
- return conn.WriteJSON(resp)
|
|
|
+ jsonData, err := json.Marshal(resp)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("json marshal failed, err:%s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ ok := conn.Send(jsonData)
|
|
|
+ if !ok {
|
|
|
+ err = fmt.Errorf("send message failed, err:%s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
}
|
|
|
|
|
|
func GetHistoryMessages(adminId int) (items []*response.EdbMonitorMessageResp, err error) {
|
|
@@ -152,3 +166,109 @@ func toEdbMonitorMessageResp(items []*edbmonitor.EdbMonitorMessage) (list []*res
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+func AutoCheckMonitorMessageList() (err error) {
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Error("指标预警信息发送失败,err:%s", err.Error())
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ ticker := time.NewTicker(time.Second * 10)
|
|
|
+ defer ticker.Stop()
|
|
|
+
|
|
|
+ for {
|
|
|
+ select {
|
|
|
+ case <-ticker.C:
|
|
|
+ autoCheckMonitorMessageList()
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func autoCheckMonitorMessageList() (err error){
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Error("指标预警信息检查失败,err:%s", err.Error())
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ utils.FileLog.Info("检查是否有预警信息")
|
|
|
+ admins := make([]int, 0)
|
|
|
+ for adminId, conn := range global.AdminWebSocketConnMap {
|
|
|
+ if conn == nil {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ admins = append(admins, adminId)
|
|
|
+ }
|
|
|
+ if len(admins) == 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ messageList, er := edbmonitor.GetEdbMonitorMessageUnreadListByAdminIds(admins)
|
|
|
+ if er != nil {
|
|
|
+ err = fmt.Errorf("获取指标预警信息历史失败,err:%s", er.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ readList := make([]int, 0)
|
|
|
+ adminMsgMap := make(map[int]int)
|
|
|
+ for _, msg := range messageList {
|
|
|
+ if _, ok := adminMsgMap[msg.AdminId]; !ok {
|
|
|
+ adminMsgMap[msg.AdminId] = msg.EdbMonitorMessageId
|
|
|
+ triggerTime := utils.TimeTransferString(utils.FormatDateTime, msg.MonitorTriggerTime)
|
|
|
+ err := SendMessages(msg.AdminId, msg.EdbInfoId, msg.EdbInfoType, msg.EdbClassifyId, msg.EdbUniqueCode, msg.Message, triggerTime)
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Error("指标预警信息发送失败,err:%s, adminId:%d", err.Error(), msg.AdminId)
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ readList = append(readList, msg.EdbMonitorMessageId)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ err = edbmonitor.SetEdbMonitorMessageReadByIds(readList)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("指标预警信息已读失败,err:%s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func AutoCheckMonitorMessageListByAdminId(adminId int) (err error){
|
|
|
+ // 设置缓存防止重复发送
|
|
|
+ cacheKey := fmt.Sprintf("%s%d", utils.CACHE_EDB_MONITOR_MESSAGE, adminId)
|
|
|
+ if !utils.Rc.SetNX(cacheKey, 1, 10*time.Minute) {
|
|
|
+ err = fmt.Errorf("系统处理中,请稍后重试!")
|
|
|
+ utils.FileLog.Error("指标预警信息检查失败,err:%s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Error("指标预警信息检查失败,err:%s", err.Error())
|
|
|
+ }
|
|
|
+ _ = utils.Rc.Delete(cacheKey)
|
|
|
+ }()
|
|
|
+ utils.FileLog.Info("检查是否有预警信息")
|
|
|
+ messageList, er := edbmonitor.GetEdbMonitorMessageUnreadByAdminId(adminId)
|
|
|
+ if er != nil {
|
|
|
+ err = fmt.Errorf("获取指标预警信息历史失败,err:%s", er.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(messageList) == 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ readList := make([]int, 0)
|
|
|
+ for k, msg := range messageList {
|
|
|
+ if k == 0 {
|
|
|
+ triggerTime := utils.TimeTransferString(utils.FormatDateTime, msg.MonitorTriggerTime)
|
|
|
+ err = SendMessages(msg.AdminId, msg.EdbInfoId, msg.EdbInfoType, msg.EdbClassifyId, msg.EdbUniqueCode, msg.Message, triggerTime)
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Error("指标预警信息发送失败,err:%s, adminId:%d", err.Error(), msg.AdminId)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ readList = append(readList, msg.EdbMonitorMessageId)
|
|
|
+ }
|
|
|
+
|
|
|
+ err = edbmonitor.SetEdbMonitorMessageReadByAdminId(adminId, readList)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("指标预警信息已读失败,err:%s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|