executor_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package alerting
  2. import (
  3. "testing"
  4. "github.com/grafana/grafana/pkg/services/alerting/alertstates"
  5. "github.com/grafana/grafana/pkg/services/alerting/transformers"
  6. "github.com/grafana/grafana/pkg/tsdb"
  7. . "github.com/smartystreets/goconvey/convey"
  8. )
  9. func TestAlertingExecutor(t *testing.T) {
  10. Convey("Test alert execution", t, func() {
  11. executor := NewExecutor()
  12. Convey("single time serie", func() {
  13. Convey("Show return ok since avg is above 2", func() {
  14. rule := &AlertRule{
  15. Critical: Level{Level: 10, Operator: ">"},
  16. Transformer: transformers.NewAggregationTransformer("avg"),
  17. }
  18. timeSeries := []*tsdb.TimeSeries{
  19. tsdb.NewTimeSeries("test1", [][2]float64{{2, 0}}),
  20. }
  21. result := executor.evaluateRule(rule, timeSeries)
  22. So(result.State, ShouldEqual, alertstates.Ok)
  23. })
  24. Convey("Show return critical since below 2", func() {
  25. rule := &AlertRule{
  26. Critical: Level{Level: 10, Operator: "<"},
  27. Transformer: transformers.NewAggregationTransformer("avg"),
  28. }
  29. timeSeries := []*tsdb.TimeSeries{
  30. tsdb.NewTimeSeries("test1", [][2]float64{{2, 0}}),
  31. }
  32. result := executor.evaluateRule(rule, timeSeries)
  33. So(result.State, ShouldEqual, alertstates.Critical)
  34. })
  35. Convey("Show return critical since sum is above 10", func() {
  36. rule := &AlertRule{
  37. Critical: Level{Level: 10, Operator: ">"},
  38. Transformer: transformers.NewAggregationTransformer("sum"),
  39. }
  40. timeSeries := []*tsdb.TimeSeries{
  41. tsdb.NewTimeSeries("test1", [][2]float64{{9, 0}, {9, 0}}),
  42. }
  43. result := executor.evaluateRule(rule, timeSeries)
  44. So(result.State, ShouldEqual, alertstates.Critical)
  45. })
  46. Convey("Show return ok since avg is below 10", func() {
  47. rule := &AlertRule{
  48. Critical: Level{Level: 10, Operator: ">"},
  49. Transformer: transformers.NewAggregationTransformer("avg"),
  50. }
  51. timeSeries := []*tsdb.TimeSeries{
  52. tsdb.NewTimeSeries("test1", [][2]float64{{9, 0}, {9, 0}}),
  53. }
  54. result := executor.evaluateRule(rule, timeSeries)
  55. So(result.State, ShouldEqual, alertstates.Ok)
  56. })
  57. Convey("Show return ok since min is below 10", func() {
  58. rule := &AlertRule{
  59. Critical: Level{Level: 10, Operator: ">"},
  60. Transformer: transformers.NewAggregationTransformer("avg"),
  61. }
  62. timeSeries := []*tsdb.TimeSeries{
  63. tsdb.NewTimeSeries("test1", [][2]float64{{11, 0}, {9, 0}}),
  64. }
  65. result := executor.evaluateRule(rule, timeSeries)
  66. So(result.State, ShouldEqual, alertstates.Ok)
  67. })
  68. Convey("Show return ok since max is above 10", func() {
  69. rule := &AlertRule{
  70. Critical: Level{Level: 10, Operator: ">"},
  71. Transformer: transformers.NewAggregationTransformer("max"),
  72. }
  73. timeSeries := []*tsdb.TimeSeries{
  74. tsdb.NewTimeSeries("test1", [][2]float64{{1, 0}, {11, 0}}),
  75. }
  76. result := executor.evaluateRule(rule, timeSeries)
  77. So(result.State, ShouldEqual, alertstates.Critical)
  78. })
  79. })
  80. Convey("muliple time series", func() {
  81. Convey("both are ok", func() {
  82. rule := &AlertRule{
  83. Critical: Level{Level: 10, Operator: ">"},
  84. Transformer: transformers.NewAggregationTransformer("avg"),
  85. }
  86. timeSeries := []*tsdb.TimeSeries{
  87. tsdb.NewTimeSeries("test1", [][2]float64{{2, 0}}),
  88. tsdb.NewTimeSeries("test1", [][2]float64{{2, 0}}),
  89. }
  90. result := executor.evaluateRule(rule, timeSeries)
  91. So(result.State, ShouldEqual, alertstates.Ok)
  92. })
  93. Convey("first serie is good, second is critical", func() {
  94. rule := &AlertRule{
  95. Critical: Level{Level: 10, Operator: ">"},
  96. Transformer: transformers.NewAggregationTransformer("avg"),
  97. }
  98. timeSeries := []*tsdb.TimeSeries{
  99. tsdb.NewTimeSeries("test1", [][2]float64{{2, 0}}),
  100. tsdb.NewTimeSeries("test1", [][2]float64{{11, 0}}),
  101. }
  102. result := executor.evaluateRule(rule, timeSeries)
  103. So(result.State, ShouldEqual, alertstates.Critical)
  104. })
  105. })
  106. })
  107. }