From 8bb62a79d0d0dd729aa7fb81349dd3680666d208 Mon Sep 17 00:00:00 2001 From: bergquist Date: Fri, 22 Apr 2016 16:51:24 +0200 Subject: [PATCH] feat(alerting): excisting alerts are now updated --- pkg/services/sqlstore/alerting.go | 43 +++++++++++++++++++++++--- pkg/services/sqlstore/alerting_test.go | 32 +++++++++++++++++-- 2 files changed, 68 insertions(+), 7 deletions(-) diff --git a/pkg/services/sqlstore/alerting.go b/pkg/services/sqlstore/alerting.go index dfbcbae2c1b..804fa8552ce 100644 --- a/pkg/services/sqlstore/alerting.go +++ b/pkg/services/sqlstore/alerting.go @@ -13,17 +13,48 @@ func init() { func SaveAlerts(cmd *m.SaveAlertsCommand) error { fmt.Printf("Saving alerts for dashboard %v\n", cmd.DashboardId) + alerts, err := GetAlertsByDashboardId(cmd.DashboardId) + if err != nil { + return err + } + for _, alert := range *cmd.Alerts { - _, err := x.Insert(&alert) - if err != nil { - return err + update := false + + for _, k := range alerts { + if alert.PanelId == k.PanelId && alert.DashboardId == k.DashboardId { + update = true + } + } + + if update { + _, err = x.Update(&alert) + if err != nil { + return err + } + } else { + _, err = x.Insert(&alert) + if err != nil { + return err + } } } return nil } -func GetAlertsByDashboard(dashboardId, panelId int64) (m.Alert, error) { +func GetAlertsByDashboardId(dashboardId int64) ([]m.Alert, error) { + alerts := make([]m.Alert, 0) + err := x.Where("dashboard_id = ?", dashboardId).Find(&alerts) + + if err != nil { + return []m.Alert{}, err + } + + return alerts, nil +} + +func GetAlertsByDashboardAndPanelId(dashboardId, panelId int64) (m.Alert, error) { // this code should be refactored!! // uniqueness should be garanted! @@ -34,5 +65,9 @@ func GetAlertsByDashboard(dashboardId, panelId int64) (m.Alert, error) { return m.Alert{}, err } + if len(alerts) != 1 { + return m.Alert{}, err + } + return alerts[0], nil } diff --git a/pkg/services/sqlstore/alerting_test.go b/pkg/services/sqlstore/alerting_test.go index a23ea106dbb..6489d34e9e5 100644 --- a/pkg/services/sqlstore/alerting_test.go +++ b/pkg/services/sqlstore/alerting_test.go @@ -37,12 +37,12 @@ func TestAlertingDataAccess(t *testing.T) { err := SaveAlerts(&cmd) - Convey("Can create alert", func() { + Convey("Can create one alert", func() { So(err, ShouldBeNil) }) - Convey("can read properties", func() { - alert, err2 := GetAlertsByDashboard(1, 1) + Convey("Can read properties", func() { + alert, err2 := GetAlertsByDashboardAndPanelId(1, 1) So(err2, ShouldBeNil) So(alert.Interval, ShouldEqual, "10") @@ -55,5 +55,31 @@ func TestAlertingDataAccess(t *testing.T) { So(alert.QueryRange, ShouldEqual, "5m") So(alert.Aggregator, ShouldEqual, "avg") }) + + Convey("Alerts with same dashboard id and panel id should update", func() { + modifiedItems := items + modifiedItems[0].Query = "Updated Query" + + modifiedCmd := m.SaveAlertsCommand{ + DashboardId: 1, + OrgId: 1, + UserId: 1, + Alerts: &modifiedItems, + } + + err := SaveAlerts(&modifiedCmd) + + Convey("Can save alerts with same dashboard and panel id", func() { + So(err, ShouldBeNil) + }) + + Convey("Alerts should be updated", func() { + alerts, err2 := GetAlertsByDashboardId(1) + + So(err2, ShouldBeNil) + So(len(alerts), ShouldEqual, 1) + So(alerts[0].Query, ShouldEqual, "Updated Query") + }) + }) }) }