فهرست منبع

tests(mqe): parse mqe query model

bergquist 9 سال پیش
والد
کامیت
1bdda76ba9

+ 28 - 1
pkg/tsdb/mqe/model_parser.go

@@ -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
 }

+ 53 - 6
pkg/tsdb/mqe/model_parser_test.go

@@ -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)
+
+			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(json, ShouldNotBeNil)
+			So(query.UseRawQuery, ShouldBeTrue)
+			So(query.RawQuery, ShouldEqual, "raw-query")
+			So(query.AddAppToAlias, ShouldBeTrue)
+			So(query.AddHostToAlias, ShouldBeTrue)
 		})
 	})
 }

+ 6 - 0
pkg/tsdb/mqe/response_handler.go

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

+ 23 - 2
pkg/tsdb/mqe/token_client.go

@@ -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
 }

+ 3 - 4
pkg/tsdb/mqe/token_client_test.go

@@ -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)
 	})
 }

+ 11 - 1
pkg/tsdb/mqe/types.go

@@ -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 {