stackdriver: add support for filtering to backend

This commit is contained in:
Daniel Lee 2018-09-14 16:20:51 +02:00
parent dc6d025d9a
commit 8b72853d36
2 changed files with 28 additions and 1 deletions

View File

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

View File

@ -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",