metrics/librato: fix incorrect calculation of sumSquares

This commit is contained in:
Aaron Chen 2024-04-23 16:07:51 +08:00 committed by GitHub
parent acd1eaae2c
commit a42f42aa06
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -62,22 +62,14 @@ func (rep *Reporter) Run() {
// calculate sum of squares from data provided by metrics.Histogram // calculate sum of squares from data provided by metrics.Histogram
// see http://en.wikipedia.org/wiki/Standard_deviation#Rapid_calculation_methods // see http://en.wikipedia.org/wiki/Standard_deviation#Rapid_calculation_methods
func sumSquares(icount int64, mean, stDev float64) float64 { func sumSquares(icount int64, mean, stDev float64) float64 {
count := float64(icount) sumSquares := float64(icount) * (math.Pow(mean, 2) + math.Pow(stDev, 2))
sumSquared := math.Pow(count*mean, 2)
sumSquares := math.Pow(count*stDev, 2) + sumSquared/count
if math.IsNaN(sumSquares) { if math.IsNaN(sumSquares) {
return 0.0 return 0.0
} }
return sumSquares return sumSquares
} }
func sumSquaresTimer(t metrics.TimerSnapshot) float64 { func sumSquaresTimer(t metrics.TimerSnapshot) float64 {
count := float64(t.Count()) return sumSquares(t.Count(), t.Mean(), t.StdDev())
sumSquared := math.Pow(count*t.Mean(), 2)
sumSquares := math.Pow(count*t.StdDev(), 2) + sumSquared/count
if math.IsNaN(sumSquares) {
return 0.0
}
return sumSquares
} }
func (rep *Reporter) BuildRequest(now time.Time, r metrics.Registry) (snapshot Batch, err error) { func (rep *Reporter) BuildRequest(now time.Time, r metrics.Registry) (snapshot Batch, err error) {