Commit f0fc336e by Torkel Ödegaard

feat(alerting): worked on alert condition eval tests

parent 3ad38eef
...@@ -14,13 +14,40 @@ func TestQueryCondition(t *testing.T) { ...@@ -14,13 +14,40 @@ func TestQueryCondition(t *testing.T) {
Convey("when evaluating query condition", t, func() { Convey("when evaluating query condition", t, func() {
bus.AddHandler("test", func(query *m.GetDataSourceByIdQuery) error { queryConditionScenario("Given avg() and > 100", func(ctx *queryConditionTestContext) {
query.Result = &m.DataSource{Id: 1, Type: "graphite"}
return nil 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)
})
})
}) })
}
type queryConditionTestContext struct {
reducer string
evaluator string
series tsdb.TimeSeriesSlice
result *AlertResultContext
}
Convey("Given avg() and > 100", func() { type queryConditionScenarioFunc func(c *queryConditionTestContext)
func (ctx *queryConditionTestContext) exec() {
jsonModel, err := simplejson.NewJson([]byte(`{ jsonModel, err := simplejson.NewJson([]byte(`{
"type": "query", "type": "query",
"query": { "query": {
...@@ -28,37 +55,38 @@ func TestQueryCondition(t *testing.T) { ...@@ -28,37 +55,38 @@ func TestQueryCondition(t *testing.T) {
"datasourceId": 1, "datasourceId": 1,
"model": {"target": "aliasByNode(statsd.fakesite.counters.session_start.mobile.count, 4)"} "model": {"target": "aliasByNode(statsd.fakesite.counters.session_start.mobile.count, 4)"}
}, },
"reducer": {"type": "avg", "params": []}, "reducer":` + ctx.reducer + `,
"evaluator": {"type": ">", "params": [100]} "evaluator":` + ctx.evaluator + `
}`)) }`))
So(err, ShouldBeNil) So(err, ShouldBeNil)
condition, err := NewQueryCondition(jsonModel) condition, err := NewQueryCondition(jsonModel)
So(err, ShouldBeNil) 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) { condition.HandleRequest = func(req *tsdb.Request) (*tsdb.Response, error) {
return &tsdb.Response{ return &tsdb.Response{
Results: map[string]*tsdb.QueryResult{ Results: map[string]*tsdb.QueryResult{
"A": &tsdb.QueryResult{ "A": {Series: ctx.series},
Series: tsdb.TimeSeriesSlice{
tsdb.NewTimeSeries("test1", [][2]float64{{120, 0}}),
},
},
}, },
}, nil }, nil
} }
condition.Eval(context) condition.Eval(ctx.result)
}
So(context.Error, ShouldBeNil) func queryConditionScenario(desc string, fn queryConditionScenarioFunc) {
So(context.Triggered, ShouldBeTrue) 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)
}) })
} }
...@@ -55,7 +55,6 @@ func (e *HandlerImpl) eval(context *AlertResultContext) { ...@@ -55,7 +55,6 @@ func (e *HandlerImpl) eval(context *AlertResultContext) {
} }
context.EndTime = time.Now() context.EndTime = time.Now()
context.DoneChan <- true
} }
// func (e *HandlerImpl) executeQuery(job *AlertJob) (tsdb.TimeSeriesSlice, error) { // func (e *HandlerImpl) executeQuery(job *AlertJob) (tsdb.TimeSeriesSlice, error) {
......
...@@ -19,26 +19,26 @@ func TestAlertingExecutor(t *testing.T) { ...@@ -19,26 +19,26 @@ func TestAlertingExecutor(t *testing.T) {
handler := NewHandler() handler := NewHandler()
Convey("Show return triggered with single passing condition", func() { Convey("Show return triggered with single passing condition", func() {
rule := &AlertRule{ context := NewAlertResultContext(&AlertRule{
Conditions: []AlertCondition{&conditionStub{ Conditions: []AlertCondition{&conditionStub{
triggered: true, triggered: true,
}}, }},
} })
result := handler.eval(rule) handler.eval(context)
So(result.Triggered, ShouldEqual, true) So(context.Triggered, ShouldEqual, true)
}) })
Convey("Show return false with not passing condition", func() { Convey("Show return false with not passing condition", func() {
rule := &AlertRule{ context := NewAlertResultContext(&AlertRule{
Conditions: []AlertCondition{ Conditions: []AlertCondition{
&conditionStub{triggered: true}, &conditionStub{triggered: true},
&conditionStub{triggered: false}, &conditionStub{triggered: false},
}, },
} })
result := handler.eval(rule) handler.eval(context)
So(result.Triggered, ShouldEqual, false) So(context.Triggered, ShouldEqual, false)
}) })
// Convey("Show return critical since below 2", func() { // Convey("Show return critical since below 2", func() {
......
...@@ -8,7 +8,7 @@ json-tree { ...@@ -8,7 +8,7 @@ json-tree {
&::before { &::before {
pointer-events: none; pointer-events: none;
} }
&::before, & > .key { &::before, & > .json-tree-key {
cursor: pointer; cursor: pointer;
} }
} }
...@@ -41,7 +41,7 @@ json-tree { ...@@ -41,7 +41,7 @@ json-tree {
content: '\25b6'; content: '\25b6';
position: absolute; position: absolute;
left: 0px; left: 0px;
font-size: 10px; font-size: 8px;
transition: transform .1s ease; transition: transform .1s ease;
} }
&.expanded::before { &.expanded::before {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment