fix: missing data when processing multiple time series in a g… (#127)

* fix: address missing data when processing multiple time series in a group with insight data API

* chore: update release notes
This commit is contained in:
silenceqi 2025-02-13 17:31:04 +08:00 committed by GitHub
parent c76875c1c2
commit 1ee6c59d2c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 30 additions and 2 deletions

View File

@ -15,6 +15,7 @@ Information about release notes of INFINI Console is provided here.
- Support alerts based on bucket diff state (#119) - Support alerts based on bucket diff state (#119)
### Bug fix ### Bug fix
- Fixed missing data when processing multiple time series in a group with insight data API (#127)
### Improvements ### Improvements

View File

@ -14,6 +14,7 @@ title: "版本历史"
### Features ### Features
- 告警功能支持根据桶之间文档数差值和内容差异告警 (#119) - 告警功能支持根据桶之间文档数差值和内容差异告警 (#119)
### Bug fix ### Bug fix
- 修复 Insight API 处理多时间序列数据时数据丢失的问题 (#127)
### Improvements ### Improvements

View File

@ -296,7 +296,11 @@ func getMetricData(metric *insight.Metric) (interface{}, error) {
Groups: md.Groups, Groups: md.Groups,
Data: map[string][]insight.MetricDataItem{}, Data: map[string][]insight.MetricDataItem{},
} }
retMetricDataItem := insight.MetricDataItem{} //merge metric data by timestamp
var timeMetricData = map[interface{}]*insight.MetricDataItem{}
//non time series data
grpMetricData := &insight.MetricDataItem{}
isTimeSeries := false
for _, formula = range metric.Formulas { for _, formula = range metric.Formulas {
tpl, err := template.New("insight_formula").Parse(formula) tpl, err := template.New("insight_formula").Parse(formula)
if err != nil { if err != nil {
@ -347,6 +351,19 @@ func getMetricData(metric *insight.Metric) (interface{}, error) {
continue continue
} }
} }
var retMetricDataItem *insight.MetricDataItem
//time series data
if timestamp != nil {
isTimeSeries = true
if v, ok := timeMetricData[timestamp]; !ok {
retMetricDataItem = &insight.MetricDataItem{}
} else {
retMetricDataItem = v
}
} else {
//non time series data
retMetricDataItem = grpMetricData
}
retMetricDataItem.Timestamp = timestamp retMetricDataItem.Timestamp = timestamp
if len(metric.Formulas) <= 1 && metric.Formula != "" { if len(metric.Formulas) <= 1 && metric.Formula != "" {
//support older versions by returning the result for a single formula. //support older versions by returning the result for a single formula.
@ -358,9 +375,18 @@ func getMetricData(metric *insight.Metric) (interface{}, error) {
retMetricDataItem.Value = map[string]interface{}{formula: result} retMetricDataItem.Value = map[string]interface{}{formula: result}
} }
} }
if timestamp != nil {
timeMetricData[timestamp] = retMetricDataItem
}
}
}
if !isTimeSeries {
targetData.Data["result"] = append(targetData.Data["result"], *grpMetricData)
} else {
for _, v := range timeMetricData {
targetData.Data["result"] = append(targetData.Data["result"], *v)
} }
} }
targetData.Data["result"] = append(targetData.Data["result"], retMetricDataItem)
targetMetricData = append(targetMetricData, targetData) targetMetricData = append(targetMetricData, targetData)
} }
} }