github.com/songzhibin97/gkit@v1.2.13/internal/stat/reduce.go (about) 1 package stat 2 3 // Sum 返回窗口所有值之和 4 func Sum(iterator Iterator) float64 { 5 result := 0.0 6 for iterator.Next() { 7 bucket := iterator.Bucket() 8 for _, p := range bucket.Points { 9 result = result + p 10 } 11 } 12 return result 13 } 14 15 // Avg 返回窗口平均值 16 func Avg(iterator Iterator) float64 { 17 result := 0.0 18 count := 0.0 19 for iterator.Next() { 20 bucket := iterator.Bucket() 21 for _, p := range bucket.Points { 22 result = result + p 23 count = count + 1 24 } 25 } 26 return result / count 27 } 28 29 // Min 返回窗口最小值 30 func Min(iterator Iterator) float64 { 31 result := 0.0 32 started := false 33 for iterator.Next() { 34 bucket := iterator.Bucket() 35 for _, p := range bucket.Points { 36 if !started { 37 result = p 38 started = true 39 continue 40 } 41 if p < result { 42 result = p 43 } 44 } 45 } 46 return result 47 } 48 49 // Max 返回窗口最大值 50 func Max(iterator Iterator) float64 { 51 result := 0.0 52 started := false 53 for iterator.Next() { 54 bucket := iterator.Bucket() 55 for _, p := range bucket.Points { 56 if !started { 57 result = p 58 started = true 59 continue 60 } 61 if p > result { 62 result = p 63 } 64 } 65 } 66 return result 67 } 68 69 // Count 返回窗口中的 key 70 func Count(iterator Iterator) float64 { 71 var result int64 72 for iterator.Next() { 73 bucket := iterator.Bucket() 74 result += bucket.Count 75 } 76 return float64(result) 77 }