Bläddra i källkod

delete orphan nodes (fix #778) (#794)

* delete orphan nodes (for #778 and partially #781)

* and do it as well for decisions
Thibault "bui" Koechlin 4 år sedan
förälder
incheckning
f881510f79
1 ändrade filer med 25 tillägg och 0 borttagningar
  1. 25 0
      pkg/database/alerts.go

+ 25 - 0
pkg/database/alerts.go

@@ -575,11 +575,36 @@ func (c *Client) DeleteAlertWithFilter(filter map[string][]string) (int, error)
 	return len(alertsToDelete), nil
 	return len(alertsToDelete), nil
 }
 }
 
 
+func (c *Client) FlushOrphans() {
+	/* While it has only been linked to some very corner-case bug : https://github.com/crowdsecurity/crowdsec/issues/778 */
+	/* We want to take care of orphaned events for which the parent alert/decision has been deleted */
+
+	events_count, err := c.Ent.Event.Delete().Where(event.Not(event.HasOwner())).Exec(c.CTX)
+	if err != nil {
+		c.Log.Warningf("error while deleting orphan events : %s", err)
+		return
+	}
+	if events_count > 0 {
+		c.Log.Infof("%d deleted orphan events", events_count)
+	}
+
+	events_count, err = c.Ent.Decision.Delete().Where(decision.Not(decision.HasOwner())).Exec(c.CTX)
+	if err != nil {
+		c.Log.Warningf("error while deleting orphan decisions : %s", err)
+		return
+	}
+	if events_count > 0 {
+		c.Log.Infof("%d deleted orphan decisions", events_count)
+	}
+}
+
 func (c *Client) FlushAlerts(MaxAge string, MaxItems int) error {
 func (c *Client) FlushAlerts(MaxAge string, MaxItems int) error {
 	var deletedByAge int
 	var deletedByAge int
 	var deletedByNbItem int
 	var deletedByNbItem int
 	var totalAlerts int
 	var totalAlerts int
 	var err error
 	var err error
+
+	c.FlushOrphans()
 	totalAlerts, err = c.TotalAlerts()
 	totalAlerts, err = c.TotalAlerts()
 	if err != nil {
 	if err != nil {
 		c.Log.Warningf("FlushAlerts (max items count) : %s", err)
 		c.Log.Warningf("FlushAlerts (max items count) : %s", err)