feat(alerting): excisting alerts are now updated

This commit is contained in:
bergquist 2016-04-22 16:51:24 +02:00
parent ba5978abd3
commit 8bb62a79d0
2 changed files with 68 additions and 7 deletions

View File

@ -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
}

View File

@ -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")
})
})
})
}