diff --git a/pkg/tsdb/influxdb/influxdb.go b/pkg/tsdb/influxdb/influxdb.go index 010b18f4070..5268a573ab0 100644 --- a/pkg/tsdb/influxdb/influxdb.go +++ b/pkg/tsdb/influxdb/influxdb.go @@ -38,5 +38,17 @@ func init() { } func (e *InfluxDBExecutor) Execute(ctx context.Context, queries tsdb.QuerySlice, context *tsdb.QueryContext) *tsdb.BatchResult { - panic("missing implementation") + result := &tsdb.BatchResult{} + for _, v := range queries { + + query, err := ParseQuery(v.Model) + + if err != nil { + result.Error = err + return result + } + glog.Info("Influxdb executor", "query", query) + } + + return result } diff --git a/pkg/tsdb/influxdb/models.go b/pkg/tsdb/influxdb/models.go index ab711e3b83a..78f9ce2bb3e 100644 --- a/pkg/tsdb/influxdb/models.go +++ b/pkg/tsdb/influxdb/models.go @@ -1 +1,99 @@ package influxdb + +import "github.com/grafana/grafana/pkg/components/simplejson" + +type InfluxDBQuery struct { + Measurement string + Policy string + ResultFormat string + Tags []Tag + GroupBy []GroupBy +} + +type Tag struct { + Key string + Operator string + Value string +} + +type GroupBy struct { + Type string + Params []string +} + +type InfluxDbSelect struct { + Type string +} + +func ParseQuery(model *simplejson.Json) (*InfluxDBQuery, error) { + measurement, err := model.Get("measurement").String() + if err != nil { + return nil, err + } + + policy := model.Get("policy").MustString("default") + + resultFormat, err := model.Get("resultFormat").String() + if err != nil { + return nil, err + } + + var tags []Tag + var groupBy []GroupBy + + for _, g := range model.Get("groupBy").MustArray() { + group := simplejson.NewFromAny(g) + + typ, err := group.Get("type").String() + if err != nil { + return nil, err + } + + var params []string + for _, p := range group.Get("params").MustArray() { + param := simplejson.NewFromAny(p) + + pv, err := param.String() + if err != nil { + return nil, err + } + params = append(params, pv) + } + + gap := GroupBy{ + Type: typ, + Params: params, + } + + groupBy = append(groupBy, gap) + } + + for _, t := range model.Get("tags").MustArray() { + tag := simplejson.NewFromAny(t) + + key, err := tag.Get("key").String() + if err != nil { + return nil, err + } + + operator, err := tag.Get("operator").String() + if err != nil { + return nil, err + } + + value, err := tag.Get("value").String() + if err != nil { + return nil, err + } + + tags = append(tags, Tag{Key: key, Operator: operator, Value: value}) + } + + return &InfluxDBQuery{ + Measurement: measurement, + Policy: policy, + ResultFormat: resultFormat, + GroupBy: groupBy, + Tags: tags, + }, nil +}