From 8588bb386c77748b0c94fa368d393c4bd8f636e2 Mon Sep 17 00:00:00 2001 From: bergquist Date: Wed, 5 Oct 2016 16:57:32 +0200 Subject: [PATCH] feat(influxdb): add conditions property to tag --- pkg/tsdb/influxdb/models.go | 7 ++++--- pkg/tsdb/influxdb/parser.go | 21 ++++++++++++++------- pkg/tsdb/influxdb/parser_test.go | 8 +++++++- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/pkg/tsdb/influxdb/models.go b/pkg/tsdb/influxdb/models.go index a70fe7f5d47..4895c9c393b 100644 --- a/pkg/tsdb/influxdb/models.go +++ b/pkg/tsdb/influxdb/models.go @@ -10,9 +10,10 @@ type Query struct { } type Tag struct { - Key string - Operator string - Value string + Key string + Operator string + Value string + Condition string } type Select []QueryPart diff --git a/pkg/tsdb/influxdb/parser.go b/pkg/tsdb/influxdb/parser.go index 0e024ab4f27..c158d5879a1 100644 --- a/pkg/tsdb/influxdb/parser.go +++ b/pkg/tsdb/influxdb/parser.go @@ -69,23 +69,30 @@ func (*InfluxdbQueryParser) parseTags(model *simplejson.Json) ([]*Tag, error) { var result []*Tag for _, t := range model.Get("tags").MustArray() { tagJson := simplejson.NewFromAny(t) + tag := &Tag{} + var err error - key, err := tagJson.Get("key").String() + tag.Key, err = tagJson.Get("key").String() + if err != nil { + return nil, err + } + + tag.Value, err = tagJson.Get("value").String() if err != nil { return nil, err } operator, err := tagJson.Get("operator").String() - if err != nil { - return nil, err + if err == nil { + tag.Operator = operator } - value, err := tagJson.Get("value").String() - if err != nil { - return nil, err + condition, err := tagJson.Get("condition").String() + if err == nil { + tag.Condition = condition } - result = append(result, &Tag{Key: key, Operator: operator, Value: value}) + result = append(result, tag) } return result, nil diff --git a/pkg/tsdb/influxdb/parser_test.go b/pkg/tsdb/influxdb/parser_test.go index 19e2c228f1a..3dc76124365 100644 --- a/pkg/tsdb/influxdb/parser_test.go +++ b/pkg/tsdb/influxdb/parser_test.go @@ -89,6 +89,12 @@ func TestInfluxdbQueryParser(t *testing.T) { "key": "datacenter", "operator": "=", "value": "America" + }, + { + "condition": "OR", + "key": "hostname", + "operator": "=", + "value": "server1" } ] } @@ -101,7 +107,7 @@ func TestInfluxdbQueryParser(t *testing.T) { So(err, ShouldBeNil) So(len(res.GroupBy), ShouldEqual, 3) So(len(res.Selects), ShouldEqual, 3) - So(len(res.Tags), ShouldEqual, 1) + So(len(res.Tags), ShouldEqual, 2) }) }) }