From 844ece8e956a586b87b6f59700e76b40a1c04133 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Mon, 26 Jul 2021 16:44:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=87=E6=A0=87=E5=9B=BE=E8=A1=A8=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E8=AE=BE=E7=BD=AE=E5=BF=BD=E7=95=A5=E7=A9=BA=E5=80=BC?= =?UTF-8?q?=E5=92=8C=E5=85=B6=E4=BB=96=E5=AF=B9=E8=B1=A1=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/db/models/metric_chart_dao.go | 27 ++- internal/db/models/metric_chart_model.go | 48 +++--- internal/db/models/metric_chart_model_ext.go | 16 ++ internal/db/models/metric_stat_dao.go | 154 +++++++++++++++--- internal/rpc/services/service_admin.go | 4 +- internal/rpc/services/service_metric_chart.go | 38 +++-- .../rpc/services/service_server_stat_board.go | 12 +- 7 files changed, 224 insertions(+), 75 deletions(-) diff --git a/internal/db/models/metric_chart_dao.go b/internal/db/models/metric_chart_dao.go index 241a71d4..81373cd8 100644 --- a/internal/db/models/metric_chart_dao.go +++ b/internal/db/models/metric_chart_dao.go @@ -74,7 +74,7 @@ func (this *MetricChartDAO) FindMetricChartName(tx *dbs.Tx, chartId int64) (stri } // CreateChart 创建图表 -func (this *MetricChartDAO) CreateChart(tx *dbs.Tx, itemId int64, name string, chartType string, widthDiv int32, maxItems int32, params maps.Map) (int64, error) { +func (this *MetricChartDAO) CreateChart(tx *dbs.Tx, itemId int64, name string, chartType string, widthDiv int32, maxItems int32, params maps.Map, ignoreEmptyKeys bool, ignoredKeys []string) (int64, error) { op := NewMetricChartOperator() op.ItemId = itemId op.Name = name @@ -90,13 +90,25 @@ func (this *MetricChartDAO) CreateChart(tx *dbs.Tx, itemId int64, name string, c return 0, err } op.Params = paramsJSON + op.IgnoreEmptyKeys = ignoreEmptyKeys + + if len(ignoredKeys) == 0 { + op.IgnoredKeys = "[]" + } else { + ignoredKeysJSON, err := json.Marshal(ignoredKeys) + if err != nil { + return 0, err + } + op.IgnoredKeys = ignoredKeysJSON + } + op.IsOn = true op.State = MetricChartStateEnabled return this.SaveInt64(tx, op) } // UpdateChart 修改图表 -func (this *MetricChartDAO) UpdateChart(tx *dbs.Tx, chartId int64, name string, chartType string, widthDiv int32, maxItems int32, params maps.Map, isOn bool) error { +func (this *MetricChartDAO) UpdateChart(tx *dbs.Tx, chartId int64, name string, chartType string, widthDiv int32, maxItems int32, params maps.Map, ignoreEmptyKeys bool, ignoredKeys []string, isOn bool) error { if chartId <= 0 { return errors.New("invalid chartId") } @@ -115,6 +127,17 @@ func (this *MetricChartDAO) UpdateChart(tx *dbs.Tx, chartId int64, name string, return err } op.Params = paramsJSON + op.IgnoreEmptyKeys = ignoreEmptyKeys + + if len(ignoredKeys) == 0 { + op.IgnoredKeys = "[]" + } else { + ignoredKeysJSON, err := json.Marshal(ignoredKeys) + if err != nil { + return err + } + op.IgnoredKeys = ignoredKeysJSON + } op.IsOn = isOn diff --git a/internal/db/models/metric_chart_model.go b/internal/db/models/metric_chart_model.go index f5d0b23d..fab4dfda 100644 --- a/internal/db/models/metric_chart_model.go +++ b/internal/db/models/metric_chart_model.go @@ -2,31 +2,35 @@ package models // MetricChart 指标图表 type MetricChart struct { - Id uint32 `field:"id"` // ID - ItemId uint32 `field:"itemId"` // 指标ID - Name string `field:"name"` // 名称 - Code string `field:"code"` // 代号 - Type string `field:"type"` // 图形类型 - WidthDiv int32 `field:"widthDiv"` // 宽度划分 - Params string `field:"params"` // 图形参数 - Order uint32 `field:"order"` // 排序 - IsOn uint8 `field:"isOn"` // 是否启用 - State uint8 `field:"state"` // 状态 - MaxItems uint32 `field:"maxItems"` // 最多条目 + Id uint32 `field:"id"` // ID + ItemId uint32 `field:"itemId"` // 指标ID + Name string `field:"name"` // 名称 + Code string `field:"code"` // 代号 + Type string `field:"type"` // 图形类型 + WidthDiv int32 `field:"widthDiv"` // 宽度划分 + Params string `field:"params"` // 图形参数 + Order uint32 `field:"order"` // 排序 + IsOn uint8 `field:"isOn"` // 是否启用 + State uint8 `field:"state"` // 状态 + MaxItems uint32 `field:"maxItems"` // 最多条目 + IgnoreEmptyKeys uint8 `field:"ignoreEmptyKeys"` // 忽略空的键值 + IgnoredKeys string `field:"ignoredKeys"` // 忽略键值 } type MetricChartOperator struct { - Id interface{} // ID - ItemId interface{} // 指标ID - Name interface{} // 名称 - Code interface{} // 代号 - Type interface{} // 图形类型 - WidthDiv interface{} // 宽度划分 - Params interface{} // 图形参数 - Order interface{} // 排序 - IsOn interface{} // 是否启用 - State interface{} // 状态 - MaxItems interface{} // 最多条目 + Id interface{} // ID + ItemId interface{} // 指标ID + Name interface{} // 名称 + Code interface{} // 代号 + Type interface{} // 图形类型 + WidthDiv interface{} // 宽度划分 + Params interface{} // 图形参数 + Order interface{} // 排序 + IsOn interface{} // 是否启用 + State interface{} // 状态 + MaxItems interface{} // 最多条目 + IgnoreEmptyKeys interface{} // 忽略空的键值 + IgnoredKeys interface{} // 忽略键值 } func NewMetricChartOperator() *MetricChartOperator { diff --git a/internal/db/models/metric_chart_model_ext.go b/internal/db/models/metric_chart_model_ext.go index 2640e7f9..4d2fcc07 100644 --- a/internal/db/models/metric_chart_model_ext.go +++ b/internal/db/models/metric_chart_model_ext.go @@ -1 +1,17 @@ package models + +import "encoding/json" + +func (this *MetricChart) DecodeIgnoredKeys() []string { + if len(this.IgnoredKeys) == 0 { + return []string{} + } + + var result = []string{} + err := json.Unmarshal([]byte(this.IgnoredKeys), &result) + if err != nil { + // 这里忽略错误 + return result + } + return result +} diff --git a/internal/db/models/metric_stat_dao.go b/internal/db/models/metric_stat_dao.go index 7b00c291..3c506dc1 100644 --- a/internal/db/models/metric_stat_dao.go +++ b/internal/db/models/metric_stat_dao.go @@ -86,6 +86,7 @@ func (this *MetricStatDAO) DeleteOldItemStats(tx *dbs.Tx, itemId int64, version _, err := this.Query(tx). Attr("itemId", itemId). Where("version<:version"). + Param("version", version). Delete() return err } @@ -123,7 +124,7 @@ func (this *MetricStatDAO) ListItemStats(tx *dbs.Tx, itemId int64, version int32 // FindItemStatsAtLastTime 取得所有集群最近一次计时前 N 个数据 // 适合每条数据中包含不同的Key的场景 -func (this *MetricStatDAO) FindItemStatsAtLastTime(tx *dbs.Tx, itemId int64, version int32, size int64) (result []*MetricStat, err error) { +func (this *MetricStatDAO) FindItemStatsAtLastTime(tx *dbs.Tx, itemId int64, ignoreEmptyKeys bool, ignoreKeys []string, version int32, size int64) (result []*MetricStat, err error) { // 最近一次时间 statOne, err := this.Query(tx). Attr("itemId", itemId). @@ -138,8 +139,7 @@ func (this *MetricStatDAO) FindItemStatsAtLastTime(tx *dbs.Tx, itemId int64, ver } var lastStat = statOne.(*MetricStat) var lastTime = lastStat.Time - - _, err = this.Query(tx). + var query = this.Query(tx). Attr("itemId", itemId). Attr("version", version). Attr("time", lastTime). @@ -149,14 +149,26 @@ func (this *MetricStatDAO) FindItemStatsAtLastTime(tx *dbs.Tx, itemId int64, ver Desc("value"). Group("keys"). Limit(size). - Slice(&result). + Slice(&result) + if ignoreEmptyKeys { + query.Where("NOT JSON_CONTAINS(`keys`, '\"\"')") + } + if len(ignoreKeys) > 0 { + ignoreKeysJSON, err := json.Marshal(ignoreKeys) + if err != nil { + return nil, err + } + query.Where("NOT JSON_CONTAINS(:ignoredKeys, JSON_EXTRACT(`keys`, '$[0]'))") // TODO $[0] 需要换成keys中的primary key位置 + query.Param("ignoredKeys", string(ignoreKeysJSON)) + } + _, err = query. FindAll() return } // FindItemStatsWithClusterIdAndLastTime 取得集群最近一次计时前 N 个数据 // 适合每条数据中包含不同的Key的场景 -func (this *MetricStatDAO) FindItemStatsWithClusterIdAndLastTime(tx *dbs.Tx, clusterId int64, itemId int64, version int32, size int64) (result []*MetricStat, err error) { +func (this *MetricStatDAO) FindItemStatsWithClusterIdAndLastTime(tx *dbs.Tx, clusterId int64, itemId int64, ignoreEmptyKeys bool, ignoreKeys []string, version int32, size int64) (result []*MetricStat, err error) { // 最近一次时间 statOne, err := this.Query(tx). Attr("itemId", itemId). @@ -172,7 +184,7 @@ func (this *MetricStatDAO) FindItemStatsWithClusterIdAndLastTime(tx *dbs.Tx, clu var lastStat = statOne.(*MetricStat) var lastTime = lastStat.Time - _, err = this.Query(tx). + var query = this.Query(tx). Attr("clusterId", clusterId). Attr("itemId", itemId). Attr("version", version). @@ -183,14 +195,27 @@ func (this *MetricStatDAO) FindItemStatsWithClusterIdAndLastTime(tx *dbs.Tx, clu Desc("value"). Group("keys"). Limit(size). - Slice(&result). + Slice(&result) + if ignoreEmptyKeys { + query.Where("NOT JSON_CONTAINS(`keys`, '\"\"')") + } + if len(ignoreKeys) > 0 { + ignoreKeysJSON, err := json.Marshal(ignoreKeys) + if err != nil { + return nil, err + } + query.Where("NOT JSON_CONTAINS(:ignoredKeys, JSON_EXTRACT(`keys`, '$[0]'))") // TODO $[0] 需要换成keys中的primary key位置 + query.Param("ignoredKeys", string(ignoreKeysJSON)) + } + + _, err = query. FindAll() return } // FindItemStatsWithNodeIdAndLastTime 取得节点最近一次计时前 N 个数据 // 适合每条数据中包含不同的Key的场景 -func (this *MetricStatDAO) FindItemStatsWithNodeIdAndLastTime(tx *dbs.Tx, nodeId int64, itemId int64, version int32, size int64) (result []*MetricStat, err error) { +func (this *MetricStatDAO) FindItemStatsWithNodeIdAndLastTime(tx *dbs.Tx, nodeId int64, itemId int64, ignoreEmptyKeys bool, ignoreKeys []string, version int32, size int64) (result []*MetricStat, err error) { // 最近一次时间 statOne, err := this.Query(tx). Attr("itemId", itemId). @@ -205,8 +230,7 @@ func (this *MetricStatDAO) FindItemStatsWithNodeIdAndLastTime(tx *dbs.Tx, nodeId } var lastStat = statOne.(*MetricStat) var lastTime = lastStat.Time - - _, err = this.Query(tx). + var query = this.Query(tx). Attr("nodeId", nodeId). Attr("itemId", itemId). Attr("version", version). @@ -217,14 +241,27 @@ func (this *MetricStatDAO) FindItemStatsWithNodeIdAndLastTime(tx *dbs.Tx, nodeId Desc("value"). Group("keys"). Limit(size). - Slice(&result). + Slice(&result) + if ignoreEmptyKeys { + query.Where("NOT JSON_CONTAINS(`keys`, '\"\"')") + } + if len(ignoreKeys) > 0 { + ignoreKeysJSON, err := json.Marshal(ignoreKeys) + if err != nil { + return nil, err + } + query.Where("NOT JSON_CONTAINS(:ignoredKeys, JSON_EXTRACT(`keys`, '$[0]'))") // TODO $[0] 需要换成keys中的primary key位置 + query.Param("ignoredKeys", string(ignoreKeysJSON)) + } + + _, err = query. FindAll() return } // FindItemStatsWithServerIdAndLastTime 取得节点最近一次计时前 N 个数据 // 适合每条数据中包含不同的Key的场景 -func (this *MetricStatDAO) FindItemStatsWithServerIdAndLastTime(tx *dbs.Tx, serverId int64, itemId int64, version int32, size int64) (result []*MetricStat, err error) { +func (this *MetricStatDAO) FindItemStatsWithServerIdAndLastTime(tx *dbs.Tx, serverId int64, itemId int64, ignoreEmptyKeys bool, ignoreKeys []string, version int32, size int64) (result []*MetricStat, err error) { // 最近一次时间 statOne, err := this.Query(tx). Attr("itemId", itemId). @@ -240,7 +277,7 @@ func (this *MetricStatDAO) FindItemStatsWithServerIdAndLastTime(tx *dbs.Tx, serv var lastStat = statOne.(*MetricStat) var lastTime = lastStat.Time - _, err = this.Query(tx). + var query = this.Query(tx). Attr("serverId", serverId). Attr("itemId", itemId). Attr("version", version). @@ -251,15 +288,28 @@ func (this *MetricStatDAO) FindItemStatsWithServerIdAndLastTime(tx *dbs.Tx, serv Desc("value"). Group("keys"). Limit(size). - Slice(&result). + Slice(&result) + if ignoreEmptyKeys { + query.Where("NOT JSON_CONTAINS(`keys`, '\"\"')") + } + if len(ignoreKeys) > 0 { + ignoreKeysJSON, err := json.Marshal(ignoreKeys) + if err != nil { + return nil, err + } + query.Where("NOT JSON_CONTAINS(:ignoredKeys, JSON_EXTRACT(`keys`, '$[0]'))") // TODO $[0] 需要换成keys中的primary key位置 + query.Param("ignoredKeys", string(ignoreKeysJSON)) + } + + _, err = query. FindAll() return } // FindLatestItemStats 取得所有集群上最近 N 个时间的数据 // 适合同个Key在不同时间段的变化场景 -func (this *MetricStatDAO) FindLatestItemStats(tx *dbs.Tx, itemId int64, version int32, size int64) (result []*MetricStat, err error) { - _, err = this.Query(tx). +func (this *MetricStatDAO) FindLatestItemStats(tx *dbs.Tx, itemId int64, ignoreEmptyKeys bool, ignoreKeys []string, version int32, size int64) (result []*MetricStat, err error) { + var query = this.Query(tx). Attr("itemId", itemId). Attr("version", version). // TODO 增加更多聚合算法,比如 AVG、MEDIAN、MIN、MAX 等 @@ -268,7 +318,20 @@ func (this *MetricStatDAO) FindLatestItemStats(tx *dbs.Tx, itemId int64, version Desc("time"). Group("time"). Limit(size). - Slice(&result). + Slice(&result) + if ignoreEmptyKeys { + query.Where("NOT JSON_CONTAINS(`keys`, '\"\"')") + } + if len(ignoreKeys) > 0 { + ignoreKeysJSON, err := json.Marshal(ignoreKeys) + if err != nil { + return nil, err + } + query.Where("NOT JSON_CONTAINS(:ignoredKeys, JSON_EXTRACT(`keys`, '$[0]'))") // TODO $[0] 需要换成keys中的primary key位置 + query.Param("ignoredKeys", string(ignoreKeysJSON)) + } + + _, err = query. FindAll() if err != nil { return nil, err @@ -279,8 +342,8 @@ func (this *MetricStatDAO) FindLatestItemStats(tx *dbs.Tx, itemId int64, version // FindLatestItemStatsWithClusterId 取得集群最近 N 个时间的数据 // 适合同个Key在不同时间段的变化场景 -func (this *MetricStatDAO) FindLatestItemStatsWithClusterId(tx *dbs.Tx, clusterId int64, itemId int64, version int32, size int64) (result []*MetricStat, err error) { - _, err = this.Query(tx). +func (this *MetricStatDAO) FindLatestItemStatsWithClusterId(tx *dbs.Tx, clusterId int64, itemId int64, ignoreEmptyKeys bool, ignoreKeys []string, version int32, size int64) (result []*MetricStat, err error) { + var query = this.Query(tx). Attr("clusterId", clusterId). Attr("itemId", itemId). Attr("version", version). @@ -290,7 +353,20 @@ func (this *MetricStatDAO) FindLatestItemStatsWithClusterId(tx *dbs.Tx, clusterI Desc("time"). Group("time"). Limit(size). - Slice(&result). + Slice(&result) + if ignoreEmptyKeys { + query.Where("NOT JSON_CONTAINS(`keys`, '\"\"')") + } + if len(ignoreKeys) > 0 { + ignoreKeysJSON, err := json.Marshal(ignoreKeys) + if err != nil { + return nil, err + } + query.Where("NOT JSON_CONTAINS(:ignoredKeys, JSON_EXTRACT(`keys`, '$[0]'))") // TODO $[0] 需要换成keys中的primary key位置 + query.Param("ignoredKeys", string(ignoreKeysJSON)) + } + + _, err = query. FindAll() if err != nil { return nil, err @@ -301,8 +377,8 @@ func (this *MetricStatDAO) FindLatestItemStatsWithClusterId(tx *dbs.Tx, clusterI // FindLatestItemStatsWithNodeId 取得节点最近 N 个时间的数据 // 适合同个Key在不同时间段的变化场景 -func (this *MetricStatDAO) FindLatestItemStatsWithNodeId(tx *dbs.Tx, nodeId int64, itemId int64, version int32, size int64) (result []*MetricStat, err error) { - _, err = this.Query(tx). +func (this *MetricStatDAO) FindLatestItemStatsWithNodeId(tx *dbs.Tx, nodeId int64, itemId int64, ignoreEmptyKeys bool, ignoreKeys []string, version int32, size int64) (result []*MetricStat, err error) { + var query = this.Query(tx). Attr("nodeId", nodeId). Attr("itemId", itemId). Attr("version", version). @@ -312,7 +388,20 @@ func (this *MetricStatDAO) FindLatestItemStatsWithNodeId(tx *dbs.Tx, nodeId int6 Desc("time"). Group("time"). Limit(size). - Slice(&result). + Slice(&result) + if ignoreEmptyKeys { + query.Where("NOT JSON_CONTAINS(`keys`, '\"\"')") + } + if len(ignoreKeys) > 0 { + ignoreKeysJSON, err := json.Marshal(ignoreKeys) + if err != nil { + return nil, err + } + query.Where("NOT JSON_CONTAINS(:ignoredKeys, JSON_EXTRACT(`keys`, '$[0]'))") // TODO $[0] 需要换成keys中的primary key位置 + query.Param("ignoredKeys", string(ignoreKeysJSON)) + } + + _, err = query. FindAll() if err != nil { return nil, err @@ -323,8 +412,8 @@ func (this *MetricStatDAO) FindLatestItemStatsWithNodeId(tx *dbs.Tx, nodeId int6 // FindLatestItemStatsWithServerId 取得服务最近 N 个时间的数据 // 适合同个Key在不同时间段的变化场景 -func (this *MetricStatDAO) FindLatestItemStatsWithServerId(tx *dbs.Tx, serverId int64, itemId int64, version int32, size int64) (result []*MetricStat, err error) { - _, err = this.Query(tx). +func (this *MetricStatDAO) FindLatestItemStatsWithServerId(tx *dbs.Tx, serverId int64, itemId int64, ignoreEmptyKeys bool, ignoreKeys []string, version int32, size int64) (result []*MetricStat, err error) { + var query = this.Query(tx). Attr("serverId", serverId). Attr("itemId", itemId). Attr("version", version). @@ -334,7 +423,20 @@ func (this *MetricStatDAO) FindLatestItemStatsWithServerId(tx *dbs.Tx, serverId Desc("time"). Group("time"). Limit(size). - Slice(&result). + Slice(&result) + if ignoreEmptyKeys { + query.Where("NOT JSON_CONTAINS(`keys`, '\"\"')") + } + if len(ignoreKeys) > 0 { + ignoreKeysJSON, err := json.Marshal(ignoreKeys) + if err != nil { + return nil, err + } + query.Where("NOT JSON_CONTAINS(:ignoredKeys, JSON_EXTRACT(`keys`, '$[0]'))") // TODO $[0] 需要换成keys中的primary key位置 + query.Param("ignoredKeys", string(ignoreKeysJSON)) + } + + _, err = query. FindAll() if err != nil { return nil, err diff --git a/internal/rpc/services/service_admin.go b/internal/rpc/services/service_admin.go index 9f216b65..774e928d 100644 --- a/internal/rpc/services/service_admin.go +++ b/internal/rpc/services/service_admin.go @@ -751,7 +751,7 @@ func (this *AdminService) findMetricDataCharts(tx *dbs.Tx) (result []*pb.MetricD var pbStats = []*pb.MetricStat{} switch chart.Type { case serverconfigs.MetricChartTypeTimeLine: - itemStats, err := models.SharedMetricStatDAO.FindLatestItemStats(tx, itemId, types.Int32(item.Version), 10) + itemStats, err := models.SharedMetricStatDAO.FindLatestItemStats(tx, itemId, chart.IgnoreEmptyKeys == 1, chart.DecodeIgnoredKeys(), types.Int32(item.Version), 10) if err != nil { return nil, err } @@ -780,7 +780,7 @@ func (this *AdminService) findMetricDataCharts(tx *dbs.Tx) (result []*pb.MetricD }) } default: - itemStats, err := models.SharedMetricStatDAO.FindItemStatsAtLastTime(tx, itemId, types.Int32(item.Version), 10) + itemStats, err := models.SharedMetricStatDAO.FindItemStatsAtLastTime(tx, itemId, chart.IgnoreEmptyKeys == 1, chart.DecodeIgnoredKeys(), types.Int32(item.Version), 10) if err != nil { return nil, err } diff --git a/internal/rpc/services/service_metric_chart.go b/internal/rpc/services/service_metric_chart.go index 1aaa6f4c..82b94a16 100644 --- a/internal/rpc/services/service_metric_chart.go +++ b/internal/rpc/services/service_metric_chart.go @@ -31,7 +31,7 @@ func (this *MetricChartService) CreateMetricChart(ctx context.Context, req *pb.C return nil, err } } - chartId, err := models.SharedMetricChartDAO.CreateChart(tx, req.MetricItemId, req.Name, req.Type, req.WidthDiv, req.MaxItems, params) + chartId, err := models.SharedMetricChartDAO.CreateChart(tx, req.MetricItemId, req.Name, req.Type, req.WidthDiv, req.MaxItems, params, req.IgnoreEmptyKeys, req.IgnoredKeys) if err != nil { return nil, err } @@ -53,7 +53,7 @@ func (this *MetricChartService) UpdateMetricChart(ctx context.Context, req *pb.U return nil, err } } - err = models.SharedMetricChartDAO.UpdateChart(tx, req.MetricChartId, req.Name, req.Type, req.WidthDiv, req.MaxItems, params, req.IsOn) + err = models.SharedMetricChartDAO.UpdateChart(tx, req.MetricChartId, req.Name, req.Type, req.WidthDiv, req.MaxItems, params, req.IgnoreEmptyKeys, req.IgnoredKeys, req.IsOn) if err != nil { return nil, err } @@ -77,14 +77,16 @@ func (this *MetricChartService) FindEnabledMetricChart(ctx context.Context, req } return &pb.FindEnabledMetricChartResponse{ MetricChart: &pb.MetricChart{ - Id: int64(chart.Id), - Name: chart.Name, - Type: chart.Type, - WidthDiv: types.Int32(chart.WidthDiv), - MaxItems: types.Int32(chart.MaxItems), - ParamsJSON: []byte(chart.Params), - IsOn: chart.IsOn == 1, - MetricItem: &pb.MetricItem{Id: int64(chart.ItemId)}, + Id: int64(chart.Id), + Name: chart.Name, + Type: chart.Type, + WidthDiv: types.Int32(chart.WidthDiv), + MaxItems: types.Int32(chart.MaxItems), + ParamsJSON: []byte(chart.Params), + IgnoreEmptyKeys: chart.IgnoreEmptyKeys == 1, + IgnoredKeys: chart.DecodeIgnoredKeys(), + IsOn: chart.IsOn == 1, + MetricItem: &pb.MetricItem{Id: int64(chart.ItemId)}, }, }, nil } @@ -119,13 +121,15 @@ func (this *MetricChartService) ListEnabledMetricCharts(ctx context.Context, req var pbCharts []*pb.MetricChart for _, chart := range charts { pbCharts = append(pbCharts, &pb.MetricChart{ - Id: int64(chart.Id), - Name: chart.Name, - Type: chart.Type, - WidthDiv: types.Int32(chart.WidthDiv), - MaxItems: types.Int32(chart.MaxItems), - ParamsJSON: []byte(chart.Params), - IsOn: chart.IsOn == 1, + Id: int64(chart.Id), + Name: chart.Name, + Type: chart.Type, + WidthDiv: types.Int32(chart.WidthDiv), + MaxItems: types.Int32(chart.MaxItems), + ParamsJSON: []byte(chart.Params), + IgnoreEmptyKeys: chart.IgnoreEmptyKeys == 1, + IgnoredKeys: chart.DecodeIgnoredKeys(), + IsOn: chart.IsOn == 1, }) } return &pb.ListEnabledMetricChartsResponse{MetricCharts: pbCharts}, nil diff --git a/internal/rpc/services/service_server_stat_board.go b/internal/rpc/services/service_server_stat_board.go index 2f9195e2..17e9b1e4 100644 --- a/internal/rpc/services/service_server_stat_board.go +++ b/internal/rpc/services/service_server_stat_board.go @@ -605,11 +605,11 @@ func (this *ServerStatBoardService) findNodeClusterMetricDataCharts(tx *dbs.Tx, case serverconfigs.MetricChartTypeTimeLine: var itemStats []*models.MetricStat if serverId > 0 { - itemStats, err = models.SharedMetricStatDAO.FindLatestItemStatsWithServerId(tx, serverId, itemId, types.Int32(item.Version), 10) + itemStats, err = models.SharedMetricStatDAO.FindLatestItemStatsWithServerId(tx, serverId, itemId, chart.IgnoreEmptyKeys == 1, chart.DecodeIgnoredKeys(), types.Int32(item.Version), 10) } else if nodeId > 0 { - itemStats, err = models.SharedMetricStatDAO.FindLatestItemStatsWithNodeId(tx, nodeId, itemId, types.Int32(item.Version), 10) + itemStats, err = models.SharedMetricStatDAO.FindLatestItemStatsWithNodeId(tx, nodeId, itemId, chart.IgnoreEmptyKeys == 1, chart.DecodeIgnoredKeys(), types.Int32(item.Version), 10) } else { - itemStats, err = models.SharedMetricStatDAO.FindLatestItemStatsWithClusterId(tx, clusterId, itemId, types.Int32(item.Version), 10) + itemStats, err = models.SharedMetricStatDAO.FindLatestItemStatsWithClusterId(tx, clusterId, itemId, chart.IgnoreEmptyKeys == 1, chart.DecodeIgnoredKeys(), types.Int32(item.Version), 10) } if err != nil { return nil, err @@ -649,11 +649,11 @@ func (this *ServerStatBoardService) findNodeClusterMetricDataCharts(tx *dbs.Tx, default: var itemStats []*models.MetricStat if serverId > 0 { - itemStats, err = models.SharedMetricStatDAO.FindItemStatsWithServerIdAndLastTime(tx, serverId, itemId, types.Int32(item.Version), 10) + itemStats, err = models.SharedMetricStatDAO.FindItemStatsWithServerIdAndLastTime(tx, serverId, itemId, chart.IgnoreEmptyKeys == 1, chart.DecodeIgnoredKeys(), types.Int32(item.Version), 10) } else if nodeId > 0 { - itemStats, err = models.SharedMetricStatDAO.FindItemStatsWithNodeIdAndLastTime(tx, nodeId, itemId, types.Int32(item.Version), 10) + itemStats, err = models.SharedMetricStatDAO.FindItemStatsWithNodeIdAndLastTime(tx, nodeId, itemId, chart.IgnoreEmptyKeys == 1, chart.DecodeIgnoredKeys(), types.Int32(item.Version), 10) } else { - itemStats, err = models.SharedMetricStatDAO.FindItemStatsWithClusterIdAndLastTime(tx, clusterId, itemId, types.Int32(item.Version), 10) + itemStats, err = models.SharedMetricStatDAO.FindItemStatsWithClusterIdAndLastTime(tx, clusterId, itemId, chart.IgnoreEmptyKeys == 1, chart.DecodeIgnoredKeys(), types.Int32(item.Version), 10) } if err != nil { return nil, err