diff --git a/server/queries.go b/server/queries.go index c98e500b7d..a11fbd5944 100644 --- a/server/queries.go +++ b/server/queries.go @@ -8,12 +8,14 @@ import ( "golang.org/x/net/context" "github.com/influxdata/chronograf" + "github.com/influxdata/chronograf/influx" "github.com/influxdata/chronograf/influx/queries" ) type QueryRequest struct { - ID string `json:"id"` - Query string `json:"query"` + ID string `json:"id"` + Query string `json:"query"` + TemplateVars []chronograf.TemplateVar `json:"tempVars,omitempty"` } type QueriesRequest struct { @@ -21,10 +23,12 @@ type QueriesRequest struct { } type QueryResponse struct { - ID string `json:"id"` - Query string `json:"query"` - QueryConfig chronograf.QueryConfig `json:"queryConfig"` - QueryAST *queries.SelectStatement `json:"queryAST,omitempty"` + ID string `json:"id"` + Query string `json:"query"` + QueryConfig chronograf.QueryConfig `json:"queryConfig"` + QueryAST *queries.SelectStatement `json:"queryAST,omitempty"` + QueryTemplated *string `json:"queryTemplated,omitempty"` + TemplateVars []chronograf.TemplateVar `json:"tempVars,omitempty"` } type QueriesResponse struct { @@ -62,17 +66,28 @@ func (s *Service) Queries(w http.ResponseWriter, r *http.Request) { Query: q.Query, } - qc := ToQueryConfig(q.Query) + query := q.Query + if len(q.TemplateVars) > 0 { + query = influx.TemplateReplace(query, q.TemplateVars) + qr.QueryTemplated = &query + } + + qc := ToQueryConfig(query) if err := s.DefaultRP(ctx, &qc, &src); err != nil { Error(w, http.StatusBadRequest, err.Error(), s.Logger) return } qr.QueryConfig = qc - if stmt, err := queries.ParseSelect(q.Query); err == nil { + if stmt, err := queries.ParseSelect(query); err == nil { qr.QueryAST = stmt } + if len(q.TemplateVars) > 0 { + qr.TemplateVars = q.TemplateVars + qr.QueryConfig.RawText = &qr.Query + } + qr.QueryConfig.ID = q.ID res.Queries[i] = qr } diff --git a/ui/yarn.lock b/ui/yarn.lock index 9632f32033..83f59bc6c3 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -6331,11 +6331,11 @@ sell@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/sell/-/sell-1.0.0.tgz#3baca7e51f78ddee9e22eea1ac747a6368bd1630" -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.1.0, semver@~5.3.0: +"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -semver@~4.3.3: +"semver@2.x || 3.x || 4 || 5", semver@~4.3.3: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"