func()

in appinsights/telemetry.go [290:325]


func (agg *AggregateMetricTelemetry) addData(values []float64, vsum float64) float64 {
	if len(values) == 0 {
		return vsum
	}

	// Running tally of the mean is important for incremental variance computation.
	var mean float64

	if agg.Count == 0 {
		agg.Min = values[0]
		agg.Max = values[0]
	} else {
		mean = agg.Value / float64(agg.Count)
	}

	for _, x := range values {
		// Update Min, Max, Count, and Value
		agg.Count++
		agg.Value += x

		if x < agg.Min {
			agg.Min = x
		}

		if x > agg.Max {
			agg.Max = x
		}

		// Welford's algorithm to compute variance.  The divide occurs in the caller.
		newMean := agg.Value / float64(agg.Count)
		vsum += (x - mean) * (x - newMean)
		mean = newMean
	}

	return vsum
}