mirror of
https://github.com/grafana/grafana.git
synced 2025-07-30 21:32:22 +08:00

Move time series query logic to specific file. Remove model parser and move to time series query file, adds parser test.
119 lines
3.3 KiB
Go
119 lines
3.3 KiB
Go
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)
|
|
})
|
|
})
|
|
}
|