From 1aeafa34d1f0c87df960cf4a65c53f2fdaa97163 Mon Sep 17 00:00:00 2001 From: Dimitris Sotirakis Date: Mon, 16 Aug 2021 14:45:20 +0300 Subject: [PATCH] Elasticsearch: Fix metric names for alert queries (#37871) * Use props names as metrics names * Make aliases work --- pkg/tsdb/elasticsearch/response_parser.go | 30 +++++++++++---------- pkg/tsdb/elasticsearch/time_series_query.go | 4 +-- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/pkg/tsdb/elasticsearch/response_parser.go b/pkg/tsdb/elasticsearch/response_parser.go index 47ddbd86629..7fe796e946b 100644 --- a/pkg/tsdb/elasticsearch/response_parser.go +++ b/pkg/tsdb/elasticsearch/response_parser.go @@ -42,7 +42,7 @@ var newResponseParser = func(responses []*es.SearchResponse, targets []*Query, d } } -// nolint:staticcheck // plugins.DataResponse deprecated +// nolint:staticcheck func (rp *responseParser) getTimeSeries() (*backend.QueryDataResponse, error) { result := backend.QueryDataResponse{ Responses: backend.Responses{}, @@ -93,7 +93,7 @@ func (rp *responseParser) getTimeSeries() (*backend.QueryDataResponse, error) { return &result, nil } -// nolint:staticcheck // plugins.* deprecated +// nolint:staticcheck func (rp *responseParser) processBuckets(aggs map[string]interface{}, target *Query, queryResult *backend.DataResponse, props map[string]string, depth int) error { var err error @@ -172,7 +172,7 @@ func (rp *responseParser) processBuckets(aggs map[string]interface{}, target *Qu return nil } -// nolint:staticcheck,gocyclo // plugins.* deprecated +// nolint:staticcheck,gocyclo func (rp *responseParser) processMetrics(esAgg *simplejson.Json, target *Query, query *backend.DataResponse, props map[string]string) error { frames := data.Frames{} @@ -203,7 +203,7 @@ func (rp *responseParser) processMetrics(esAgg *simplejson.Json, target *Query, tags["metric"] = countType frames = append(frames, data.NewFrame(metric.Field, data.NewField("time", nil, timeVector), - data.NewField("value", tags, values).SetConfig(&data.FieldConfig{DisplayNameFromDS: rp.getMetricName(tags["metric"]) + " " + metric.Field}))) + data.NewField("value", tags, values))) case percentilesType: buckets := esAggBuckets if len(buckets) == 0 { @@ -237,7 +237,7 @@ func (rp *responseParser) processMetrics(esAgg *simplejson.Json, target *Query, } frames = append(frames, data.NewFrame(metric.Field, data.NewField("time", nil, timeVector), - data.NewField("value", tags, values).SetConfig(&data.FieldConfig{DisplayNameFromDS: rp.getMetricName(tags["metric"]) + " " + metric.Field}))) + data.NewField("value", tags, values))) } case topMetricsType: buckets := esAggBuckets @@ -279,7 +279,7 @@ func (rp *responseParser) processMetrics(esAgg *simplejson.Json, target *Query, frames = append(frames, data.NewFrame(metricField.(string), data.NewField("time", nil, timeVector), - data.NewField("value", tags, values).SetConfig(&data.FieldConfig{DisplayNameFromDS: rp.getMetricName(tags["metric"]) + " " + metricField.(string)}), + data.NewField("value", tags, values), )) } @@ -326,7 +326,7 @@ func (rp *responseParser) processMetrics(esAgg *simplejson.Json, target *Query, labels := tags frames = append(frames, data.NewFrame(metric.Field, data.NewField("time", nil, timeVector), - data.NewField("value", labels, values).SetConfig(&data.FieldConfig{DisplayNameFromDS: rp.getMetricName(tags["metric"]) + " " + metric.Field}))) + data.NewField("value", labels, values))) } default: for k, v := range props { @@ -354,7 +354,7 @@ func (rp *responseParser) processMetrics(esAgg *simplejson.Json, target *Query, } frames = append(frames, data.NewFrame(metric.Field, data.NewField("time", nil, timeVector), - data.NewField("value", tags, values).SetConfig(&data.FieldConfig{DisplayNameFromDS: rp.getMetricName(tags["metric"]) + " " + metric.Field}))) + data.NewField("value", tags, values))) } } if query.Frames != nil { @@ -365,7 +365,7 @@ func (rp *responseParser) processMetrics(esAgg *simplejson.Json, target *Query, return nil } -// nolint:staticcheck // plugins.* deprecated +// nolint:staticcheck func (rp *responseParser) processAggregationDocs(esAgg *simplejson.Json, aggDef *BucketAgg, target *Query, queryResult *backend.DataResponse, props map[string]string) error { propKeys := make([]string, 0) @@ -517,8 +517,7 @@ func extractDataField(name string, v interface{}) *data.Field { } } -// TODO remove deprecations -// nolint:staticcheck // plugins.DataQueryResult deprecated +// nolint:staticcheck func (rp *responseParser) trimDatapoints(queryResult backend.DataResponse, target *Query) { var histogram *BucketAgg for _, bucketAgg := range target.BucketAggs { @@ -552,7 +551,7 @@ func (rp *responseParser) trimDatapoints(queryResult backend.DataResponse, targe } } -// nolint:staticcheck // plugins.DataQueryResult deprecated +// nolint:staticcheck func (rp *responseParser) nameFields(queryResult backend.DataResponse, target *Query) { set := make(map[string]struct{}) frames := queryResult.Frames @@ -568,12 +567,15 @@ func (rp *responseParser) nameFields(queryResult backend.DataResponse, target *Q metricTypeCount := len(set) for i := range frames { frames[i].Name = rp.getFieldName(*frames[i].Fields[1], target, metricTypeCount) + for _, field := range frames[i].Fields { + field.SetConfig(&data.FieldConfig{DisplayNameFromDS: rp.getFieldName(*frames[i].Fields[1], target, metricTypeCount)}) + } } } var aliasPatternRegex = regexp.MustCompile(`\{\{([\s\S]+?)\}\}`) -// nolint:staticcheck // plugins.* deprecated +// nolint:staticcheck func (rp *responseParser) getFieldName(dataField data.Field, target *Query, metricTypeCount int) string { metricType := dataField.Labels["metric"] metricName := rp.getMetricName(metricType) @@ -706,7 +708,7 @@ func findAgg(target *Query, aggID string) (*BucketAgg, error) { return nil, errors.New("can't found aggDef, aggID:" + aggID) } -// nolint:staticcheck // plugins.DataQueryResult deprecated +// nolint:staticcheck func getErrorFromElasticResponse(response *es.SearchResponse) string { var errorString string json := simplejson.NewFromAny(response.Error) diff --git a/pkg/tsdb/elasticsearch/time_series_query.go b/pkg/tsdb/elasticsearch/time_series_query.go index 6b7e7ea3f3e..4caf3cdde4d 100644 --- a/pkg/tsdb/elasticsearch/time_series_query.go +++ b/pkg/tsdb/elasticsearch/time_series_query.go @@ -28,7 +28,7 @@ var newTimeSeriesQuery = func(client es.Client, dataQuery []backend.DataQuery, } } -// nolint:staticcheck // plugins.DataQueryResult deprecated +// nolint:staticcheck func (e *timeSeriesQuery) execute() (*backend.QueryDataResponse, error) { tsQueryParser := newTimeSeriesQueryParser() queries, err := tsQueryParser.parse(e.dataQueries) @@ -63,7 +63,7 @@ func (e *timeSeriesQuery) execute() (*backend.QueryDataResponse, error) { return rp.getTimeSeries() } -// nolint:staticcheck // plugins.DataQueryResult deprecated +// nolint:staticcheck func (e *timeSeriesQuery) processQuery(q *Query, ms *es.MultiSearchRequestBuilder, from, to string, result backend.QueryDataResponse) error { minInterval, err := e.client.GetMinInterval(q.Interval)