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  }