feat: 告警分组统计数量接口
This commit is contained in:
@@ -43,7 +43,7 @@ type AlarmController struct {
|
||||
// @Param pvFlag query string false "PV Flag" Enums(PNF,VNF)
|
||||
// @Param alarmCode query string false "alarm status code"
|
||||
// @Param alarmType query string false "Alarm type Communication alarms=1, Equipment alarms=2, Processing faults=3, Environmental alarms=4, Quality of service alarms=5" Enums(1,2,3,4,5)
|
||||
// @Param alarmStatus query string false "Alarm status 0:clear, 1:active" Enums(0,1)
|
||||
// @Param alarmStatus query string false "Alarm status Clear Active" Enums(0,1)
|
||||
// @Param origSeverity query string false "Alarm Type 1: Critical, 2: Major, 3: Minor, 4: Warning" Enums(1,2,3,4)
|
||||
// @Param sortField query string false "Sort fields, fill in result fields" default(event_time)
|
||||
// @Param sortOrder query string false "Sort by ascending or descending order, asc desc" default(asc)
|
||||
@@ -139,6 +139,58 @@ func (s AlarmController) Ack(c *gin.Context) {
|
||||
c.JSON(200, resp.OkData(rows))
|
||||
}
|
||||
|
||||
// 告警级别数量
|
||||
//
|
||||
// GET /count/severity
|
||||
func (s AlarmController) CountSeverity(c *gin.Context) {
|
||||
var query struct {
|
||||
AlarmStatus string `json:"alarmStatus" form:"alarmStatus" binding:"required,oneof=Clear Active"` // 告警状态
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
data := s.alarmService.CountSeverity(query.AlarmStatus)
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
// 告警类别数量
|
||||
//
|
||||
// GET /count/type
|
||||
func (s AlarmController) CountType(c *gin.Context) {
|
||||
var query struct {
|
||||
AlarmStatus string `json:"alarmStatus" form:"alarmStatus" binding:"required,oneof=Clear Active"` // 告警状态
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
data := s.alarmService.CountType(query.AlarmStatus)
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
// 告警状态前几排名
|
||||
//
|
||||
// GET /count/ne
|
||||
func (s AlarmController) CountNe(c *gin.Context) {
|
||||
var query struct {
|
||||
AlarmStatus string `json:"alarmStatus" form:"alarmStatus" binding:"required,oneof=Clear Active"` // 告警状态
|
||||
Top int `json:"top" form:"top" binding:"required"` // 前几
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
data := s.alarmService.CountNe(query.AlarmStatus, query.Top)
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
// 告警列表导出
|
||||
//
|
||||
// GET /export
|
||||
|
||||
@@ -59,6 +59,18 @@ func Setup(router *gin.Engine) {
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.alarm", collectlogs.BUSINESS_TYPE_EXPORT)),
|
||||
controller.NewAlarm.Export,
|
||||
)
|
||||
alarmGroup.GET("/count/type",
|
||||
middleware.AuthorizeUser(nil),
|
||||
controller.NewAlarm.CountType,
|
||||
)
|
||||
alarmGroup.GET("/count/severity",
|
||||
middleware.AuthorizeUser(nil),
|
||||
controller.NewAlarm.CountSeverity,
|
||||
)
|
||||
alarmGroup.GET("/count/ne",
|
||||
middleware.AuthorizeUser(nil),
|
||||
controller.NewAlarm.CountNe,
|
||||
)
|
||||
}
|
||||
|
||||
// 告警日志数据信息
|
||||
|
||||
@@ -192,3 +192,21 @@ func (r Alarm) SelectAlarmSeqLast(neType, neId string) int64 {
|
||||
}
|
||||
return alarmSeq
|
||||
}
|
||||
|
||||
// GroupTotal 分组统计
|
||||
func (r Alarm) GroupTotal(alarmStatus string, group string, limit int) []map[string]any {
|
||||
tx := db.DB("").Model(&model.Alarm{})
|
||||
tx = tx.Select("count(*) as total", group)
|
||||
tx = tx.Where("alarm_status=?", alarmStatus)
|
||||
tx = tx.Group(group).Order("total DESC")
|
||||
// 查询数据
|
||||
var rows []map[string]any = make([]map[string]any, 0)
|
||||
if limit > 0 {
|
||||
tx = tx.Limit(limit)
|
||||
}
|
||||
if err := tx.Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return rows
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/tsmask/go-oam"
|
||||
"github.com/tsmask/go-oam/src/framework/utils/parse"
|
||||
|
||||
"be.ems/src/framework/constants"
|
||||
"be.ems/src/framework/i18n"
|
||||
@@ -115,13 +116,76 @@ func (r Alarm) AckByIds(ids []int64, ackUser, ackState string) (int64, error) {
|
||||
return 0, fmt.Errorf("ack fail")
|
||||
}
|
||||
|
||||
// InsertAndForword 新增信息并转发通知
|
||||
func (s Alarm) InsertAndForword(param model.Alarm) int64 {
|
||||
rows := s.alarmRepository.Insert(param)
|
||||
if rows > 0 {
|
||||
// 转发通知 TODO
|
||||
// CountType 告警类别数量
|
||||
func (s Alarm) CountType(alarmStatus string) []map[string]any {
|
||||
data := []map[string]any{}
|
||||
alarmTypeArr := []string{
|
||||
oam.ALARM_TYPE_COMMUNICATION_ALARM,
|
||||
oam.ALARM_TYPE_EQUIPMENT_ALARM,
|
||||
oam.ALARM_TYPE_PROCESSING_FAILURE,
|
||||
oam.ALARM_TYPE_ENVIRONMENTAL_ALARM,
|
||||
oam.ALARM_TYPE_QUALITY_OF_SERVICE_ALARM,
|
||||
}
|
||||
return rows
|
||||
for _, v := range alarmTypeArr {
|
||||
data = append(data, map[string]any{
|
||||
"alarmType": v,
|
||||
"total": 0,
|
||||
})
|
||||
}
|
||||
|
||||
// 告警类别数量
|
||||
rows := s.alarmRepository.GroupTotal(alarmStatus, "alarm_type", -1)
|
||||
for _, item := range data {
|
||||
for _, v := range rows {
|
||||
str := fmt.Sprint(v["alarm_type"])
|
||||
if str == item["alarmType"] {
|
||||
item["alarmType"] = str
|
||||
item["total"] = parse.Number(v["total"])
|
||||
}
|
||||
}
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
// CountSeverity 告警级别数量
|
||||
func (s Alarm) CountSeverity(alarmStatus string) []map[string]any {
|
||||
data := []map[string]any{}
|
||||
alarmTypeArr := []string{
|
||||
oam.ALARM_SEVERITY_CRITICAL,
|
||||
oam.ALARM_SEVERITY_MAJOR,
|
||||
oam.ALARM_SEVERITY_MINOR,
|
||||
oam.ALARM_SEVERITY_WARNING,
|
||||
}
|
||||
for _, v := range alarmTypeArr {
|
||||
data = append(data, map[string]any{
|
||||
"severity": v,
|
||||
"total": 0,
|
||||
})
|
||||
}
|
||||
|
||||
// 数量
|
||||
rows := s.alarmRepository.GroupTotal(alarmStatus, "perceived_severity", -1)
|
||||
for _, item := range data {
|
||||
for _, v := range rows {
|
||||
str := fmt.Sprint(v["perceived_severity"])
|
||||
if str == item["severity"] {
|
||||
item["severity"] = str
|
||||
item["total"] = parse.Number(v["total"])
|
||||
}
|
||||
}
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
// CountNe 告警状态前几排名
|
||||
func (s Alarm) CountNe(alarmStatus string, top int) []map[string]any {
|
||||
data := s.alarmRepository.GroupTotal(alarmStatus, "ne_type", top)
|
||||
for _, v := range data {
|
||||
v["neType"] = fmt.Sprint(v["ne_type"])
|
||||
v["total"] = parse.Number(v["total"])
|
||||
delete(v, "ne_type")
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
// ExportXlsx 导出数据到 xlsx 文件
|
||||
|
||||
Reference in New Issue
Block a user