time_series_query_test.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package elasticsearch
  2. import (
  3. "testing"
  4. "github.com/grafana/grafana/pkg/components/simplejson"
  5. "github.com/grafana/grafana/pkg/models"
  6. "github.com/grafana/grafana/pkg/tsdb"
  7. . "github.com/smartystreets/goconvey/convey"
  8. )
  9. func TestTimeSeriesQueryParser(t *testing.T) {
  10. Convey("Test time series query parser", t, func() {
  11. ds := &models.DataSource{}
  12. p := newTimeSeriesQueryParser(ds)
  13. Convey("Should be able to parse query", func() {
  14. json, err := simplejson.NewJson([]byte(`{
  15. "timeField": "@timestamp",
  16. "query": "@metric:cpu",
  17. "alias": "{{@hostname}} {{metric}}",
  18. "metrics": [
  19. {
  20. "field": "@value",
  21. "id": "1",
  22. "meta": {},
  23. "settings": {
  24. "percents": [
  25. "90"
  26. ]
  27. },
  28. "type": "percentiles"
  29. },
  30. {
  31. "type": "count",
  32. "field": "select field",
  33. "id": "4",
  34. "settings": {},
  35. "meta": {}
  36. }
  37. ],
  38. "bucketAggs": [
  39. {
  40. "fake": true,
  41. "field": "@hostname",
  42. "id": "3",
  43. "settings": {
  44. "min_doc_count": 1,
  45. "order": "desc",
  46. "orderBy": "_term",
  47. "size": "10"
  48. },
  49. "type": "terms"
  50. },
  51. {
  52. "field": "@timestamp",
  53. "id": "2",
  54. "settings": {
  55. "interval": "5m",
  56. "min_doc_count": 0,
  57. "trimEdges": 0
  58. },
  59. "type": "date_histogram"
  60. }
  61. ]
  62. }`))
  63. So(err, ShouldBeNil)
  64. tsdbQuery := &tsdb.TsdbQuery{
  65. Queries: []*tsdb.Query{
  66. {
  67. DataSource: ds,
  68. Model: json,
  69. },
  70. },
  71. }
  72. tsQuery, err := p.parse(tsdbQuery)
  73. So(err, ShouldBeNil)
  74. So(tsQuery.queries, ShouldHaveLength, 1)
  75. q := tsQuery.queries[0]
  76. So(q.TimeField, ShouldEqual, "@timestamp")
  77. So(q.RawQuery, ShouldEqual, "@metric:cpu")
  78. So(q.Alias, ShouldEqual, "{{@hostname}} {{metric}}")
  79. So(q.Metrics, ShouldHaveLength, 2)
  80. So(q.Metrics[0].Field, ShouldEqual, "@value")
  81. So(q.Metrics[0].ID, ShouldEqual, "1")
  82. So(q.Metrics[0].Type, ShouldEqual, "percentiles")
  83. So(q.Metrics[0].Hide, ShouldBeFalse)
  84. So(q.Metrics[0].PipelineAggregate, ShouldEqual, "")
  85. So(q.Metrics[0].Settings.Get("percents").MustStringArray()[0], ShouldEqual, "90")
  86. So(q.Metrics[1].Field, ShouldEqual, "select field")
  87. So(q.Metrics[1].ID, ShouldEqual, "4")
  88. So(q.Metrics[1].Type, ShouldEqual, "count")
  89. So(q.Metrics[1].Hide, ShouldBeFalse)
  90. So(q.Metrics[1].PipelineAggregate, ShouldEqual, "")
  91. So(q.Metrics[1].Settings.MustMap(), ShouldBeEmpty)
  92. So(q.BucketAggs, ShouldHaveLength, 2)
  93. So(q.BucketAggs[0].Field, ShouldEqual, "@hostname")
  94. So(q.BucketAggs[0].ID, ShouldEqual, "3")
  95. So(q.BucketAggs[0].Type, ShouldEqual, "terms")
  96. So(q.BucketAggs[0].Settings.Get("min_doc_count").MustInt64(), ShouldEqual, 1)
  97. So(q.BucketAggs[0].Settings.Get("order").MustString(), ShouldEqual, "desc")
  98. So(q.BucketAggs[0].Settings.Get("orderBy").MustString(), ShouldEqual, "_term")
  99. So(q.BucketAggs[0].Settings.Get("size").MustString(), ShouldEqual, "10")
  100. So(q.BucketAggs[1].Field, ShouldEqual, "@timestamp")
  101. So(q.BucketAggs[1].ID, ShouldEqual, "2")
  102. So(q.BucketAggs[1].Type, ShouldEqual, "date_histogram")
  103. So(q.BucketAggs[1].Settings.Get("interval").MustString(), ShouldEqual, "5m")
  104. So(q.BucketAggs[1].Settings.Get("min_doc_count").MustInt64(), ShouldEqual, 0)
  105. So(q.BucketAggs[1].Settings.Get("trimEdges").MustInt64(), ShouldEqual, 0)
  106. })
  107. })
  108. }