From 973db1ac3837d3146d3719e067ff9c59dc208a9d Mon Sep 17 00:00:00 2001 From: bergquist Date: Wed, 27 Apr 2016 08:59:33 +0200 Subject: [PATCH] feat(alerting): add api route for alert changes --- pkg/api/alerting.go | 13 +++++++ pkg/api/api.go | 1 + pkg/models/alerts.go | 6 +++ pkg/services/sqlstore/alert_rule_changes.go | 37 +++++++++++++++++++ .../sqlstore/alert_rule_changes_test.go | 10 +++-- pkg/services/sqlstore/alerting.go | 27 -------------- pkg/services/sqlstore/alerting_test.go | 21 +++++++---- 7 files changed, 76 insertions(+), 39 deletions(-) create mode 100644 pkg/services/sqlstore/alert_rule_changes.go diff --git a/pkg/api/alerting.go b/pkg/api/alerting.go index 9f817b64d7d..1443f395ea2 100644 --- a/pkg/api/alerting.go +++ b/pkg/api/alerting.go @@ -21,6 +21,19 @@ func ValidateOrgAlert(c *middleware.Context) { } } +// GET /api/alert_rule +func GetAlertChanges(c *middleware.Context) Response { + query := models.GetAlertChangesQuery{ + OrgId: c.OrgId, + } + + if err := bus.Dispatch(&query); err != nil { + return ApiError(500, "List alerts failed", err) + } + + return Json(200, query.Result) +} + // GET /api/alert_rule func GetAlerts(c *middleware.Context) Response { query := models.GetAlertsQuery{ diff --git a/pkg/api/api.go b/pkg/api/api.go index a01a4124c01..4ad6c1665a1 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -237,6 +237,7 @@ func Register(r *macaron.Macaron) { r.Get("/metrics/test", GetTestMetrics) r.Group("/alert_rule", func() { + r.Get("/changes", wrap(GetAlertChanges)) r.Get("/", wrap(GetAlerts)) r.Get("/:id", ValidateOrgAlert, wrap(GetAlert)) }) diff --git a/pkg/models/alerts.go b/pkg/models/alerts.go index 19c47cb30b4..f1dd17b23cc 100644 --- a/pkg/models/alerts.go +++ b/pkg/models/alerts.go @@ -95,3 +95,9 @@ type GetAlertById struct { Result AlertRule } + +type GetAlertChangesQuery struct { + OrgId int64 + + Result []AlertRuleChange +} diff --git a/pkg/services/sqlstore/alert_rule_changes.go b/pkg/services/sqlstore/alert_rule_changes.go new file mode 100644 index 00000000000..11a071ccd68 --- /dev/null +++ b/pkg/services/sqlstore/alert_rule_changes.go @@ -0,0 +1,37 @@ +package sqlstore + +import ( + "github.com/go-xorm/xorm" + "github.com/grafana/grafana/pkg/bus" + m "github.com/grafana/grafana/pkg/models" + "time" +) + +func init() { + bus.AddHandler("sql", GetAlertRuleChanges) +} + +func GetAlertRuleChanges(query *m.GetAlertChangesQuery) error { + alertChanges := make([]m.AlertRuleChange, 0) + if err := x.Where("org_id = ?", query.OrgId).Find(&alertChanges); err != nil { + return err + } + + query.Result = alertChanges + return nil +} + +func SaveAlertChange(change string, alert m.AlertRule, sess *xorm.Session) error { + _, err := sess.Insert(&m.AlertRuleChange{ + OrgId: alert.OrgId, + Type: change, + Created: time.Now(), + AlertId: alert.Id, + }) + + if err != nil { + return err + } + + return nil +} diff --git a/pkg/services/sqlstore/alert_rule_changes_test.go b/pkg/services/sqlstore/alert_rule_changes_test.go index 9dfd3a37c0c..78e218533bd 100644 --- a/pkg/services/sqlstore/alert_rule_changes_test.go +++ b/pkg/services/sqlstore/alert_rule_changes_test.go @@ -46,9 +46,10 @@ func TestAlertRuleChangesDataAccess(t *testing.T) { SaveAlerts(&cmd) - alertChanges, er := GetAlertRuleChanges(FakeOrgId) + query := &m.GetAlertChangesQuery{OrgId: FakeOrgId} + er := GetAlertRuleChanges(query) So(er, ShouldBeNil) - So(len(alertChanges), ShouldEqual, 1) + So(len(query.Result), ShouldEqual, 1) err = DeleteDashboard(&m.DeleteDashboardCommand{ OrgId: FakeOrgId, @@ -66,9 +67,10 @@ func TestAlertRuleChangesDataAccess(t *testing.T) { }) Convey("should add one more alert_rule_change", func() { - alertChanges, er := GetAlertRuleChanges(FakeOrgId) + query := &m.GetAlertChangesQuery{OrgId: FakeOrgId} + er := GetAlertRuleChanges(query) So(er, ShouldBeNil) - So(len(alertChanges), ShouldEqual, 2) + So(len(query.Result), ShouldEqual, 2) }) }) }) diff --git a/pkg/services/sqlstore/alerting.go b/pkg/services/sqlstore/alerting.go index f1d7b634d62..b39a5556d0a 100644 --- a/pkg/services/sqlstore/alerting.go +++ b/pkg/services/sqlstore/alerting.go @@ -5,7 +5,6 @@ import ( "github.com/go-xorm/xorm" "github.com/grafana/grafana/pkg/bus" m "github.com/grafana/grafana/pkg/models" - "time" ) func init() { @@ -57,21 +56,6 @@ func DeleteAlertDefinition(dashboardId int64, sess *xorm.Session) error { return nil } -func SaveAlertChange(change string, alert m.AlertRule, sess *xorm.Session) error { - _, err := sess.Insert(&m.AlertRuleChange{ - OrgId: alert.OrgId, - Type: change, - Created: time.Now(), - AlertId: alert.Id, - }) - - if err != nil { - return err - } - - return nil -} - func alertIsDifferent(rule1, rule2 m.AlertRule) bool { result := false @@ -200,14 +184,3 @@ func GetAlertsByDashboardAndPanelId(dashboardId, panelId int64) (m.AlertRule, er return alerts[0], nil } - -func GetAlertRuleChanges(orgid int64) ([]m.AlertRuleChange, error) { - alertChanges := make([]m.AlertRuleChange, 0) - err := x.Where("org_id = ?", orgid).Find(&alertChanges) - - if err != nil { - return []m.AlertRuleChange{}, err - } - - return alertChanges, nil -} diff --git a/pkg/services/sqlstore/alerting_test.go b/pkg/services/sqlstore/alerting_test.go index 48e11ea50cf..dec3a94d9a4 100644 --- a/pkg/services/sqlstore/alerting_test.go +++ b/pkg/services/sqlstore/alerting_test.go @@ -43,9 +43,10 @@ func TestAlertingDataAccess(t *testing.T) { Convey("Can create one alert", func() { So(err, ShouldBeNil) - alertChanges, er := GetAlertRuleChanges(1) + query := &m.GetAlertChangesQuery{OrgId: 1} + er := GetAlertRuleChanges(query) So(er, ShouldBeNil) - So(len(alertChanges), ShouldEqual, 1) + So(len(query.Result), ShouldEqual, 1) }) Convey("Can read properties", func() { @@ -92,9 +93,10 @@ func TestAlertingDataAccess(t *testing.T) { err3 := SaveAlerts(&modifiedCmd) So(err3, ShouldBeNil) - alertChanges, er := GetAlertRuleChanges(1) + query := &m.GetAlertChangesQuery{OrgId: 1} + er := GetAlertRuleChanges(query) So(er, ShouldBeNil) - So(len(alertChanges), ShouldEqual, 2) + So(len(query.Result), ShouldEqual, 2) }) }) @@ -129,9 +131,11 @@ func TestAlertingDataAccess(t *testing.T) { alerts, err2 := GetAlertsByDashboardId(testDash.Id) So(err2, ShouldBeNil) So(len(alerts), ShouldEqual, 3) - alertChanges, er := GetAlertRuleChanges(1) + + query := &m.GetAlertChangesQuery{OrgId: 1} + er := GetAlertRuleChanges(query) So(er, ShouldBeNil) - So(len(alertChanges), ShouldEqual, 4) + So(len(query.Result), ShouldEqual, 4) }) Convey("should updated two dashboards and delete one", func() { @@ -147,9 +151,10 @@ func TestAlertingDataAccess(t *testing.T) { }) Convey("should add one more alert_rule_change", func() { - alertChanges, er := GetAlertRuleChanges(1) + query := &m.GetAlertChangesQuery{OrgId: 1} + er := GetAlertRuleChanges(query) So(er, ShouldBeNil) - So(len(alertChanges), ShouldEqual, 6) + So(len(query.Result), ShouldEqual, 6) }) }) })