diff --git a/metricproviders/graphite/api.go b/metricproviders/graphite/api.go index fc304395b1..06833ac028 100644 --- a/metricproviders/graphite/api.go +++ b/metricproviders/graphite/api.go @@ -27,9 +27,11 @@ type APIClient struct { logCTX log.Entry } +var spaceRegex = regexp.MustCompile(`\s+`) + // Query performs a Graphite API query with the query it's passed func (api APIClient) Query(quer string) ([]dataPoint, error) { - query := api.trimQuery(quer) + query := api.sanitizeQuery(quer) u, err := url.Parse(fmt.Sprintf("./render?%s", query)) if err != nil { return []dataPoint{}, err @@ -75,9 +77,8 @@ func (api APIClient) Query(quer string) ([]dataPoint, error) { return result[0].DataPoints, nil } -func (api APIClient) trimQuery(q string) string { - space := regexp.MustCompile(`\s+`) - return space.ReplaceAllString(q, " ") +func (api APIClient) sanitizeQuery(q string) string { + return spaceRegex.ReplaceAllLiteralString(q, "") } type dataPoint struct { diff --git a/metricproviders/graphite/api_test.go b/metricproviders/graphite/api_test.go index bca62bbae2..74f0ef1176 100644 --- a/metricproviders/graphite/api_test.go +++ b/metricproviders/graphite/api_test.go @@ -91,6 +91,29 @@ func TestQuery(t *testing.T) { nil, `[]`, 200, + }, { + "query with surrounding whitespace", + fmt.Sprintf("\n %s \t \n", query), + targetQuery, + fromQuery, + goodResult, + nil, + fmt.Sprintf(`[ + { + "datapoints": [ + [ + %f, + %d + ] + ], + "target": "sumSeries(app.http.*.*.count)", + "tags": { + "aggregatedBy": "sum", + "name": "sumSeries(app.http.*.*.count)" + } + } + ]`, value, timestamp), + 200, }, { "graphite response body with invalid JSON", query,