Преглед на файлове

feat(alerting): worked on alert condition eval tests

Torkel Ödegaard преди 9 години
родител
ревизия
f0fc336e88
променени са 4 файла, в които са добавени 72 реда и са изтрити 45 реда
  1. 62 34
      pkg/services/alerting/conditions_test.go
  2. 0 1
      pkg/services/alerting/handler.go
  3. 8 8
      pkg/services/alerting/handler_test.go
  4. 2 2
      public/sass/components/_jsontree.scss

+ 62 - 34
pkg/services/alerting/conditions_test.go

@@ -14,51 +14,79 @@ func TestQueryCondition(t *testing.T) {
 
 	Convey("when evaluating query condition", t, func() {
 
-		bus.AddHandler("test", func(query *m.GetDataSourceByIdQuery) error {
-			query.Result = &m.DataSource{Id: 1, Type: "graphite"}
-			return nil
+		queryConditionScenario("Given avg() and > 100", func(ctx *queryConditionTestContext) {
+
+			ctx.reducer = `{"type": "avg"}`
+			ctx.evaluator = `{"type": ">", "params": [100]}`
+
+			Convey("should trigger when avg is above 100", func() {
+				ctx.series = tsdb.TimeSeriesSlice{tsdb.NewTimeSeries("test1", [][2]float64{{120, 0}})}
+				ctx.exec()
+
+				So(ctx.result.Error, ShouldBeNil)
+				So(ctx.result.Triggered, ShouldBeTrue)
+			})
+
+			Convey("Should not trigger when avg is below 100", func() {
+				ctx.series = tsdb.TimeSeriesSlice{tsdb.NewTimeSeries("test1", [][2]float64{{90, 0}})}
+				ctx.exec()
+
+				So(ctx.result.Error, ShouldBeNil)
+				So(ctx.result.Triggered, ShouldBeFalse)
+			})
 		})
+	})
+}
 
-		Convey("Given avg() and > 100", func() {
+type queryConditionTestContext struct {
+	reducer   string
+	evaluator string
+	series    tsdb.TimeSeriesSlice
+	result    *AlertResultContext
+}
 
-			jsonModel, err := simplejson.NewJson([]byte(`{
+type queryConditionScenarioFunc func(c *queryConditionTestContext)
+
+func (ctx *queryConditionTestContext) exec() {
+	jsonModel, err := simplejson.NewJson([]byte(`{
             "type": "query",
             "query":  {
               "params": ["A", "5m", "now"],
               "datasourceId": 1,
               "model": {"target": "aliasByNode(statsd.fakesite.counters.session_start.mobile.count, 4)"}
             },
-            "reducer": {"type": "avg", "params": []},
-            "evaluator": {"type": ">", "params": [100]}
+            "reducer":` + ctx.reducer + `,
+            "evaluator":` + ctx.evaluator + `
           }`))
-			So(err, ShouldBeNil)
-
-			condition, err := NewQueryCondition(jsonModel)
-			So(err, ShouldBeNil)
-
-			Convey("Should set result to triggered when avg is above 100", func() {
-				context := &AlertResultContext{
-					Rule: &AlertRule{},
-				}
-
-				condition.HandleRequest = func(req *tsdb.Request) (*tsdb.Response, error) {
-					return &tsdb.Response{
-						Results: map[string]*tsdb.QueryResult{
-							"A": &tsdb.QueryResult{
-								Series: tsdb.TimeSeriesSlice{
-									tsdb.NewTimeSeries("test1", [][2]float64{{120, 0}}),
-								},
-							},
-						},
-					}, nil
-				}
-
-				condition.Eval(context)
-
-				So(context.Error, ShouldBeNil)
-				So(context.Triggered, ShouldBeTrue)
-			})
+	So(err, ShouldBeNil)
+
+	condition, err := NewQueryCondition(jsonModel)
+	So(err, ShouldBeNil)
+
+	condition.HandleRequest = func(req *tsdb.Request) (*tsdb.Response, error) {
+		return &tsdb.Response{
+			Results: map[string]*tsdb.QueryResult{
+				"A": {Series: ctx.series},
+			},
+		}, nil
+	}
+
+	condition.Eval(ctx.result)
+}
+
+func queryConditionScenario(desc string, fn queryConditionScenarioFunc) {
+	Convey(desc, func() {
+
+		bus.AddHandler("test", func(query *m.GetDataSourceByIdQuery) error {
+			query.Result = &m.DataSource{Id: 1, Type: "graphite"}
+			return nil
 		})
 
+		ctx := &queryConditionTestContext{}
+		ctx.result = &AlertResultContext{
+			Rule: &AlertRule{},
+		}
+
+		fn(ctx)
 	})
 }

+ 0 - 1
pkg/services/alerting/handler.go

@@ -55,7 +55,6 @@ func (e *HandlerImpl) eval(context *AlertResultContext) {
 	}
 
 	context.EndTime = time.Now()
-	context.DoneChan <- true
 }
 
 // func (e *HandlerImpl) executeQuery(job *AlertJob) (tsdb.TimeSeriesSlice, error) {

+ 8 - 8
pkg/services/alerting/handler_test.go

@@ -19,26 +19,26 @@ func TestAlertingExecutor(t *testing.T) {
 		handler := NewHandler()
 
 		Convey("Show return triggered with single passing condition", func() {
-			rule := &AlertRule{
+			context := NewAlertResultContext(&AlertRule{
 				Conditions: []AlertCondition{&conditionStub{
 					triggered: true,
 				}},
-			}
+			})
 
-			result := handler.eval(rule)
-			So(result.Triggered, ShouldEqual, true)
+			handler.eval(context)
+			So(context.Triggered, ShouldEqual, true)
 		})
 
 		Convey("Show return false with not passing condition", func() {
-			rule := &AlertRule{
+			context := NewAlertResultContext(&AlertRule{
 				Conditions: []AlertCondition{
 					&conditionStub{triggered: true},
 					&conditionStub{triggered: false},
 				},
-			}
+			})
 
-			result := handler.eval(rule)
-			So(result.Triggered, ShouldEqual, false)
+			handler.eval(context)
+			So(context.Triggered, ShouldEqual, false)
 		})
 
 		// 	Convey("Show return critical since below 2", func() {

+ 2 - 2
public/sass/components/_jsontree.scss

@@ -8,7 +8,7 @@ json-tree {
     &::before {
       pointer-events: none;
     }
-    &::before, & > .key {
+    &::before, & > .json-tree-key {
       cursor: pointer;
     }
   }
@@ -41,7 +41,7 @@ json-tree {
       content: '\25b6';
       position: absolute;
       left: 0px;
-      font-size: 10px;
+      font-size: 8px;
       transition: transform .1s ease;
     }
     &.expanded::before {