diff --git a/src/service/alert_rules.go b/src/service/alert_rules.go index 8f6b77157f4363b6e3d62ce6fc33bb3643fcde3b..393417b836d71331d03cdf785ec17014b42e1044 100644 --- a/src/service/alert_rules.go +++ b/src/service/alert_rules.go @@ -94,17 +94,7 @@ func (a *AlertRulesSvc) Add(req request.AddAlertRules) (err error) { } } - var item response.AlertRulesItem - item, err = a.GetDataById(request.DetailAlertRules{Id: data.Id}) // 查询完整数据 - prSvc := PrometheusRuleSvc{User: a.User} // 插入数据到 prometheus.yml --> rule_files - createErr := prSvc.Create(item) - if createErr != nil { - _, err = db.Delete(&data) - if err != nil { - return err - } - return createErr - } + err = a.CreatePrometheusRule(req.IsEnabled, data.Id, db) return nil } @@ -185,28 +175,40 @@ func (a *AlertRulesSvc) Update(req request.UpdateAlertRules) (err error) { } } - var item response.AlertRulesItem - item, err = a.GetDataById(request.DetailAlertRules{Id: data.Id}) - prSvc := PrometheusRuleSvc{User: a.User} + err = a.CreatePrometheusRule(req.IsEnabled, data.Id, db) + return nil +} - { - // 删除PrometheusRule - deleteErr := prSvc.Delete(item) - if deleteErr != nil { - return deleteErr +func (a *AlertRulesSvc) CreatePrometheusRule(isEnabled int, id string, db *xorm.Engine) (err error) { + if isEnabled == 1 { + var item response.AlertRulesItem + item, err = a.GetDataById(request.DetailAlertRules{Id: id}) // 查询完整数据 + if err != nil { + return + } + prSvc := PrometheusRuleSvc{User: a.User} + _, exist, _ := prSvc.Get(item) + if exist { + deleteErr := prSvc.Delete(item) + if deleteErr != nil { + _, err = db.ID(id).Delete(&entity.AlertRules{}) + if err != nil { + return + } + return deleteErr + } } - // 再次创建PrometheusRule + createErr := prSvc.Create(item) if createErr != nil { - _, err = db.Delete(&data) + _, err = db.ID(id).Delete(&entity.AlertRules{}) if err != nil { - return err + return } return createErr } } - - return nil + return } func (a *AlertRulesSvc) UpdateIsEnabled(req request.UpdateIsEnabledAlertRules) (err error) { @@ -228,7 +230,6 @@ func (a *AlertRulesSvc) UpdateIsEnabled(req request.UpdateIsEnabledAlertRules) ( if err != nil { return } - if req.IsEnabled == 2 { if item.IsEnabled == 1 { prSvc := PrometheusRuleSvc{User: a.User} diff --git a/src/service/k8s/prometheusrule_test.go b/src/service/k8s/prometheusrule_test.go index fd06db24156a39743167fb98097c760bda2eafe9..89dd4dc00b8a78583ef423dea41b56d5cea73e94 100644 --- a/src/service/k8s/prometheusrule_test.go +++ b/src/service/k8s/prometheusrule_test.go @@ -24,7 +24,7 @@ func init() { svc = PrometheusRule{Header: header} pr = monitoringv1.PrometheusRule{} - alertRulesId := "83343ef6-4a99-47bd-abb4-bcff52feb2ec" // 预警规则id + alertRulesId := "45a50875-20fd-4d93-a7d5-c6790186ad97" // 预警规则id prometheusRuleName := GetPrometheusRuleName(alertRulesId) pr.Name = prometheusRuleName pr.Namespace = "beagle-monitoring" diff --git a/src/service/prometheusrule.go b/src/service/prometheusrule.go index b4f15beb4afeb26f21f0b676d9105672b950c8ad..7123b24cd756c88bafd0bf5589920b50976a02c5 100644 --- a/src/service/prometheusrule.go +++ b/src/service/prometheusrule.go @@ -90,7 +90,7 @@ func (p *PrometheusRuleSvc) Create(data response.AlertRulesItem) (err error) { return } -func (p *PrometheusRuleSvc) Get(data response.AlertRulesItem) (obj *monitoringv1.PrometheusRule, err error) { +func (p *PrometheusRuleSvc) Get(data response.AlertRulesItem) (obj *monitoringv1.PrometheusRule, exist bool, err error) { prometheusRuleName := k8s.GetPrometheusRuleName(data.Id) pr := monitoringv1.PrometheusRule{ ObjectMeta: v1.ObjectMeta{ @@ -103,6 +103,9 @@ func (p *PrometheusRuleSvc) Get(data response.AlertRulesItem) (obj *monitoringv1 prSvc := k8s.PrometheusRule{Header: header} conf.Logger.Info("pr", zap.Any("pr", pr)) obj, err = prSvc.Get(pr.Namespace, pr.Name) + if obj != nil && err == nil { + exist = true + } return }