mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-12-18 01:16:35 +08:00
统计看板中合并相同Key的指标数据
This commit is contained in:
@@ -202,6 +202,8 @@ func (this *MetricStatDAO) ListItemStats(tx *dbs.Tx, itemId int64, version int32
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result = this.mergeStats(result)
|
||||||
|
|
||||||
sort.Slice(result, func(i, j int) bool {
|
sort.Slice(result, func(i, j int) bool {
|
||||||
if result[i].Time > result[j].Time {
|
if result[i].Time > result[j].Time {
|
||||||
return true
|
return true
|
||||||
@@ -268,6 +270,8 @@ func (this *MetricStatDAO) FindItemStatsAtLastTime(tx *dbs.Tx, itemId int64, ign
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result = this.mergeStats(result)
|
||||||
|
|
||||||
sort.Slice(result, func(i, j int) bool {
|
sort.Slice(result, func(i, j int) bool {
|
||||||
return result[i].Value > result[j].Value
|
return result[i].Value > result[j].Value
|
||||||
})
|
})
|
||||||
@@ -331,6 +335,8 @@ func (this *MetricStatDAO) FindItemStatsWithClusterIdAndLastTime(tx *dbs.Tx, clu
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result = this.mergeStats(result)
|
||||||
|
|
||||||
sort.Slice(result, func(i, j int) bool {
|
sort.Slice(result, func(i, j int) bool {
|
||||||
return result[i].Value > result[j].Value
|
return result[i].Value > result[j].Value
|
||||||
})
|
})
|
||||||
@@ -396,6 +402,8 @@ func (this *MetricStatDAO) FindItemStatsWithNodeIdAndLastTime(tx *dbs.Tx, nodeId
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result = this.mergeStats(result)
|
||||||
|
|
||||||
sort.Slice(result, func(i, j int) bool {
|
sort.Slice(result, func(i, j int) bool {
|
||||||
return result[i].Value > result[j].Value
|
return result[i].Value > result[j].Value
|
||||||
})
|
})
|
||||||
@@ -492,6 +500,8 @@ func (this *MetricStatDAO) FindLatestItemStats(tx *dbs.Tx, itemId int64, ignoreE
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result = this.mergeStats(result)
|
||||||
|
|
||||||
sort.Slice(result, func(i, j int) bool {
|
sort.Slice(result, func(i, j int) bool {
|
||||||
return result[i].Time > result[j].Time
|
return result[i].Time > result[j].Time
|
||||||
})
|
})
|
||||||
@@ -551,6 +561,8 @@ func (this *MetricStatDAO) FindLatestItemStatsWithClusterId(tx *dbs.Tx, clusterI
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result = this.mergeStats(result)
|
||||||
|
|
||||||
sort.Slice(result, func(i, j int) bool {
|
sort.Slice(result, func(i, j int) bool {
|
||||||
return result[i].Time > result[j].Time
|
return result[i].Time > result[j].Time
|
||||||
})
|
})
|
||||||
@@ -605,6 +617,8 @@ func (this *MetricStatDAO) FindLatestItemStatsWithNodeId(tx *dbs.Tx, nodeId int6
|
|||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
|
result = this.mergeStats(result)
|
||||||
|
|
||||||
sort.Slice(result, func(i, j int) bool {
|
sort.Slice(result, func(i, j int) bool {
|
||||||
return result[i].Time > result[j].Time
|
return result[i].Time > result[j].Time
|
||||||
})
|
})
|
||||||
@@ -721,3 +735,19 @@ func (this *MetricStatDAO) runBatch(f func(table string, locker *sync.Mutex) err
|
|||||||
wg.Wait()
|
wg.Wait()
|
||||||
return resultErr
|
return resultErr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 合并统计数据
|
||||||
|
func (this *MetricStatDAO) mergeStats(stats []*MetricStat) (result []*MetricStat) {
|
||||||
|
var m = map[string]*MetricStat{} // key+time => *MetricStat
|
||||||
|
for _, stat := range stats {
|
||||||
|
var uniqueKey = stat.Time + "@" + string(stat.Keys)
|
||||||
|
oldStat, ok := m[uniqueKey]
|
||||||
|
if !ok {
|
||||||
|
result = append(result, stat)
|
||||||
|
m[uniqueKey] = stat
|
||||||
|
} else {
|
||||||
|
oldStat.Value += stat.Value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user