BUGFIX: properly calculate histogram_quantile with the same value and different string le (#3225)

Co-authored-by: 647(siki.liu) <siki.liu@huolala.cn>
This commit is contained in:
Siqi Liu 2022-10-13 16:57:16 +08:00 committed by GitHub
parent 76e275ddef
commit 930f1ee153
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -942,6 +942,7 @@ func transformHistogramQuantile(tfa *transformFuncArg) ([]*timeseries, error) {
}
rvs := make([]*timeseries, 0, len(m))
for _, xss := range m {
xss = mergeSameLE(xss)
sort.Slice(xss, func(i, j int) bool {
return xss[i].le < xss[j].le
})
@ -1034,6 +1035,37 @@ func fixBrokenBuckets(i int, xss []leTimeseries) {
}
}
func mergeSameLE(xss []leTimeseries) []leTimeseries {
hit := false
m := make(map[float64]leTimeseries)
for _, xs := range xss {
i, ok := m[xs.le]
if ok {
ts := &timeseries{}
ts.CopyFromShallowTimestamps(i.ts)
for k := range ts.Values {
ts.Values[k] += xs.ts.Values[k]
}
m[xs.le] = leTimeseries{
le: xs.le,
ts: ts,
}
hit = true
continue
}
m[xs.le] = xs
}
if (!hit) {
return xss
}
r := make([]leTimeseries, 0, len(m))
for _, v := range m {
r = append(r, v)
}
return r
}
func transformHour(t time.Time) int {
return t.Hour()
}