opentsdb_test.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. package opentsdb
  2. import (
  3. "testing"
  4. "github.com/grafana/grafana/pkg/components/simplejson"
  5. "github.com/grafana/grafana/pkg/tsdb"
  6. . "github.com/smartystreets/goconvey/convey"
  7. )
  8. func TestOpenTsdbExecutor(t *testing.T) {
  9. Convey("OpenTsdb query testing", t, func() {
  10. exec := &OpenTsdbExecutor{}
  11. Convey("Build metric with downsampling enabled", func() {
  12. query := &tsdb.Query{
  13. Model: simplejson.New(),
  14. }
  15. query.Model.Set("metric", "cpu.average.percent")
  16. query.Model.Set("aggregator", "avg")
  17. query.Model.Set("disableDownsampling", false)
  18. query.Model.Set("downsampleInterval", "")
  19. query.Model.Set("downsampleAggregator", "avg")
  20. query.Model.Set("downsampleFillPolicy", "none")
  21. metric := exec.buildMetric(query)
  22. So(len(metric), ShouldEqual, 3)
  23. So(metric["metric"], ShouldEqual, "cpu.average.percent")
  24. So(metric["aggregator"], ShouldEqual, "avg")
  25. So(metric["downsample"], ShouldEqual, "1m-avg")
  26. })
  27. Convey("Build metric with downsampling disabled", func() {
  28. query := &tsdb.Query{
  29. Model: simplejson.New(),
  30. }
  31. query.Model.Set("metric", "cpu.average.percent")
  32. query.Model.Set("aggregator", "avg")
  33. query.Model.Set("disableDownsampling", true)
  34. query.Model.Set("downsampleInterval", "")
  35. query.Model.Set("downsampleAggregator", "avg")
  36. query.Model.Set("downsampleFillPolicy", "none")
  37. metric := exec.buildMetric(query)
  38. So(len(metric), ShouldEqual, 2)
  39. So(metric["metric"], ShouldEqual, "cpu.average.percent")
  40. So(metric["aggregator"], ShouldEqual, "avg")
  41. })
  42. Convey("Build metric with downsampling enabled with params", func() {
  43. query := &tsdb.Query{
  44. Model: simplejson.New(),
  45. }
  46. query.Model.Set("metric", "cpu.average.percent")
  47. query.Model.Set("aggregator", "avg")
  48. query.Model.Set("disableDownsampling", false)
  49. query.Model.Set("downsampleInterval", "5m")
  50. query.Model.Set("downsampleAggregator", "sum")
  51. query.Model.Set("downsampleFillPolicy", "null")
  52. metric := exec.buildMetric(query)
  53. So(len(metric), ShouldEqual, 3)
  54. So(metric["metric"], ShouldEqual, "cpu.average.percent")
  55. So(metric["aggregator"], ShouldEqual, "avg")
  56. So(metric["downsample"], ShouldEqual, "5m-sum-null")
  57. })
  58. Convey("Build metric with tags with downsampling disabled", func() {
  59. query := &tsdb.Query{
  60. Model: simplejson.New(),
  61. }
  62. query.Model.Set("metric", "cpu.average.percent")
  63. query.Model.Set("aggregator", "avg")
  64. query.Model.Set("disableDownsampling", true)
  65. query.Model.Set("downsampleInterval", "5m")
  66. query.Model.Set("downsampleAggregator", "sum")
  67. query.Model.Set("downsampleFillPolicy", "null")
  68. tags := simplejson.New()
  69. tags.Set("env", "prod")
  70. tags.Set("app", "grafana")
  71. query.Model.Set("tags", tags.MustMap())
  72. metric := exec.buildMetric(query)
  73. So(len(metric), ShouldEqual, 3)
  74. So(metric["metric"], ShouldEqual, "cpu.average.percent")
  75. So(metric["aggregator"], ShouldEqual, "avg")
  76. So(metric["downsample"], ShouldEqual, nil)
  77. So(len(metric["tags"].(map[string]interface{})), ShouldEqual, 2)
  78. So(metric["tags"].(map[string]interface{})["env"], ShouldEqual, "prod")
  79. So(metric["tags"].(map[string]interface{})["app"], ShouldEqual, "grafana")
  80. So(metric["tags"].(map[string]interface{})["ip"], ShouldEqual, nil)
  81. })
  82. Convey("Build metric with rate enabled but counter disabled", func() {
  83. query := &tsdb.Query{
  84. Model: simplejson.New(),
  85. }
  86. query.Model.Set("metric", "cpu.average.percent")
  87. query.Model.Set("aggregator", "avg")
  88. query.Model.Set("disableDownsampling", true)
  89. query.Model.Set("shouldComputeRate", true)
  90. query.Model.Set("isCounter", false)
  91. tags := simplejson.New()
  92. tags.Set("env", "prod")
  93. tags.Set("app", "grafana")
  94. query.Model.Set("tags", tags.MustMap())
  95. metric := exec.buildMetric(query)
  96. So(len(metric), ShouldEqual, 5)
  97. So(metric["metric"], ShouldEqual, "cpu.average.percent")
  98. So(metric["aggregator"], ShouldEqual, "avg")
  99. So(len(metric["tags"].(map[string]interface{})), ShouldEqual, 2)
  100. So(metric["tags"].(map[string]interface{})["env"], ShouldEqual, "prod")
  101. So(metric["tags"].(map[string]interface{})["app"], ShouldEqual, "grafana")
  102. So(metric["tags"].(map[string]interface{})["ip"], ShouldEqual, nil)
  103. So(metric["rate"], ShouldEqual, true)
  104. So(metric["rateOptions"].(map[string]interface{})["counter"], ShouldEqual, false)
  105. })
  106. Convey("Build metric with rate and counter enabled", func() {
  107. query := &tsdb.Query{
  108. Model: simplejson.New(),
  109. }
  110. query.Model.Set("metric", "cpu.average.percent")
  111. query.Model.Set("aggregator", "avg")
  112. query.Model.Set("disableDownsampling", true)
  113. query.Model.Set("shouldComputeRate", true)
  114. query.Model.Set("isCounter", true)
  115. query.Model.Set("counterMax", 45)
  116. query.Model.Set("counterResetValue", 60)
  117. tags := simplejson.New()
  118. tags.Set("env", "prod")
  119. tags.Set("app", "grafana")
  120. query.Model.Set("tags", tags.MustMap())
  121. metric := exec.buildMetric(query)
  122. So(len(metric), ShouldEqual, 5)
  123. So(metric["metric"], ShouldEqual, "cpu.average.percent")
  124. So(metric["aggregator"], ShouldEqual, "avg")
  125. So(len(metric["tags"].(map[string]interface{})), ShouldEqual, 2)
  126. So(metric["tags"].(map[string]interface{})["env"], ShouldEqual, "prod")
  127. So(metric["tags"].(map[string]interface{})["app"], ShouldEqual, "grafana")
  128. So(metric["tags"].(map[string]interface{})["ip"], ShouldEqual, nil)
  129. So(metric["rate"], ShouldEqual, true)
  130. So(len(metric["rateOptions"].(map[string]interface{})), ShouldEqual, 3)
  131. So(metric["rateOptions"].(map[string]interface{})["counter"], ShouldEqual, true)
  132. So(metric["rateOptions"].(map[string]interface{})["counterMax"], ShouldEqual, 45)
  133. So(metric["rateOptions"].(map[string]interface{})["resetValue"], ShouldEqual, 60)
  134. })
  135. })
  136. }