add rule batch delete api

This commit is contained in:
liugq 2023-08-18 17:51:18 +08:00
parent 9e6a1019fe
commit 2a1df9743e
2 changed files with 67 additions and 1 deletions

View File

@ -19,6 +19,7 @@ func (alert *AlertAPI) Init() {
api.HandleAPIMethod(api.POST, "/alerting/rule", alert.RequirePermission(alert.createRule, enum.PermissionAlertRuleWrite))
api.HandleAPIMethod(api.POST, "/alerting/rule/test", alert.RequireLogin(alert.sendTestMessage))
api.HandleAPIMethod(api.DELETE, "/alerting/rule/:rule_id", alert.RequirePermission(alert.deleteRule, enum.PermissionAlertRuleWrite))
api.HandleAPIMethod(api.DELETE, "/alerting/rule", alert.RequirePermission(alert.batchDeleteRule, enum.PermissionAlertRuleWrite))
api.HandleAPIMethod(api.PUT, "/alerting/rule/:rule_id", alert.RequirePermission(alert.updateRule, enum.PermissionAlertRuleWrite))
api.HandleAPIMethod(api.GET, "/alerting/rule/_search", alert.RequirePermission(alert.searchRule, enum.PermissionAlertRuleRead))
api.HandleAPIMethod(api.GET, "/alerting/stats", alert.RequirePermission(alert.getAlertStats, enum.PermissionAlertHistoryRead))

View File

@ -418,7 +418,9 @@ func (alertAPI *AlertAPI) deleteRule(w http.ResponseWriter, req *http.Request, p
delDsl := util.MapStr{
"query": util.MapStr{
"term": util.MapStr{
"rule_id": id,
"rule_id": util.MapStr{
"value": id,
},
},
},
}
@ -437,6 +439,69 @@ func (alertAPI *AlertAPI) deleteRule(w http.ResponseWriter, req *http.Request, p
}, 200)
}
func (alertAPI *AlertAPI) batchDeleteRule(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
var ruleIDs = []string{}
err := alertAPI.DecodeJSON(req, &ruleIDs)
if err != nil {
log.Error(err)
alertAPI.WriteError(w, err.Error(), http.StatusInternalServerError)
return
}
if len(ruleIDs) == 0 {
alertAPI.WriteJSON(w, util.MapStr{}, http.StatusOK)
return
}
rules, err := getRulesByID(ruleIDs)
if err != nil {
log.Error(err)
alertAPI.WriteError(w, err.Error(), http.StatusInternalServerError)
return
}
var newIDs []string
for _, rule := range rules {
saveAlertActivity("alerting_rule_change", "delete", util.MapStr{
"cluster_id": rule.Resource.ID,
"rule_id": rule.ID,
"cluster_name": rule.Resource.Name,
},nil, &rule)
task.DeleteTask(rule.ID)
clearKV(rule.ID)
newIDs = append(newIDs, rule.ID)
}
if len(newIDs) > 0 {
q := util.MapStr{
"query": util.MapStr{
"terms": util.MapStr{
"id": newIDs,
},
},
}
err = orm.DeleteBy(alerting.Rule{}, util.MustToJSONBytes(q))
if err != nil {
log.Error(err)
alertAPI.WriteError(w, err.Error(), http.StatusInternalServerError)
return
}
delDsl := util.MapStr{
"query": util.MapStr{
"terms": util.MapStr{
"rule_id": newIDs,
},
},
}
err = orm.DeleteBy(alerting.AlertMessage{}, util.MustToJSONBytes(delDsl))
if err != nil {
log.Error(err)
}
err = orm.DeleteBy(alerting.Alert{}, util.MustToJSONBytes(delDsl))
if err != nil {
log.Error(err)
}
}
alertAPI.WriteAckOKJSON(w)
}
func (alertAPI *AlertAPI) searchRule(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
var (
keyword = alertAPI.GetParameterOrDefault(req, "keyword", "")