func AdvanceDataPoint()

in metricsgenreceiver/internal/distribution/distribution.go [22:62]


func AdvanceDataPoint(dp dp.DataPoint, rand *rand.Rand, m pmetric.Metric, dist DistributionCfg) {
	switch v := dp.(type) {
	case pmetric.NumberDataPoint:
		switch v.ValueType() {
		case pmetric.NumberDataPointValueTypeDouble:
			value := v.DoubleValue()
			if m.Type() == pmetric.MetricTypeGauge {
				if value >= 0 && value <= 1 {
					value = advanceZeroToOne(value, rand, dist)
				} else {
					value = advanceFloat(rand, m, value, dist)
					// avoid keeping the value locked between 0..1 in successive runs
					if value >= 0 && value <= 1 {
						if value < 0.5 {
							value--
						} else {
							value++
						}
					}
				}
			} else {
				value = advanceFloat(rand, m, value, dist)
			}
			v.SetDoubleValue(value)
			break
		case pmetric.NumberDataPointValueTypeInt:
			v.SetIntValue(advanceInt(rand, m, v.IntValue(), dist))
			break
		default:
		}
	case pmetric.HistogramDataPoint:
		count := uint64(0)
		for i := 0; i < v.BucketCounts().Len(); i++ {
			val := uint64(advanceInt(rand, m, int64(v.BucketCounts().At(i)), dist))
			count += val
			v.BucketCounts().SetAt(i, val)
		}
		v.SetCount(count)
		v.RemoveSum()
	}
}