|
@@ -1,15 +1,20 @@
|
|
|
package edb_monitor
|
|
|
|
|
|
import (
|
|
|
+ "encoding/json"
|
|
|
"eta/eta_api/controllers"
|
|
|
"eta/eta_api/models"
|
|
|
+ "eta/eta_api/models/edb_monitor/request"
|
|
|
edbmonitor "eta/eta_api/services/edb_monitor"
|
|
|
+ "eta/eta_api/utils"
|
|
|
"net/http"
|
|
|
+ "strconv"
|
|
|
+ "time"
|
|
|
|
|
|
"github.com/gorilla/websocket"
|
|
|
)
|
|
|
|
|
|
-type EdbMonitorMessage struct {
|
|
|
+type EdbMonitorMessageController struct {
|
|
|
controllers.BaseAuthController
|
|
|
}
|
|
|
|
|
@@ -28,8 +33,8 @@ var edbMonitorMessageClient = make(map[int]*websocket.Conn)
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
-func (m *EdbMonitorController) Message() {
|
|
|
+
|
|
|
+func (m *EdbMonitorMessageController) Connect() {
|
|
|
br := new(models.BaseResponse).Init()
|
|
|
defer func() {
|
|
|
m.Data["json"] = br
|
|
@@ -42,15 +47,161 @@ func (m *EdbMonitorController) Message() {
|
|
|
br.Ret = 408
|
|
|
return
|
|
|
}
|
|
|
- conn, err := upgrader.Upgrade(m.Ctx.ResponseWriter, m.Ctx.Request, nil)
|
|
|
+
|
|
|
+ var conn *websocket.Conn
|
|
|
+ connKey := edbmonitor.EDB_MONITOR_MESSAGE_CONNECT_CACHE + strconv.Itoa(sysUser.AdminId)
|
|
|
+ ok := utils.Rc.IsExist(connKey)
|
|
|
+ if !ok {
|
|
|
+ conn = edbMonitorMessageClient[sysUser.AdminId]
|
|
|
+ if conn != nil {
|
|
|
+ conn.Close()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ err := utils.Rc.Put(connKey, "1", time.Minute*3)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "系统错误"
|
|
|
+ br.ErrMsg = "连接失败,err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ conn, err = upgrader.Upgrade(m.Ctx.ResponseWriter, m.Ctx.Request, nil)
|
|
|
if err != nil {
|
|
|
+ br.Msg = "连接失败"
|
|
|
+ br.ErrMsg = "连接失败,err:" + err.Error()
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
edbMonitorMessageClient[sysUser.AdminId] = conn
|
|
|
conn.SetCloseHandler(func(code int, text string) error {
|
|
|
delete(edbMonitorMessageClient, sysUser.AdminId)
|
|
|
+ utils.Rc.Delete(connKey)
|
|
|
return nil
|
|
|
})
|
|
|
- edbmonitor.SendMessages(conn, sysUser.AdminId)
|
|
|
+ for {
|
|
|
+ ok = utils.Rc.IsExist(connKey)
|
|
|
+ if !ok {
|
|
|
+ br.Msg = "连接已断开"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ err = edbmonitor.SendMessages(conn, sysUser.AdminId)
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Error("指标预警信息发送失败,err:%s, adminId:%d", err.Error(), sysUser.AdminId)
|
|
|
+ }
|
|
|
+ time.Sleep(1 * time.Minute)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func (m *EdbMonitorMessageController) Health() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ m.Data["json"] = br
|
|
|
+ m.ServeJSON()
|
|
|
+ }()
|
|
|
+ sysUser := m.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ conn := edbMonitorMessageClient[sysUser.AdminId]
|
|
|
+ if conn == nil {
|
|
|
+ br.Msg = "系统错误"
|
|
|
+ br.ErrMsg = "健康检查失败,err:连接已断开"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ healthKey := edbmonitor.EDB_MONITOR_MESSAGE_CONNECT_CACHE + strconv.Itoa(sysUser.AdminId)
|
|
|
+ err := utils.Rc.Put(healthKey, "1", time.Minute*3)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "系统错误"
|
|
|
+ br.ErrMsg = "健康检查失败,err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ br.Msg = "成功"
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func (m *EdbMonitorMessageController) Close() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ m.Data["json"] = br
|
|
|
+ m.ServeJSON()
|
|
|
+ }()
|
|
|
+ sysUser := m.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ conn := edbMonitorMessageClient[sysUser.AdminId]
|
|
|
+ if conn != nil {
|
|
|
+ conn.Close()
|
|
|
+ }
|
|
|
+
|
|
|
+ br.Msg = "关闭成功"
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func (m *EdbMonitorMessageController) Read() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ m.Data["json"] = br
|
|
|
+ m.ServeJSON()
|
|
|
+ }()
|
|
|
+
|
|
|
+ sysUser := m.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var req request.EdbMonitorMessageReadReq
|
|
|
+ if err := json.Unmarshal(m.Ctx.Input.RequestBody, &req); err != nil {
|
|
|
+ br.Msg = "参数错误"
|
|
|
+ br.ErrMsg = "参数错误,err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if req.EdbMonitorMessageId <= 0 {
|
|
|
+ br.Msg = "参数错误"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ msg, err := edbmonitor.ReadEdbMonitorMessage(req.EdbMonitorMessageId, sysUser.AdminId)
|
|
|
+ if err != nil {
|
|
|
+ if msg == "" {
|
|
|
+ msg = "系统错误"
|
|
|
+ }
|
|
|
+ br.Msg = msg
|
|
|
+ br.ErrMsg = "读取消息失败,err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
+ br.Msg = "已读成功"
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
}
|