| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- package elasticsearch
- import (
- "testing"
- "github.com/grafana/grafana/pkg/components/simplejson"
- "github.com/grafana/grafana/pkg/models"
- "github.com/grafana/grafana/pkg/tsdb"
- . "github.com/smartystreets/goconvey/convey"
- )
- func TestTimeSeriesQueryParser(t *testing.T) {
- Convey("Test time series query parser", t, func() {
- ds := &models.DataSource{}
- p := newTimeSeriesQueryParser(ds)
- Convey("Should be able to parse query", func() {
- json, err := simplejson.NewJson([]byte(`{
- "timeField": "@timestamp",
- "query": "@metric:cpu",
- "alias": "{{@hostname}} {{metric}}",
- "metrics": [
- {
- "field": "@value",
- "id": "1",
- "meta": {},
- "settings": {
- "percents": [
- "90"
- ]
- },
- "type": "percentiles"
- },
- {
- "type": "count",
- "field": "select field",
- "id": "4",
- "settings": {},
- "meta": {}
- }
- ],
- "bucketAggs": [
- {
- "fake": true,
- "field": "@hostname",
- "id": "3",
- "settings": {
- "min_doc_count": 1,
- "order": "desc",
- "orderBy": "_term",
- "size": "10"
- },
- "type": "terms"
- },
- {
- "field": "@timestamp",
- "id": "2",
- "settings": {
- "interval": "5m",
- "min_doc_count": 0,
- "trimEdges": 0
- },
- "type": "date_histogram"
- }
- ]
- }`))
- So(err, ShouldBeNil)
- tsdbQuery := &tsdb.TsdbQuery{
- Queries: []*tsdb.Query{
- {
- DataSource: ds,
- Model: json,
- },
- },
- }
- tsQuery, err := p.parse(tsdbQuery)
- So(err, ShouldBeNil)
- So(tsQuery.queries, ShouldHaveLength, 1)
- q := tsQuery.queries[0]
- So(q.TimeField, ShouldEqual, "@timestamp")
- So(q.RawQuery, ShouldEqual, "@metric:cpu")
- So(q.Alias, ShouldEqual, "{{@hostname}} {{metric}}")
- So(q.Metrics, ShouldHaveLength, 2)
- So(q.Metrics[0].Field, ShouldEqual, "@value")
- So(q.Metrics[0].ID, ShouldEqual, "1")
- So(q.Metrics[0].Type, ShouldEqual, "percentiles")
- So(q.Metrics[0].Hide, ShouldBeFalse)
- So(q.Metrics[0].PipelineAggregate, ShouldEqual, "")
- So(q.Metrics[0].Settings.Get("percents").MustStringArray()[0], ShouldEqual, "90")
- So(q.Metrics[1].Field, ShouldEqual, "select field")
- So(q.Metrics[1].ID, ShouldEqual, "4")
- So(q.Metrics[1].Type, ShouldEqual, "count")
- So(q.Metrics[1].Hide, ShouldBeFalse)
- So(q.Metrics[1].PipelineAggregate, ShouldEqual, "")
- So(q.Metrics[1].Settings.MustMap(), ShouldBeEmpty)
- So(q.BucketAggs, ShouldHaveLength, 2)
- So(q.BucketAggs[0].Field, ShouldEqual, "@hostname")
- So(q.BucketAggs[0].ID, ShouldEqual, "3")
- So(q.BucketAggs[0].Type, ShouldEqual, "terms")
- So(q.BucketAggs[0].Settings.Get("min_doc_count").MustInt64(), ShouldEqual, 1)
- So(q.BucketAggs[0].Settings.Get("order").MustString(), ShouldEqual, "desc")
- So(q.BucketAggs[0].Settings.Get("orderBy").MustString(), ShouldEqual, "_term")
- So(q.BucketAggs[0].Settings.Get("size").MustString(), ShouldEqual, "10")
- So(q.BucketAggs[1].Field, ShouldEqual, "@timestamp")
- So(q.BucketAggs[1].ID, ShouldEqual, "2")
- So(q.BucketAggs[1].Type, ShouldEqual, "date_histogram")
- So(q.BucketAggs[1].Settings.Get("interval").MustString(), ShouldEqual, "5m")
- So(q.BucketAggs[1].Settings.Get("min_doc_count").MustInt64(), ShouldEqual, 0)
- So(q.BucketAggs[1].Settings.Get("trimEdges").MustInt64(), ShouldEqual, 0)
- })
- })
- }
|