Sfoglia il codice sorgente

stackdriver: add support for filtering to backend

Daniel Lee 7 anni fa
parent
commit
8b72853d36

+ 15 - 1
pkg/tsdb/stackdriver/stackdriver.go

@@ -10,6 +10,7 @@ import (
 	"net/url"
 	"path"
 	"regexp"
+	"strings"
 	"time"
 
 	"golang.org/x/net/context/ctxhttp"
@@ -98,11 +99,24 @@ func (e *StackdriverExecutor) buildQueries(tsdbQuery *tsdb.TsdbQuery) ([]*Stackd
 		}
 
 		metricType := query.Model.Get("metricType").MustString()
+		filterParts := query.Model.Get("filters").MustArray()
+
+		filterString := ""
+		for i, part := range filterParts {
+			mod := i % 4
+			if part == "AND" {
+				filterString += " "
+			} else if mod == 2 {
+				filterString += fmt.Sprintf(`"%s"`, part)
+			} else {
+				filterString += part.(string)
+			}
+		}
 
 		params := url.Values{}
 		params.Add("interval.startTime", startTime.UTC().Format(time.RFC3339))
 		params.Add("interval.endTime", endTime.UTC().Format(time.RFC3339))
-		params.Add("filter", "metric.type=\""+metricType+"\"")
+		params.Add("filter", strings.Trim(fmt.Sprintf(`metric.type="%s" %s`, metricType, filterString), " "))
 		params.Add("view", query.Model.Get("view").MustString())
 		setAggParams(&params, query)
 

+ 13 - 0
pkg/tsdb/stackdriver/stackdriver_test.go

@@ -51,6 +51,19 @@ func TestStackdriver(t *testing.T) {
 				So(queries[0].Params["view"][0], ShouldEqual, "FULL")
 			})
 
+			Convey("and query has filters", func() {
+				tsdbQuery.Queries[0].Model = simplejson.NewFromAny(map[string]interface{}{
+					"target":     "target",
+					"metricType": "a/metric/type",
+					"filters":    []interface{}{"key", "=", "value", "AND", "key2", "=", "value2"},
+				})
+
+				queries, err := executor.buildQueries(tsdbQuery)
+				So(err, ShouldBeNil)
+				So(len(queries), ShouldEqual, 1)
+				So(queries[0].Params["filter"][0], ShouldEqual, `metric.type="a/metric/type" key="value" key2="value2"`)
+			})
+
 			Convey("and query has aggregation mean set", func() {
 				tsdbQuery.Queries[0].Model = simplejson.NewFromAny(map[string]interface{}{
 					"target":             "target",