From ffe3dd6bcaee6dd875e7ed42351170adb75b946e Mon Sep 17 00:00:00 2001 From: 710leo <710leo@gmail.com> Date: Fri, 30 Jul 2021 13:30:50 +0800 Subject: [PATCH] refactor: alert rule name duplicate check --- config/i18n.go | 1 + http/router_alert_rule.go | 9 +++++++++ models/alert_rule.go | 9 +++++++++ 3 files changed, 19 insertions(+) diff --git a/config/i18n.go b/config/i18n.go index 4a9582b1..a08ca3ca 100644 --- a/config/i18n.go +++ b/config/i18n.go @@ -46,6 +46,7 @@ var ( "No such alert rule": "告警规则不存在", "No such alert rule group": "告警规则分组不存在", "No such alert event": "告警事件不存在", + "Alert rule %s already exists": "告警规则(%s)已存在", "No such collect rule": "采集规则不存在", "Decoded metric description empty": "导入的指标释义列表为空", "User disabled": "用户已被禁用", diff --git a/http/router_alert_rule.go b/http/router_alert_rule.go index 4b691f27..f9ea810c 100644 --- a/http/router_alert_rule.go +++ b/http/router_alert_rule.go @@ -89,6 +89,15 @@ func alertRulePut(c *gin.Context) { arg := AlertRuleGroup(ar.GroupId) alertRuleWritePermCheck(arg, me) + if ar.Name != f.Name { + num, err := models.AlertRuleCount("group_id=? and name=? and id<>?", ar.GroupId, f.Name, ar.Id) + dangerous(err) + + if num > 0 { + bomb(200, "Alert rule %s already exists", f.Name) + } + } + ar.Name = f.Name ar.Note = f.Note ar.Type = f.Type diff --git a/models/alert_rule.go b/models/alert_rule.go index 0b95d5eb..5ce113e9 100644 --- a/models/alert_rule.go +++ b/models/alert_rule.go @@ -262,6 +262,15 @@ func (ar *AlertRule) Add() error { return err } + num, err := AlertRuleCount("group_id=? and name=?", ar.GroupId, ar.Name) + if err != nil { + return err + } + + if num > 0 { + return _e("Alert rule %s already exists", ar.Name) + } + now := time.Now().Unix() ar.CreateAt = now ar.UpdateAt = now