diff --git a/pkg/models/alerts.go b/pkg/models/alerts.go index 00e7ec0325a..f8ef8236ae1 100644 --- a/pkg/models/alerts.go +++ b/pkg/models/alerts.go @@ -29,24 +29,31 @@ func (cmd *SaveDashboardCommand) GetAlertModels() *[]Alert { for _, panelObj := range row.Get("panels").MustArray() { panel := simplejson.NewFromAny(panelObj) - for _, alertObj := range panel.Get("alerts").MustArray() { - alertDef := simplejson.NewFromAny(alertObj) + alerting := panel.Get("alerting") + alert := Alert{ + DashboardId: dash.Id, + PanelId: panel.Get("id").MustInt64(), + Id: alerting.Get("id").MustInt64(), + QueryRefId: alerting.Get("query_ref").MustString(), + WarnLevel: alerting.Get("warn_level").MustInt64(), + ErrorLevel: alerting.Get("error_level").MustInt64(), + Interval: alerting.Get("interval").MustInt64(), + Title: alerting.Get("title").MustString(), + Description: alerting.Get("description").MustString(), + QueryRange: alerting.Get("query_range").MustString(), + Aggregator: alerting.Get("aggregator").MustString(), + } - alert := Alert{ - DashboardId: dash.Id, - PanelId: panel.Get("id").MustInt64(), - Id: alertDef.Get("id").MustInt64(), - Query: alertDef.Get("query").MustString(), - QueryRefId: alertDef.Get("query_ref").MustString(), - WarnLevel: alertDef.Get("warn_level").MustInt64(), - ErrorLevel: alertDef.Get("error_level").MustInt64(), - Interval: alertDef.Get("interval").MustInt64(), - Title: alertDef.Get("title").MustString(), - Description: alertDef.Get("description").MustString(), - QueryRange: alertDef.Get("query_range").MustString(), - Aggregator: alertDef.Get("aggregator").MustString(), + for _, targetsObj := range panel.Get("targets").MustArray() { + target := simplejson.NewFromAny(targetsObj) + + if target.Get("refId").MustString() == alert.QueryRefId { + alert.Query = target.Get("target").MustString() + continue } + } + if alert.Query != "" { alerts = append(alerts, alert) } } diff --git a/pkg/models/alerts_test.go b/pkg/models/alerts_test.go index b01dd716f99..b3c1ad25da0 100644 --- a/pkg/models/alerts_test.go +++ b/pkg/models/alerts_test.go @@ -66,28 +66,16 @@ func TestAlertModel(t *testing.T) { "span": 12, "stack": false, "steppedLine": false, - "alerts": [ - { - "query_ref": "A", - "warn_level": 30, - "error_level": 50, - "title": "desktop visiter alerts", - "description": "Restart the webservers", - "query_range": "5m", - "aggregator": "avg", - "interval": 10 - }, - { - "query_ref": "B", - "warn_level": 30, - "error_level": 50, - "title": "mobile visiter alerts", - "description": "Restart the webservers", - "query_range": "5m", - "aggregator": "avg", - "interval": 10 - } - ], + "alerting": { + "query_ref": "A", + "warn_level": 30, + "error_level": 50, + "title": "desktop visiter alerts", + "description": "Restart the webservers", + "query_range": "5m", + "aggregator": "avg", + "interval": 10 + }, "targets": [ { "hide": false, @@ -276,7 +264,7 @@ func TestAlertModel(t *testing.T) { Convey("all properties have been set", func() { So(alerts, ShouldNotBeEmpty) - So(len(alerts), ShouldEqual, 2) + So(len(alerts), ShouldEqual, 1) for _, v := range alerts { So(v.DashboardId, ShouldNotEqual, 0) @@ -286,7 +274,7 @@ func TestAlertModel(t *testing.T) { So(v.ErrorLevel, ShouldEqual, 50) So(v.Aggregator, ShouldNotBeEmpty) - //So(v.Query, ShouldNotBeEmpty) + So(v.Query, ShouldNotBeEmpty) So(v.QueryRefId, ShouldNotBeEmpty) So(v.QueryRange, ShouldNotBeEmpty) So(v.Title, ShouldNotBeEmpty) @@ -295,8 +283,7 @@ func TestAlertModel(t *testing.T) { fmt.Println(v.Query) } - //So(alerts[0].Query, ShouldEqual, "statsd.fakesite.counters.session_start.desktop.count") - //So(alerts[1].Query, ShouldEqual, "statsd.fakesite.counters.session_start.mobile.count") + So(alerts[0].Query, ShouldEqual, "statsd.fakesite.counters.session_start.desktop.count") }) }) }