mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
feat(alerting): excisting alerts are now updated
This commit is contained in:
parent
ba5978abd3
commit
8bb62a79d0
@ -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
|
||||
}
|
||||
|
@ -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")
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user