diff --git a/server/dao/rule.go b/server/dao/rule.go index df3dd7bb50ddbc75b759d781ccd7f03f474aa08e..1934a12300156f73fe5f157c3801e91473d567ef 100644 --- a/server/dao/rule.go +++ b/server/dao/rule.go @@ -116,3 +116,8 @@ func QueryRulesNotIncludedId(id string) ([]model.Rule, error) { err := db.MySQL.Order("id desc").Where("id <> ?", id).Preload("AlertTargets").Find(&alerts).Error return alerts, err } +func GetRuleLevel() ([]string, error) { + var levels []string + err := db.MySQL.Model(&model.Rule{}).Distinct("severity").Pluck("severity", &levels).Error + return levels, err +} diff --git a/server/httphandler/rulehandler.go b/server/httphandler/rulehandler.go index f66d92d6e8112aa2bae1da5f193ea622d36f46da..4f8fc6c07358f0052a83474c24b28515eec2383d 100644 --- a/server/httphandler/rulehandler.go +++ b/server/httphandler/rulehandler.go @@ -71,3 +71,13 @@ func QueryRules(c *gin.Context) { } response.DataPagination(c, data, total, query) } +func GetMonitorMetricsAndAlertLevel(c *gin.Context) { + data := &struct { + Metrics []string `json:"metrics"` + RuleLevel []string `json:"ruleLevel"` + }{ + Metrics: []string{"cpu使用率", "内存使用率", "网络流入", "网络流出", "磁盘容量", "服务器宕机", "TCP连接数"}, + RuleLevel: service.GetRuleLevel(), + } + response.Success(c, data, "获取到监控指标和告警级别") +} diff --git a/server/router/router.go b/server/router/router.go index 8fef196159b7199cb430ace4182694361cf772d8..02f81a6ed5896006fc57e5b74912f085f152498a 100644 --- a/server/router/router.go +++ b/server/router/router.go @@ -68,6 +68,7 @@ func RegisterAPIs(router *gin.Engine) { ruleManager.GET("ruleQuery", httphandler.QueryRules) ruleManager.GET("ruleDelete", httphandler.DeleteRuleList) ruleManager.POST("ruleUpdate", httphandler.UpdateRule) + ruleManager.GET("ruleMetrics", httphandler.GetMonitorMetricsAndAlertLevel) } } diff --git a/server/service/ruleservice.go b/server/service/ruleservice.go index 2e1e3b40dc537931d420e471e6bc57042546ef4f..1101be69a556681f57572045214f4d4ac35cc700 100644 --- a/server/service/ruleservice.go +++ b/server/service/ruleservice.go @@ -118,3 +118,31 @@ func SearchRules(search string, query *response.PaginationQ) ([]*model.Rule, int } return rules, int(total), nil } +func GetRuleLevel() []string { + var levels = []string{"紧急", "严重", "中等严重", "警告"} + result, err := dao.GetRuleLevel() + if err != nil { + return levels + } + return removeDuplicates(levels, result) +} +func removeDuplicates(a, b []string) []string { + seen := make(map[string]bool) + result := []string{} + + for _, s := range a { + if !seen[s] { + seen[s] = true + result = append(result, s) + } + } + + for _, s := range b { + if !seen[s] { + seen[s] = true + result = append(result, s) + } + } + + return result +}