Browse Source

feat(alerting): add api route for alert changes

bergquist 9 years ago
parent
commit
973db1ac38

+ 13 - 0
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{

+ 1 - 0
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))
 		})

+ 6 - 0
pkg/models/alerts.go

@@ -95,3 +95,9 @@ type GetAlertById struct {
 
 	Result AlertRule
 }
+
+type GetAlertChangesQuery struct {
+	OrgId int64
+
+	Result []AlertRuleChange
+}

+ 37 - 0
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
+}

+ 6 - 4
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)
 			})
 		})
 	})

+ 0 - 27
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
-}

+ 13 - 8
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)
 				})
 			})
 		})