|
@@ -0,0 +1,342 @@
|
|
|
+package edbmonitor
|
|
|
+
|
|
|
+import (
|
|
|
+ "eta/eta_api/models/data_manage"
|
|
|
+ edbmonitor "eta/eta_api/models/edb_monitor"
|
|
|
+ "eta/eta_api/models/edb_monitor/request"
|
|
|
+ "eta/eta_api/models/edb_monitor/response"
|
|
|
+ "eta/eta_api/models/system"
|
|
|
+ "eta/eta_api/utils"
|
|
|
+ "fmt"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
+
|
|
|
+ "github.com/rdlucklib/rdluck_tools/paging"
|
|
|
+)
|
|
|
+
|
|
|
+// 预警触发状态
|
|
|
+const (
|
|
|
+ EDB_MONITOR_STATE_CLOSE = iota
|
|
|
+ EDB_MONITOR_STATE_NO_TRIGGER
|
|
|
+ EDB_MONITOR_STATE_TRIGGER_SUCCESS
|
|
|
+)
|
|
|
+
|
|
|
+// 预警突破方式
|
|
|
+const (
|
|
|
+ EDB_MONITOR_TYPE_UP = iota
|
|
|
+ EDB_MONITOR_TYPE_DOWN
|
|
|
+)
|
|
|
+
|
|
|
+func GetMonitorList(classifyId, level, state, userId string, pageSize, currentIndex int) (resp response.EdbMonitorInfoListResp, msg string, err error) {
|
|
|
+ if pageSize <= 0 {
|
|
|
+ pageSize = utils.PageSize20
|
|
|
+ }
|
|
|
+ if currentIndex <= 0 {
|
|
|
+ currentIndex = 1
|
|
|
+ }
|
|
|
+ startSize := utils.StartIndex(currentIndex, pageSize)
|
|
|
+
|
|
|
+ var classifyIdList []int
|
|
|
+ if classifyId != "" {
|
|
|
+ tmp := strings.Split(classifyId, ",")
|
|
|
+ for _, v := range tmp {
|
|
|
+ cv, _ := strconv.Atoi(v)
|
|
|
+ classifyIdList = append(classifyIdList, cv)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var levelList []int
|
|
|
+ if level != "" {
|
|
|
+ tmp := strings.Split(level, ",")
|
|
|
+ for _, v := range tmp {
|
|
|
+ lv, _ := strconv.Atoi(v)
|
|
|
+ levelList = append(levelList, lv)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var stateList []int
|
|
|
+ if state != "" {
|
|
|
+ tmp := strings.Split(state, ",")
|
|
|
+ for _, v := range tmp {
|
|
|
+ st, _ := strconv.Atoi(v)
|
|
|
+ stateList = append(stateList, st)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var userIdList []int
|
|
|
+ if userId != "" {
|
|
|
+ tmp := strings.Split(userId, ",")
|
|
|
+ for _, v := range tmp {
|
|
|
+ ui, _ := strconv.Atoi(v)
|
|
|
+ userIdList = append(userIdList, ui)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var conditon string
|
|
|
+ var pars []interface{}
|
|
|
+ if len(classifyIdList) != 0 {
|
|
|
+ conditon += ` AND edb_monitor_classify_id IN (` + utils.GetOrmInReplace(len(classifyIdList)) + ` )`
|
|
|
+ pars = append(pars, classifyIdList)
|
|
|
+ }
|
|
|
+ if len(levelList) != 0 {
|
|
|
+ conditon += ` AND monitor_level IN (` + utils.GetOrmInReplace(len(levelList)) + ` )`
|
|
|
+ pars = append(pars, levelList)
|
|
|
+ }
|
|
|
+ if len(stateList) != 0 {
|
|
|
+ conditon += ` AND state IN (` + utils.GetOrmInReplace(len(stateList)) + ` )`
|
|
|
+ pars = append(pars, stateList)
|
|
|
+ }
|
|
|
+ if len(userIdList) != 0 {
|
|
|
+ conditon += ` AND create_user_id IN (` + utils.GetOrmInReplace(len(userIdList)) + ` )`
|
|
|
+ pars = append(pars, userIdList)
|
|
|
+ }
|
|
|
+
|
|
|
+ total, err := edbmonitor.GetEdbMonitorInfoCountByCondition(conditon, pars)
|
|
|
+ if err != nil {
|
|
|
+ msg = "获取监控列表失败"
|
|
|
+ err = fmt.Errorf("GetEdbMonitorInfoCountByCondition err:%w", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ edbMonitorList, err := edbmonitor.GetEdbMonitorInfoPageByCondition(conditon, pars, startSize, pageSize)
|
|
|
+ if err != nil {
|
|
|
+ msg = "获取监控列表失败"
|
|
|
+ err = fmt.Errorf("GetEdbMonitorInfoPageByCondition err:%w", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ edbUserId := make([]int, 0)
|
|
|
+ for _, v := range edbMonitorList {
|
|
|
+ edbUserId = append(edbUserId, v.CreateUserId)
|
|
|
+ }
|
|
|
+ userInfoList, err := system.GetSysAdminByIdList(edbUserId)
|
|
|
+ if err != nil {
|
|
|
+ msg = "获取监控列表失败"
|
|
|
+ err = fmt.Errorf("GetSysAdminByIdList err:%w", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ userMap := make(map[int]string)
|
|
|
+ for _, v := range userInfoList {
|
|
|
+ userMap[v.AdminId] = v.RealName
|
|
|
+ }
|
|
|
+ classifyList, err := edbmonitor.GetEdbMonitorClassifyList()
|
|
|
+ if err != nil {
|
|
|
+ msg = "获取监控列表失败"
|
|
|
+ err = fmt.Errorf("GetEdbMonitorClassifyList err:%w", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ classifyMap := make(map[int]string)
|
|
|
+ for _, v := range classifyList {
|
|
|
+ classifyMap[v.ClassifyId] = v.ClassifyName
|
|
|
+ }
|
|
|
+ classifyPathMap := make(map[int]string)
|
|
|
+ for _, v := range classifyList {
|
|
|
+ var path []string
|
|
|
+ if v.ParentId != 0 {
|
|
|
+ parentName := classifyMap[v.ParentId]
|
|
|
+ if v.RootId != 0 && v.RootId != v.ParentId {
|
|
|
+ rootName := classifyMap[v.RootId]
|
|
|
+ path = append(path, rootName)
|
|
|
+ }
|
|
|
+ curName := v.ClassifyName
|
|
|
+ path = append(path, parentName, curName)
|
|
|
+ } else {
|
|
|
+ path = append(path, v.ClassifyName)
|
|
|
+ }
|
|
|
+ classifyPathMap[v.ClassifyId] = strings.Join(path, "/")
|
|
|
+ }
|
|
|
+
|
|
|
+ edbMonitorItems := toEdbMonitorInfoItems(edbMonitorList, userMap, classifyPathMap)
|
|
|
+ page := paging.GetPaging(currentIndex, pageSize, total)
|
|
|
+
|
|
|
+ resp.List = edbMonitorItems
|
|
|
+ resp.Paging = page
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func EdbMonitorInfoSave(req request.EdbMonitorInfoSaveReq, adminId int) (msg string, err error) {
|
|
|
+ edb, er := data_manage.GetEdbInfoById(req.EdbInfoId)
|
|
|
+ if er != nil {
|
|
|
+ if er.Error() == utils.ErrNoRow() {
|
|
|
+ msg = "指标不存在,请刷新重试"
|
|
|
+ err = er
|
|
|
+ return
|
|
|
+ }
|
|
|
+ msg = "添加指标预警失败"
|
|
|
+ err = er
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var edbMonitorInfo *edbmonitor.EdbMonitorInfo
|
|
|
+ if req.EdbMonitorId > 0 {
|
|
|
+ edbMonitorInfo, er = edbmonitor.GetEdbMonitorInfoById(req.EdbMonitorId)
|
|
|
+ if er != nil {
|
|
|
+ if er.Error() == utils.ErrNoRow() {
|
|
|
+ msg = "指标预警不存在,请刷新重试"
|
|
|
+ err = er
|
|
|
+ return
|
|
|
+ }
|
|
|
+ msg = "编辑指标预警失败"
|
|
|
+ err = fmt.Errorf("GetEdbMonitorInfoById err:%w", er)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ 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"}...)
|
|
|
+ edbMonitorInfo.EdbInfoId = req.EdbInfoId
|
|
|
+ edbMonitorInfo.EdbInfoType = edb.EdbInfoType
|
|
|
+ edbMonitorInfo.EdbCode = edb.EdbCode
|
|
|
+ edbMonitorInfo.Source = edb.Source
|
|
|
+ edbMonitorInfo.SubSource = edb.SubSource
|
|
|
+ edbMonitorInfo.EdbLatestDate = edb.LatestDate
|
|
|
+ edbMonitorInfo.EdbLatestValue = edb.LatestValue
|
|
|
+ }
|
|
|
+ if edbMonitorInfo.EdbMonitorName != req.EdbMonitorName {
|
|
|
+ updateCols = append(updateCols, "edb_monitor_name")
|
|
|
+ edbMonitorInfo.EdbMonitorName = req.EdbMonitorName
|
|
|
+ }
|
|
|
+ if edbMonitorInfo.EdbMonitorClassifyId != req.ClassifyId {
|
|
|
+ updateCols = append(updateCols, "edb_monitor_classify_id")
|
|
|
+ edbMonitorInfo.EdbMonitorClassifyId = req.ClassifyId
|
|
|
+ }
|
|
|
+ if edbMonitorInfo.MonitorType != req.MonitorType {
|
|
|
+ updateCols = append(updateCols, "monitor_type")
|
|
|
+ edbMonitorInfo.MonitorType = req.MonitorType
|
|
|
+ }
|
|
|
+ monitorData, _ := strconv.ParseFloat(req.MonitorData, 64)
|
|
|
+ if edbMonitorInfo.MonitorData != monitorData {
|
|
|
+ updateCols = append(updateCols, "monitor_data")
|
|
|
+ edbMonitorInfo.MonitorData = monitorData
|
|
|
+ }
|
|
|
+ if edbMonitorInfo.MonitorLevel != req.MonitorLevel {
|
|
|
+ updateCols = append(updateCols, "monitor_level")
|
|
|
+ edbMonitorInfo.MonitorLevel = req.MonitorLevel
|
|
|
+ }
|
|
|
+ if len(updateCols) > 0 {
|
|
|
+ updateCols = append(updateCols, "modify_time")
|
|
|
+ edbMonitorInfo.ModifyTime = time.Now()
|
|
|
+ er := edbMonitorInfo.Update(updateCols)
|
|
|
+ if er != nil {
|
|
|
+ msg = "编辑指标预警失败"
|
|
|
+ err = fmt.Errorf("UpdateEdbMonitorInfoById err:%w", er)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ edbMonitorInfo = new(edbmonitor.EdbMonitorInfo)
|
|
|
+ edbMonitorInfo.EdbMonitorClassifyId = req.ClassifyId
|
|
|
+ edbMonitorInfo.EdbMonitorName = req.EdbMonitorName
|
|
|
+ edbMonitorInfo.EdbInfoId = req.EdbInfoId
|
|
|
+ edbMonitorInfo.EdbInfoType = edb.EdbInfoType
|
|
|
+ edbMonitorInfo.EdbCode = edb.EdbCode
|
|
|
+ edbMonitorInfo.Source = edb.Source
|
|
|
+ edbMonitorInfo.SubSource = edb.SubSource
|
|
|
+ edbMonitorInfo.EdbLatestDate = edb.LatestDate
|
|
|
+ edbMonitorInfo.EdbLatestValue = edb.LatestValue
|
|
|
+ edbMonitorInfo.MonitorType = req.MonitorType
|
|
|
+ monitorData, _ := strconv.ParseFloat(req.MonitorData, 64)
|
|
|
+ edbMonitorInfo.MonitorData = monitorData
|
|
|
+ edbMonitorInfo.MonitorLevel = req.MonitorLevel
|
|
|
+ edbMonitorInfo.CreateUserId = adminId
|
|
|
+ edbMonitorInfo.CreateTime = time.Now()
|
|
|
+ edbMonitorInfo.ModifyTime = time.Now()
|
|
|
+
|
|
|
+ insertId, er := edbMonitorInfo.Insert()
|
|
|
+ if er != nil {
|
|
|
+ msg = "添加指标预警失败"
|
|
|
+ err = fmt.Errorf("insert err:%w", er)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ edbMonitorInfo.EdbMonitorId = int(insertId)
|
|
|
+ }
|
|
|
+ err = ModifyEdbMonitorState(edbMonitorInfo, edb.EdbCode, edb.Source, edb.SubSource)
|
|
|
+ if err != nil {
|
|
|
+ msg = "更新指标预警失败"
|
|
|
+ err = fmt.Errorf("ModifyEdbMonitorState err:%w", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func ModifyEdbMonitorState(edbMonitorInfo *edbmonitor.EdbMonitorInfo, edbCode string, source, subSource int) (err error) {
|
|
|
+ cond := ` AND edb_code = ? `
|
|
|
+ pars := []interface{}{edbCode}
|
|
|
+ latestTwoData, er := data_manage.GetEdbDataListByCondition(cond, pars, source, subSource, 0, 2)
|
|
|
+ if er != nil {
|
|
|
+ err = fmt.Errorf("GetEdbDataListByCondition err:%w", er)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ triggerState := cmpEdbMonitorState(latestTwoData, edbMonitorInfo.MonitorType, edbMonitorInfo.MonitorData)
|
|
|
+ var updateCols []string
|
|
|
+ if edbMonitorInfo.State != EDB_MONITOR_STATE_TRIGGER_SUCCESS {
|
|
|
+ edbMonitorInfo.State = triggerState
|
|
|
+ updateCols = append(updateCols, "state")
|
|
|
+ } else {
|
|
|
+ edbMonitorInfo.EdbTriggerDate = latestTwoData[0].DataTime
|
|
|
+ edbMonitorInfo.MonitorTriggerTime = time.Now()
|
|
|
+ updateCols = append(updateCols, []string{"edb_trigger_date", "monitor_trigger_time"}...)
|
|
|
+ }
|
|
|
+ err = edbMonitorInfo.Update(updateCols)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func cmpEdbMonitorState(twoData []*data_manage.EdbData, monitorType int, monitorData float64) int {
|
|
|
+ if len(twoData) < 2 {
|
|
|
+ return EDB_MONITOR_STATE_NO_TRIGGER
|
|
|
+ }
|
|
|
+ switch monitorType {
|
|
|
+ case EDB_MONITOR_TYPE_UP:
|
|
|
+ if twoData[0].Value >= monitorData && twoData[1].Value < monitorData {
|
|
|
+ return EDB_MONITOR_STATE_TRIGGER_SUCCESS
|
|
|
+ } else {
|
|
|
+ return EDB_MONITOR_STATE_NO_TRIGGER
|
|
|
+ }
|
|
|
+ case EDB_MONITOR_TYPE_DOWN:
|
|
|
+ if twoData[0].Value <= monitorData && twoData[1].Value > monitorData {
|
|
|
+ return EDB_MONITOR_STATE_TRIGGER_SUCCESS
|
|
|
+ } else {
|
|
|
+ return EDB_MONITOR_STATE_NO_TRIGGER
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ return EDB_MONITOR_STATE_NO_TRIGGER
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func EdbMonitorInfoDelete(req request.EdbMonitorInfoDeleteReq) (msg string, err error) {
|
|
|
+ err = edbmonitor.DeleteEdbMonitorInfoById(req.EdbMonitorId)
|
|
|
+ if err != nil {
|
|
|
+ msg = "删除失败"
|
|
|
+ err = fmt.Errorf("DeleteEdbMonitorInfoById err:%w", err)
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func toEdbMonitorInfoItems(edbmonitor []*edbmonitor.EdbMonitorInfo, userMap map[int]string, classifyPathMap map[int]string) []*response.EdbMonitorInfoItem {
|
|
|
+ res := make([]*response.EdbMonitorInfoItem, len(edbmonitor))
|
|
|
+ for _, v := range edbmonitor {
|
|
|
+ tmp := new(response.EdbMonitorInfoItem)
|
|
|
+ tmp.EdbMonitorId = v.EdbMonitorId
|
|
|
+ tmp.EdbMonitorName = v.EdbMonitorName
|
|
|
+ tmp.EdbMonitorClassifyId = v.EdbMonitorClassifyId
|
|
|
+ tmp.EdbMonitorClassifyName = classifyPathMap[v.EdbMonitorClassifyId]
|
|
|
+ tmp.EdbInfoId = v.EdbInfoId
|
|
|
+ tmp.EdbInfoType = v.EdbInfoType
|
|
|
+ tmp.EdbCode = v.EdbCode
|
|
|
+ tmp.Source = v.Source
|
|
|
+ tmp.SubSource = v.SubSource
|
|
|
+ tmp.EdbLatestDate = v.EdbLatestDate
|
|
|
+ tmp.EdbLatestValue = v.EdbLatestValue
|
|
|
+ tmp.MonitorType = v.MonitorType
|
|
|
+ tmp.MonitorData = v.MonitorData
|
|
|
+ tmp.MonitorLevel = v.MonitorLevel
|
|
|
+ tmp.State = v.State
|
|
|
+ tmp.EdbTriggerDate = v.EdbTriggerDate
|
|
|
+ tmp.MonitorTriggerTime = utils.TimeTransferString(utils.FormatDateTime, v.MonitorTriggerTime)
|
|
|
+ tmp.CreateUserId = v.CreateUserId
|
|
|
+ tmp.CreateUserName = userMap[v.CreateUserId]
|
|
|
+ tmp.CreateTime = utils.TimeTransferString(utils.FormatDateTime, v.CreateTime)
|
|
|
+ tmp.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, v.ModifyTime)
|
|
|
+ res = append(res, tmp)
|
|
|
+ }
|
|
|
+ return res
|
|
|
+}
|