From 8516c66269a47384df1b4cf5de50366e4a7d7f96 Mon Sep 17 00:00:00 2001 From: zhanghan2021 Date: Fri, 25 Oct 2024 17:31:20 +0800 Subject: [PATCH] add func: update alert rule handler --- server/httphandler/rulehandler.go | 19 ++++++++++++++ server/router/router.go | 1 + server/service/ruleservice.go | 43 ++++++++++++++++++++++++++++--- 3 files changed, 59 insertions(+), 4 deletions(-) diff --git a/server/httphandler/rulehandler.go b/server/httphandler/rulehandler.go index 2d20231..f66d92d 100644 --- a/server/httphandler/rulehandler.go +++ b/server/httphandler/rulehandler.go @@ -35,6 +35,25 @@ func DeleteRuleList(c *gin.Context) { } response.Success(c, nil, "删除成功") } + +func UpdateRule(c *gin.Context) { + + var a model.Rule + if err := c.Bind(&a); err != nil { + response.Fail(c, nil, err.Error()) + return + } + + if len(a.AlertTargets) == 0 { + response.Fail(c, nil, "请选择监控机器") + return + } + if err := service.UpdateRule(&a); err != nil { + response.Fail(c, nil, err.Error()) + return + } + response.Success(c, nil, "已更新告警配置") +} func QueryRules(c *gin.Context) { query := &response.PaginationQ{} diff --git a/server/router/router.go b/server/router/router.go index d12c20c..8fef196 100644 --- a/server/router/router.go +++ b/server/router/router.go @@ -67,6 +67,7 @@ func RegisterAPIs(router *gin.Engine) { ruleManager.POST("ruleAdd", httphandler.AddRuleHandler) ruleManager.GET("ruleQuery", httphandler.QueryRules) ruleManager.GET("ruleDelete", httphandler.DeleteRuleList) + ruleManager.POST("ruleUpdate", httphandler.UpdateRule) } } diff --git a/server/service/ruleservice.go b/server/service/ruleservice.go index 5577bcb..2e1e3b4 100644 --- a/server/service/ruleservice.go +++ b/server/service/ruleservice.go @@ -8,13 +8,13 @@ import ( "github.com/google/uuid" "openeuler.org/PilotGo/prometheus-plugin/dao" "openeuler.org/PilotGo/prometheus-plugin/model" - initprometheus "openeuler.org/PilotGo/prometheus-plugin/service/prometheus" + prometheus "openeuler.org/PilotGo/prometheus-plugin/service/prometheus" ) func AddRule(alert *model.Rule) error { alertLabel := uuid.New().String() - err := initprometheus.TestingUpdateRule(testDataJoinToYaml(alert, alertLabel)) //验证新增配置是否有误 + err := prometheus.TestingUpdateRule(testDataJoinToYaml(alert, alertLabel)) //验证新增配置是否有误 if err != nil { return err } @@ -23,7 +23,7 @@ func AddRule(alert *model.Rule) error { if err != nil { return err } - err = initprometheus.UpdateAlertYml(yamlData) + err = prometheus.UpdateAlertYml(yamlData) if err != nil { return err } @@ -54,7 +54,7 @@ func DeleteRuleList(id string) error { return err } - err = initprometheus.UpdateAlertYml(yamlData) + err = prometheus.UpdateAlertYml(yamlData) if err != nil { return err } @@ -65,6 +65,41 @@ func DeleteRuleList(id string) error { } return nil } + +func UpdateRule(a *model.Rule) error { + err := prometheus.TestingUpdateRule(testDataJoinToYaml(a, a.AlertLabel)) //验证编辑的配置是否有误 + if err != nil { + return err + } + // 更新yaml文件 + yamlData, err := updateRuleDataJoinToYaml(a) + if err != nil { + return err + } + err = prometheus.UpdateAlertYml(yamlData) + if err != nil { + return err + } + + updateAlert := &model.Rule{ + AlertName: a.AlertName, + CustomDesc: a.CustomDesc, + MonitorMetrics: a.MonitorMetrics, + AlarmThreshold: a.AlarmThreshold, + Forsearch: a.Forsearch, + Severity: a.Severity, + AlertTargets: a.AlertTargets, + } + + if err := dao.UpdateRule(a.ID, updateAlert); err != nil { + if strings.Contains(err.Error(), "重复键违反唯一约束") { + return errors.New("请确认该规则是否存在或已做修改") + } else { + return err + } + } + return nil +} func SearchRules(search string, query *response.PaginationQ) ([]*model.Rule, int, error) { var rules []*model.Rule var total int64 -- Gitee