edb_monitor_message.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. package edbmonitor
  2. import (
  3. "errors"
  4. "eta/eta_api/models"
  5. edbmonitor "eta/eta_api/models/edb_monitor"
  6. "eta/eta_api/models/edb_monitor/response"
  7. "eta/eta_api/utils"
  8. "strconv"
  9. "time"
  10. "github.com/gorilla/websocket"
  11. "github.com/rdlucklib/rdluck_tools/paging"
  12. )
  13. var (
  14. EDB_MONITOR_MESSAGE_CONNECT_CACHE = "edb_monitor_message_cache:"
  15. )
  16. var MonitorMessageConn = make(map[int]*websocket.Conn)
  17. func ReadEdbMonitorMessage(messageId, adminId int) (msg string, err error) {
  18. message, err := edbmonitor.GetEdbMonitorMessageById(messageId)
  19. if err != nil {
  20. if utils.IsErrNoRow(err) {
  21. msg = "消息不存在"
  22. return
  23. }
  24. msg = "获取消息失败"
  25. return
  26. }
  27. if message.AdminId != adminId {
  28. msg = "您没有权限查看该消息"
  29. err = errors.New("no permission")
  30. return
  31. }
  32. message.IsRead = 1
  33. err = message.Update([]string{"IsRead"})
  34. if err != nil {
  35. msg = "已读失败"
  36. return
  37. }
  38. return
  39. }
  40. func ReadEdbMonitorMessageList(messageId []int, adminId int) (msg string, err error) {
  41. err = edbmonitor.BatchModifyEdbMonitorMessageIsRead(messageId, adminId)
  42. if err != nil {
  43. msg = "已读失败"
  44. return
  45. }
  46. return
  47. }
  48. func EdbMonitorMessageHealth(adminId int) (isClose bool, err error) {
  49. conn := MonitorMessageConn[adminId]
  50. if conn == nil {
  51. err = errors.New("no connection")
  52. isClose = true
  53. return
  54. }
  55. _, msg, err := conn.ReadMessage()
  56. if err != nil {
  57. isClose = true
  58. return
  59. }
  60. if string(msg) == "ping" {
  61. healthKey := EDB_MONITOR_MESSAGE_CONNECT_CACHE + strconv.Itoa(adminId)
  62. err = utils.Rc.Put(healthKey, "1", time.Minute*1)
  63. if err != nil {
  64. return
  65. }
  66. }
  67. return
  68. }
  69. func LogMessage(content, uniqueCode string, triggerTime time.Time, edbInfoId, edbInfoType, adminId, isRead, classifyId int) (err error) {
  70. message := &edbmonitor.EdbMonitorMessage{
  71. EdbInfoId: edbInfoId,
  72. EdbInfoType: edbInfoType,
  73. EdbUniqueCode: uniqueCode,
  74. EdbClassifyId: classifyId,
  75. AdminId: adminId,
  76. IsRead: isRead,
  77. Message: content + "触发预警",
  78. MonitorTriggerTime: triggerTime,
  79. CreateTime: time.Now(),
  80. }
  81. _, err = message.Insert()
  82. return err
  83. }
  84. func SendMessages(adminId, edbInfoId, edbInfoType int, classifyId int, edbUniqueCode, message string, triggerTime string) (err error) {
  85. conn := MonitorMessageConn[adminId]
  86. if conn == nil {
  87. return errors.New("no connection")
  88. }
  89. resp := models.WebsocketMessageResponse{
  90. MessageType: 0,
  91. Data: response.EdbMonitorMessageResp{
  92. EdbInfoId: edbInfoId,
  93. EdbInfoType: edbInfoType,
  94. EdbUniqueCode: edbUniqueCode,
  95. EdbClassifyId: classifyId,
  96. Message: message,
  97. TriggerTime: triggerTime,
  98. },
  99. }
  100. return conn.WriteJSON(resp)
  101. }
  102. func GetHistoryMessages(adminId int) (items []*response.EdbMonitorMessageResp, err error) {
  103. messageList, err := edbmonitor.GetEdbMonitorMessageByAdminId(adminId)
  104. if err != nil {
  105. return
  106. }
  107. items = toEdbMonitorMessageResp(messageList)
  108. return
  109. }
  110. func GetMessageList(adminid int, currentIndex, pageSize int) (resp response.EdbMonitorMessageListResp, err error) {
  111. startSize := utils.StartIndex(currentIndex, pageSize)
  112. total, err := edbmonitor.GetEdbMonitorMessageCountByAdminId(adminid)
  113. if err != nil {
  114. return
  115. }
  116. if total == 0 {
  117. resp.List = make([]*response.EdbMonitorMessageResp, 0)
  118. resp.Paging = paging.GetPaging(currentIndex, pageSize, total)
  119. return
  120. }
  121. messageList, err := edbmonitor.GetEdbMonitorMessagePageByAdminId(adminid, startSize, pageSize)
  122. if err != nil {
  123. return
  124. }
  125. resp.List = toEdbMonitorMessageResp(messageList)
  126. resp.Paging = paging.GetPaging(currentIndex, pageSize, total)
  127. return
  128. }
  129. func toEdbMonitorMessageResp(items []*edbmonitor.EdbMonitorMessage) (list []*response.EdbMonitorMessageResp) {
  130. list = make([]*response.EdbMonitorMessageResp, 0)
  131. for _, message := range items {
  132. item := response.EdbMonitorMessageResp{
  133. EdbMonitorMessageId: message.EdbMonitorMessageId,
  134. EdbInfoId: message.EdbInfoId,
  135. EdbInfoType: message.EdbInfoType,
  136. EdbUniqueCode: message.EdbUniqueCode,
  137. EdbClassifyId: message.EdbClassifyId,
  138. IsRead: message.IsRead,
  139. Message: message.Message,
  140. TriggerTime: utils.TimeTransferString(utils.FormatDateTime, message.MonitorTriggerTime),
  141. }
  142. list = append(list, &item)
  143. }
  144. return
  145. }