tests(mqe): parse mqe query model

This commit is contained in:
bergquist 2016-11-14 14:49:58 +01:00
parent c973241435
commit 1bdda76ba9
6 changed files with 124 additions and 14 deletions

View File

@ -8,5 +8,32 @@ import (
type MQEQueryParser struct{}
func (qp *MQEQueryParser) Parse(model *simplejson.Json, dsInfo *tsdb.DataSourceInfo) (*MQEQuery, error) {
return nil, nil
query := &MQEQuery{}
query.AddAppToAlias = model.Get("addAppToAlias").MustBool(false)
query.AddHostToAlias = model.Get("addHostToAlias").MustBool(false)
query.UseRawQuery = model.Get("rawQuery").MustBool(false)
query.RawQuery = model.Get("query").MustString("")
query.Apps = model.Get("apps").MustStringArray([]string{})
query.Hosts = model.Get("hosts").MustStringArray([]string{})
var metrics []MQEMetric
var err error
for _, metricsObj := range model.Get("metrics").MustArray() {
metricJson := simplejson.NewFromAny(metricsObj)
var m MQEMetric
m.Alias = metricJson.Get("alias").MustString("")
m.Metric, err = metricJson.Get("metric").String()
if err != nil {
return nil, err
}
metrics = append(metrics, m)
}
query.Metrics = metrics
return query, nil
}

View File

@ -16,8 +16,6 @@ func TestMQEQueryParser(t *testing.T) {
JsonData: simplejson.New(),
}
queryContext := &tsdb.QueryContext{}
Convey("can parse simple mqe model", func() {
json := `
{
@ -39,15 +37,19 @@ func TestMQEQueryParser(t *testing.T) {
query, err := parser.Parse(modelJson, dsInfo)
So(err, ShouldBeNil)
So(query.UseRawQuery, ShouldBeFalse)
rawQuery := query.Build(queryContext)
So(rawQuery, ShouldEqual, "")
So(len(query.Apps), ShouldEqual, 0)
So(query.Hosts[0], ShouldEqual, "staples-lab-1")
So(query.Metrics[0].Metric, ShouldEqual, "os.cpu.all*")
})
Convey("can parse multi serie mqe model", func() {
json := `
{
"apps": [],
"apps": [
"demoapp"
],
"hosts": [
"staples-lab-1"
],
@ -65,8 +67,53 @@ func TestMQEQueryParser(t *testing.T) {
"addHostToAlias": true
}
`
modelJson, err := simplejson.NewJson([]byte(json))
So(err, ShouldBeNil)
So(json, ShouldNotBeNil)
query, err := parser.Parse(modelJson, dsInfo)
So(err, ShouldBeNil)
So(query.UseRawQuery, ShouldBeFalse)
So(query.Apps[0], ShouldEqual, "demoapp")
So(query.Metrics[0].Metric, ShouldEqual, "os.cpu.all.active_percentage")
So(query.Metrics[1].Metric, ShouldEqual, "os.disk.sda.io_time")
})
Convey("can parse raw query", func() {
json := `
{
"addAppToAlias": true,
"addHostToAlias": true,
"apps": [],
"hosts": [
"staples-lab-1"
],
"metrics": [
{
"alias": "cpu active",
"metric": "os.cpu.all.active_percentage"
},
{
"alias": "disk sda time",
"metric": "os.disk.sda.io_time"
}
],
"rawQuery": true,
"query": "raw-query",
"refId": "A",
"addAppToAlias": true,
"addHostToAlias": true
}
`
modelJson, err := simplejson.NewJson([]byte(json))
So(err, ShouldBeNil)
query, err := parser.Parse(modelJson, dsInfo)
So(err, ShouldBeNil)
So(query.UseRawQuery, ShouldBeTrue)
So(query.RawQuery, ShouldEqual, "raw-query")
So(query.AddAppToAlias, ShouldBeTrue)
So(query.AddHostToAlias, ShouldBeTrue)
})
})
}

View File

@ -0,0 +1,6 @@
package mqe
// wildcard as alias
// add host to alias
// add app to alias
// regular alias

View File

@ -25,7 +25,24 @@ func NewTokenClient() *TokenClient {
}
}
func (client *TokenClient) GetTokenData(ctx context.Context, datasource *tsdb.DataSourceInfo) (*TokenResponse, error) {
var cache map[int64]*TokenBody = map[int64]*TokenBody{}
//Replace this stupid cache with internal cache from grafana master before merging
func (client *TokenClient) GetTokenData(ctx context.Context, datasource *tsdb.DataSourceInfo) (*TokenBody, error) {
_, excist := cache[datasource.Id]
if !excist {
b, err := client.RequestTokenData(ctx, datasource)
if err != nil {
return nil, err
}
cache[datasource.Id] = b
}
return cache[datasource.Id], nil
}
func (client *TokenClient) RequestTokenData(ctx context.Context, datasource *tsdb.DataSourceInfo) (*TokenBody, error) {
u, _ := url.Parse(datasource.Url)
u.Path = path.Join(u.Path, "token")
@ -57,5 +74,9 @@ func (client *TokenClient) GetTokenData(ctx context.Context, datasource *tsdb.Da
return nil, err
}
return result, nil
if !result.Success {
return nil, fmt.Errorf("Request failed for unknown reason.")
}
return &result.Body, nil
}

View File

@ -18,11 +18,10 @@ func TestTokenClient(t *testing.T) {
client := NewTokenClient()
body, err := client.GetTokenData(context.TODO(), dsInfo)
body, err := client.RequestTokenData(context.TODO(), dsInfo)
So(err, ShouldBeNil)
So(len(body.Body.Functions), ShouldBeGreaterThan, 1)
So(len(body.Body.Metrics), ShouldBeGreaterThan, 1)
So(body.Success, ShouldBeTrue)
So(len(body.Functions), ShouldBeGreaterThan, 1)
So(len(body.Metrics), ShouldBeGreaterThan, 1)
})
}

View File

@ -4,10 +4,20 @@ import (
"github.com/grafana/grafana/pkg/tsdb"
)
type MQEMetric struct {
Metric string
Alias string
}
type MQEQuery struct {
Metrics []string
Metrics []MQEMetric
Hosts []string
Apps []string
AddAppToAlias bool
AddHostToAlias bool
UseRawQuery bool
RawQuery string
}
func (q *MQEQuery) Build(queryContext *tsdb.QueryContext) string {