diff --git a/influx/influx.go b/influx/influx.go index f01234af5b..c39eb844a0 100644 --- a/influx/influx.go +++ b/influx/influx.go @@ -68,17 +68,20 @@ func (c *Client) query(u *url.URL, q chronograf.Query) (chronograf.Response, err return nil, err } req.Header.Set("Content-Type", "application/json") - - c.Logger. + command := q.Command + if len(q.TemplateVars) > 0 { + command = TemplateReplace(q.Command, q.TemplateVars) + } + logs := c.Logger. WithField("component", "proxy"). WithField("host", req.Host). - WithField("command", q.Command). + WithField("command", command). WithField("db", q.DB). - WithField("rp", q.RP). - Debug("query") + WithField("rp", q.RP) + logs.Debug("query") params := req.URL.Query() - params.Set("q", q.Command) + params.Set("q", command) params.Set("db", q.DB) params.Set("rp", q.RP) params.Set("epoch", "ms") @@ -111,13 +114,7 @@ func (c *Client) query(u *url.URL, q chronograf.Query) (chronograf.Response, err // If we got a valid decode error, send that back if decErr != nil { - c.Logger. - WithField("component", "proxy"). - WithField("host", req.Host). - WithField("command", q.Command). - WithField("db", q.DB). - WithField("rp", q.RP). - WithField("influx_status", resp.StatusCode). + logs.WithField("influx_status", resp.StatusCode). Error("Error parsing results from influxdb: err:", decErr) return nil, decErr } @@ -125,12 +122,7 @@ func (c *Client) query(u *url.URL, q chronograf.Query) (chronograf.Response, err // If we don't have an error in our json response, and didn't get statusOK // then send back an error if resp.StatusCode != http.StatusOK && response.Err != "" { - c.Logger. - WithField("component", "proxy"). - WithField("host", req.Host). - WithField("command", q.Command). - WithField("db", q.DB). - WithField("rp", q.RP). + logs. WithField("influx_status", resp.StatusCode). Error("Received non-200 response from influxdb") diff --git a/influx/influx_test.go b/influx/influx_test.go index 6fa4a859fa..535fd97447 100644 --- a/influx/influx_test.go +++ b/influx/influx_test.go @@ -82,6 +82,7 @@ func Test_Influx_HTTPS_Failure(t *testing.T) { func Test_Influx_HTTPS_InsecureSkipVerify(t *testing.T) { t.Parallel() called := false + q := "" ts := httptest.NewTLSServer(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { rw.WriteHeader(http.StatusOK) rw.Write([]byte(`{}`)) @@ -89,6 +90,8 @@ func Test_Influx_HTTPS_InsecureSkipVerify(t *testing.T) { if path := r.URL.Path; path != "/query" { t.Error("Expected the path to contain `/query` but was", path) } + values := r.URL.Query() + q = values.Get("q") })) defer ts.Close() @@ -118,6 +121,34 @@ func Test_Influx_HTTPS_InsecureSkipVerify(t *testing.T) { if called == false { t.Error("Expected http request to Influx but there was none") } + called = false + q = "" + query = chronograf.Query{ + Command: "select $field from cpu", + TemplateVars: []chronograf.TemplateVar{ + { + Var: "$field", + Values: []chronograf.TemplateValue{ + { + Value: "usage_user", + Type: "fieldKey", + }, + }, + }, + }, + } + _, err = series.Query(ctx, query) + if err != nil { + t.Fatal("Expected no error but was", err) + } + + if called == false { + t.Error("Expected http request to Influx but there was none") + } + + if q != `select "usage_user" from cpu` { + t.Errorf("Unexpected query: %s", q) + } } func Test_Influx_CancelsInFlightRequests(t *testing.T) {