From d622ac702d2f935b1aa26111f132a5455c1f9715 Mon Sep 17 00:00:00 2001 From: zhanghan2021 Date: Mon, 28 Oct 2024 15:15:03 +0800 Subject: [PATCH] get prometheus alert rule metrics and alert level --- server/dao/rule.go | 5 +++++ server/httphandler/rulehandler.go | 10 ++++++++++ server/router/router.go | 1 + server/service/ruleservice.go | 28 ++++++++++++++++++++++++++++ 4 files changed, 44 insertions(+) diff --git a/server/dao/rule.go b/server/dao/rule.go index df3dd7b..1934a12 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 f66d92d..4f8fc6c 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 8fef196..02f81a6 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 2e1e3b4..1101be6 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 +} -- Gitee