소스 검색

Bulk delete alert optimization (#1782)

mmetc 2 년 전
부모
커밋
9b3be5c2e8
1개의 변경된 파일27개의 추가작업 그리고 8개의 파일을 삭제
  1. 27 8
      pkg/database/alerts.go

+ 27 - 8
pkg/database/alerts.go

@@ -832,10 +832,31 @@ func (c *Client) DeleteAlertGraphBatch(alertItems []*ent.Alert) (int, error) {
 		idList = append(idList, alert.ID)
 	}
 
+	_, err := c.Ent.Event.Delete().
+		Where(event.HasOwnerWith(alert.IDIn(idList...))).Exec(c.CTX)
+	if err != nil {
+		c.Log.Warningf("DeleteAlertGraphBatch : %s", err)
+		return 0, errors.Wrapf(DeleteFail, "alert graph delete batch events")
+	}
+
+	_, err = c.Ent.Meta.Delete().
+		Where(meta.HasOwnerWith(alert.IDIn(idList...))).Exec(c.CTX)
+	if err != nil {
+		c.Log.Warningf("DeleteAlertGraphBatch : %s", err)
+		return 0, errors.Wrapf(DeleteFail, "alert graph delete batch meta")
+	}
+
+	_, err = c.Ent.Decision.Delete().
+		Where(decision.HasOwnerWith(alert.IDIn(idList...))).Exec(c.CTX)
+	if err != nil {
+		c.Log.Warningf("DeleteAlertGraphBatch : %s", err)
+		return 0, errors.Wrapf(DeleteFail, "alert graph delete batch decisions")
+	}
+
 	deleted, err := c.Ent.Alert.Delete().
 		Where(alert.IDIn(idList...)).Exec(c.CTX)
 	if err != nil {
-		c.Log.Warningf("DeleteAlertGraph : %s", err)
+		c.Log.Warningf("DeleteAlertGraphBatch : %s", err)
 		return deleted, errors.Wrapf(DeleteFail, "alert graph delete batch")
 	}
 
@@ -888,14 +909,12 @@ func (c *Client) DeleteAlertWithFilter(filter map[string][]string) (int, error)
 		return 0, errors.Wrap(DeleteFail, "alert query failed")
 	}
 
-	for _, alertItem := range alertsToDelete {
-		err = c.DeleteAlertGraph(alertItem)
-		if err != nil {
-			c.Log.Warningf("DeleteAlertWithFilter : %s", err)
-			return 0, errors.Wrapf(DeleteFail, "event with alert ID '%d'", alertItem.ID)
-		}
+	deleted, err := c.DeleteAlertGraphBatch(alertsToDelete)
+	if err != nil {
+		c.Log.Warningf("DeleteAlertWithFilter : %s", err)
+		return 0, errors.Wrapf(DeleteFail, "%d alert(s)", len(alertsToDelete))
 	}
-	return len(alertsToDelete), nil
+	return deleted, nil
 }
 
 func (c *Client) FlushOrphans() {