From cc25b07439aa4830f36ee650ada4ea408ffe572d Mon Sep 17 00:00:00 2001 From: liugq Date: Mon, 3 Jul 2023 16:09:22 +0800 Subject: [PATCH] insight support terms top by sorted sub metric --- model/insight/metric_data.go | 6 ++++++ plugin/api/insight/metric_util.go | 16 ++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/model/insight/metric_data.go b/model/insight/metric_data.go index 7125eeb8..66af1812 100644 --- a/model/insight/metric_data.go +++ b/model/insight/metric_data.go @@ -16,6 +16,7 @@ type Metric struct { BucketSize string `json:"bucket_size,omitempty"` Filter interface{} `json:"filter,omitempty"` Groups []MetricGroupItem `json:"groups,omitempty"` //bucket group + Sort []GroupSort `json:"sort,omitempty"` ClusterId string `json:"cluster_id,omitempty"` Formula string `json:"formula,omitempty"` Items []MetricItem `json:"items"` @@ -25,6 +26,11 @@ type Metric struct { BucketLabel *BucketLabel `json:"bucket_label,omitempty"` } +type GroupSort struct { + Key string `json:"key"` + Direction string `json:"direction"` +} + type MetricGroupItem struct { Field string `json:"field"` Limit int `json:"limit"` diff --git a/plugin/api/insight/metric_util.go b/plugin/api/insight/metric_util.go index b20ec49f..c1121288 100644 --- a/plugin/api/insight/metric_util.go +++ b/plugin/api/insight/metric_util.go @@ -125,11 +125,19 @@ func GenerateQuery(metric *insight.Metric) (interface{}, error) { if limit <= 0 { limit = 10 } + termsCfg := util.MapStr{ + "field": groups[i].Field, + "size": limit, + } + if i == grpLength - 1 && len(metric.Sort) > 0 { + var termsOrder []interface{} + for _, sortItem := range metric.Sort { + termsOrder = append(termsOrder, util.MapStr{sortItem.Key: sortItem.Direction}) + } + termsCfg["order"] = termsOrder + } groupAgg := util.MapStr{ - "terms": util.MapStr{ - "field": groups[i].Field, - "size": limit, - }, + "terms": termsCfg, } groupID := util.GetUUID() if lastGroupAgg != nil {