diff --git a/server/dao/alert.go b/server/dao/alert.go index 2289026b866c97aa7ba0b0d26dcf534474a9cf02..0b97595618320101a892f398cf0f9b9873937a57 100644 --- a/server/dao/alert.go +++ b/server/dao/alert.go @@ -38,6 +38,152 @@ func QueryAlerts() ([]model.Alert, int, error) { return alert, int(total), nil } +func SearchAlertsFiring(alertName, ip, level, handleState string, alertStart, alertEnd model.AlertTime) ([]model.Alert, int64, error) { + var alert []model.Alert + dm := db.MySQL.Order("id desc").Where("alert_end_time = ''") + dm, err := queryFromDB(dm, alertName, ip, level, handleState, alertStart, alertEnd) + if err != nil { + logger.Error("时间戳转换失败:%v", err.Error()) + } + if err := dm.Find(&alert).Error; err != nil { + return nil, 0, nil + } + + var total int64 + d := db.MySQL.Where("alert_end_time = ''") + d, err = queryFromDB(d, alertName, ip, level, handleState, alertStart, alertEnd) + if err != nil { + logger.Error("时间戳转换失败:%v", err.Error()) + } + if err := d.Model(&alert).Count(&total).Error; err != nil { + return nil, 0, err + } + return alert, total, nil +} + +func SearchAlertsWaitProcess(alertName, ip, level, handleState string, alertStart, alertEnd model.AlertTime) ([]model.Alert, int64, error) { + var alert []model.Alert + + dm := db.MySQL.Order("id desc").Where("alert_end_time != '' AND handle_state = '已确认'") + dm, err := queryFromDB(dm, alertName, ip, level, handleState, alertStart, alertEnd) + if err != nil { + logger.Error("时间戳转换失败:%v", err.Error()) + } + + subQuery := db.MySQL.Where("alert_end_time != '' AND handle_state = '待确认'") + if len(alertName) > 0 { + subQuery = subQuery.Where("alert_name LIKE ? ", "%"+alertName+"%") + } + if len(ip) > 0 { + subQuery = subQuery.Where("ip LIKE ? ", "%"+ip+"%") + } + if len(level) > 0 { + subQuery = subQuery.Where("alert_level = ? ", level) + } + if len(handleState) > 0 { + subQuery = subQuery.Where("handle_state = ? ", handleState) + } + + if len(alertStart.Start) != 0 && len(alertStart.End) != 0 { + start, err := utils.UnixTimeToShanghai(alertStart.Start) + if err != nil { + return nil, 0, err + } + end, err := utils.UnixTimeToShanghai(alertStart.End) + if err != nil { + return nil, 0, err + } + subQuery = subQuery.Where("to_timestamp(alert_time, 'YYYY-MM-DD HH24:MI:SS') >= ? AND to_timestamp(alert_time, 'YYYY-MM-DD HH24:MI:SS') <= ?", start, end) + } + if len(alertEnd.Start) != 0 && len(alertEnd.End) != 0 { + start, err := utils.UnixTimeToShanghai(alertEnd.Start) + if err != nil { + return nil, 0, err + } + end, err := utils.UnixTimeToShanghai(alertEnd.End) + if err != nil { + return nil, 0, err + } + subQuery = subQuery.Where("to_timestamp(alert_end_time, 'YYYY-MM-DD HH24:MI:SS') >= ? AND to_timestamp(alert_end_time, 'YYYY-MM-DD HH24:MI:SS') <= ?", start, end) + } + dm = dm.Or(subQuery) + if err := dm.Find(&alert).Error; err != nil { + return nil, 0, nil + } + + var total int64 + d := db.MySQL.Where("alert_end_time != '' AND handle_state = '已确认'") + d, err = queryFromDB(d, alertName, ip, level, handleState, alertStart, alertEnd) + if err != nil { + logger.Error("时间戳转换失败:%v", err.Error()) + } + + sub := db.MySQL.Where("alert_end_time != '' AND handle_state = '待确认'") + if len(alertName) > 0 { + sub = sub.Where("alert_name LIKE ? ", "%"+alertName+"%") + } + if len(ip) > 0 { + sub = sub.Where("ip LIKE ? ", "%"+ip+"%") + } + if len(level) > 0 { + sub = sub.Where("alert_level = ? ", level) + } + if len(handleState) > 0 { + sub = sub.Where("handle_state = ? ", handleState) + } + if len(alertStart.Start) != 0 && len(alertStart.End) != 0 { + start, err := utils.UnixTimeToShanghai(alertStart.Start) + if err != nil { + return nil, 0, err + } + end, err := utils.UnixTimeToShanghai(alertStart.End) + if err != nil { + return nil, 0, err + } + sub = sub.Where("to_timestamp(alert_time, 'YYYY-MM-DD HH24:MI:SS') >= ? AND to_timestamp(alert_time, 'YYYY-MM-DD HH24:MI:SS') <= ?", start, end) + } + if len(alertEnd.Start) != 0 && len(alertEnd.End) != 0 { + start, err := utils.UnixTimeToShanghai(alertEnd.Start) + if err != nil { + return nil, 0, err + } + end, err := utils.UnixTimeToShanghai(alertEnd.End) + if err != nil { + return nil, 0, err + } + sub = sub.Where("to_timestamp(alert_end_time, 'YYYY-MM-DD HH24:MI:SS') >= ? AND to_timestamp(alert_end_time, 'YYYY-MM-DD HH24:MI:SS') <= ?", start, end) + } + d = d.Or(sub) + if err := d.Model(&alert).Count(&total).Error; err != nil { + return nil, 0, err + } + + return alert, total, nil +} + +func SearchAlertsCompleted(alertName, ip, level, handleState string, alertStart, alertEnd model.AlertTime) ([]model.Alert, int64, error) { + var alert []model.Alert + dm := db.MySQL.Order("id desc").Where("handle_state = '已完成'") + dm, err := queryFromDB(dm, alertName, ip, level, handleState, alertStart, alertEnd) + if err != nil { + logger.Error("时间戳转换失败:%v", err.Error()) + } + if err := dm.Find(&alert).Error; err != nil { + return nil, 0, nil + } + + var total int64 + d := db.MySQL.Where("handle_state = '已完成'") + d, err = queryFromDB(d, alertName, ip, level, handleState, alertStart, alertEnd) + if err != nil { + logger.Error("时间戳转换失败:%v", err.Error()) + } + if err := d.Model(&alert).Count(&total).Error; err != nil { + return nil, 0, err + } + return alert, total, nil +} + func SearchAlerts(alertName, ip, level, handleState string, alertStart, alertEnd model.AlertTime) ([]model.Alert, int64, error) { var alert []model.Alert dm := db.MySQL.Order("id desc")