فهرست منبع

feat(alerting): validate alerts before saving dashboard (#6691)

ref #6576
Carl Bergquist 9 سال پیش
والد
کامیت
df2b2e3058
2فایلهای تغییر یافته به همراه27 افزوده شده و 0 حذف شده
  1. 10 0
      pkg/api/dashboard.go
  2. 17 0
      pkg/services/alerting/commands.go

+ 10 - 0
pkg/api/dashboard.go

@@ -120,6 +120,16 @@ func PostDashboard(c *middleware.Context, cmd m.SaveDashboardCommand) Response {
 		cmd.UserId = c.UserId
 		cmd.UserId = c.UserId
 	}
 	}
 
 
+	validateAlertsCmd := alerting.ValidateDashboardAlertsCommand{
+		OrgId:     c.OrgId,
+		UserId:    c.UserId,
+		Dashboard: cmd.Result,
+	}
+
+	if err := bus.Dispatch(&validateAlertsCmd); err != nil {
+		return ApiError(500, "Invalid alert data. Cannot save dashboard", err)
+	}
+
 	dash := cmd.GetDashboardModel()
 	dash := cmd.GetDashboardModel()
 	if dash.Id == 0 {
 	if dash.Id == 0 {
 		limitReached, err := middleware.QuotaReached(c, "dashboard")
 		limitReached, err := middleware.QuotaReached(c, "dashboard")

+ 17 - 0
pkg/services/alerting/commands.go

@@ -11,8 +11,25 @@ type UpdateDashboardAlertsCommand struct {
 	Dashboard *m.Dashboard
 	Dashboard *m.Dashboard
 }
 }
 
 
+type ValidateDashboardAlertsCommand struct {
+	UserId    int64
+	OrgId     int64
+	Dashboard *m.Dashboard
+}
+
 func init() {
 func init() {
 	bus.AddHandler("alerting", updateDashboardAlerts)
 	bus.AddHandler("alerting", updateDashboardAlerts)
+	bus.AddHandler("alerting", validateDashboardAlerts)
+}
+
+func validateDashboardAlerts(cmd *ValidateDashboardAlertsCommand) error {
+	extractor := NewDashAlertExtractor(cmd.Dashboard, cmd.OrgId)
+
+	if _, err := extractor.GetAlerts(); err != nil {
+		return err
+	}
+
+	return nil
 }
 }
 
 
 func updateDashboardAlerts(cmd *UpdateDashboardAlertsCommand) error {
 func updateDashboardAlerts(cmd *UpdateDashboardAlertsCommand) error {