From 2374d0987766d96c1cd6be78898c95bae3652f27 Mon Sep 17 00:00:00 2001 From: utkarshcmu Date: Mon, 17 Oct 2016 14:50:53 -0700 Subject: [PATCH] Fixed query parsing bugs --- pkg/tsdb/opentsdb/opentsdb.go | 116 ++++++++++++++++++---------------- 1 file changed, 61 insertions(+), 55 deletions(-) diff --git a/pkg/tsdb/opentsdb/opentsdb.go b/pkg/tsdb/opentsdb/opentsdb.go index 349592dcde8..bbd67c8658d 100644 --- a/pkg/tsdb/opentsdb/opentsdb.go +++ b/pkg/tsdb/opentsdb/opentsdb.go @@ -60,61 +60,8 @@ func (e *OpenTsdbExecutor) Execute(ctx context.Context, queries tsdb.QuerySlice, tsdbQuery.Queries = make([]map[string]interface{}, len(queries)) for i := 0; i < len(queries); i++ { - - metric := make(map[string]interface{}) - - // Setting metric and aggregator - metric["metric"] = queries[i].Model.Get("metric").MustString() - metric["aggregator"] = queries[i].Model.Get("aggregator").MustString() - - // Setting downsampling options - disableDownsampling := queries[i].Model.Get("disableDownsampling").MustBool() - if !disableDownsampling { - downsampleInterval := queries[i].Model.Get("downsampleInterval").MustString() - if downsampleInterval == "" { - downsampleInterval = "1m" //default value for blank - } - downsample := downsampleInterval + "-" + queries[i].Model.Get("downsampleAggregator").MustString() - if queries[i].Model.Get("downsampleFillPolicy").MustString() != "none" { - metric["downsample"] = downsample + "-" + queries[i].Model.Get("downsampleFillPolicy").MustString() - } - } - - // Setting rate options - if queries[i].Model.Get("shouldComputeRate").MustBool() { - metric["rate"] = true - rateOptions := make(map[string]interface{}) - rateOptions["counter"] = queries[i].Model.Get("isCounter").MustBool() - counterMax, counterMaxCheck := queries[i].Model.CheckGet("counterMax") - if counterMaxCheck { - counterMaxVal, err := strconv.ParseFloat(counterMax.MustString(),64) - if err == nil { - rateOptions["counterMax"] = counterMaxVal - } - } - resetValue, resetValueCheck := queries[i].Model.CheckGet("counterResetValue") - if resetValueCheck { - resetValueVal, err := strconv.ParseFloat(resetValue.MustString(),64) - if err == nil { - rateOptions["resetValue"] = resetValueVal - } - } - metric["rateOptions"] = rateOptions - } - - // Setting tags - tags, tagsCheck := queries[i].Model.CheckGet("tags") - if tagsCheck && len(tags.MustMap()) > 0 { - metric["tags"] = tags.MustMap() - } - - // Setting filters - filters, filtersCheck := queries[i].Model.CheckGet("filters") - if filtersCheck && len(filters.MustArray()) > 0 { - metric["filters"] = filters.MustArray() - } - - tsdbQuery.Queries[i] = metric + metric := e.buildMetric(queries[i]) + tsdbQuery.Queries[i] = metric } if setting.Env == setting.DEV { @@ -205,3 +152,62 @@ func (e *OpenTsdbExecutor) parseResponse(query OpenTsdbQuery, res *http.Response queryResults["A"] = queryRes return queryResults, nil } + +func (e *OpenTsdbExecutor) buildMetric(query *tsdb.Query) (map[string]interface{}) { + + metric := make(map[string]interface{}) + + // Setting metric and aggregator + metric["metric"] = query.Model.Get("metric").MustString() + metric["aggregator"] = query.Model.Get("aggregator").MustString() + + // Setting downsampling options + disableDownsampling := query.Model.Get("disableDownsampling").MustBool() + if !disableDownsampling { + downsampleInterval := query.Model.Get("downsampleInterval").MustString() + if downsampleInterval == "" { + downsampleInterval = "1m" //default value for blank + } + downsample := downsampleInterval + "-" + query.Model.Get("downsampleAggregator").MustString() + if query.Model.Get("downsampleFillPolicy").MustString() != "none" { + metric["downsample"] = downsample + "-" + query.Model.Get("downsampleFillPolicy").MustString() + } else { + metric["downsample"] = downsample + } + } + + // Setting rate options + if query.Model.Get("shouldComputeRate").MustBool() { + + metric["rate"] = true + rateOptions := make(map[string]interface{}) + rateOptions["counter"] = query.Model.Get("isCounter").MustBool() + + counterMax, counterMaxCheck := query.Model.CheckGet("counterMax") + if counterMaxCheck { + rateOptions["counterMax"] = counterMax.MustFloat64() + } + + resetValue, resetValueCheck := query.Model.CheckGet("counterResetValue") + if resetValueCheck { + rateOptions["resetValue"] = resetValue.MustFloat64() + } + + metric["rateOptions"] = rateOptions + } + + // Setting tags + tags, tagsCheck := query.Model.CheckGet("tags") + if tagsCheck && len(tags.MustMap()) > 0 { + metric["tags"] = tags.MustMap() + } + + // Setting filters + filters, filtersCheck := query.Model.CheckGet("filters") + if filtersCheck && len(filters.MustArray()) > 0 { + metric["filters"] = filters.MustArray() + } + + return metric + +}