mirror of
https://github.com/grafana/grafana.git
synced 2025-02-15 18:13:32 -06:00
tests(mqe): parse mqe query model
This commit is contained in:
parent
c973241435
commit
1bdda76ba9
@ -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
|
||||
}
|
||||
|
@ -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)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
6
pkg/tsdb/mqe/response_handler.go
Normal file
6
pkg/tsdb/mqe/response_handler.go
Normal file
@ -0,0 +1,6 @@
|
||||
package mqe
|
||||
|
||||
// wildcard as alias
|
||||
// add host to alias
|
||||
// add app to alias
|
||||
// regular alias
|
@ -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
|
||||
}
|
||||
|
@ -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)
|
||||
})
|
||||
}
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user