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()
}
}